CTF 脚本编程 速度爆破

题目链接:http://ctf5.shiyanbar.com/ppc/sd.php

对于python的怎么post还有seesion我都是一无所知  -。。-

 

简单的归结一下知识点:

  1.利用Beautifulsoup获取sha1部分

  2.0-100000之间的整数进行md5和sha1加密

  3.结果进行比对,然后post提交

 

1.首先看了一下session的概念以及python中如果运用的,这里用到了requests模块

  seesion知识点博文连接:http://blog.csdn.net/u014649204/article/details/24119029    -。-大牛写的不错

  

1 url = 'http://ctf5.shiyanbar.com/ppc/sd.php'
2 status = requests.session()
3 html = status.get(url).text  #获取网页html

这个地方有个需要注意的地方,一开始对于seesion理解有误解,我就调用了urllib2库里面的urlopen(url)

这样相当于直接和session没有关系,结果还是每次提交就相当于刷新了一次页面,要保持刚才的状态就要利用获取到的状态status下进行get(url).text获取当前的html 

然后再进行筛选数据

 

2.Beautifulsoup获取sha1部分的内容

 1 soup = BeautifulSoup(html ,"html.parser") 

之前看过一套Beautifulsoup的教学,形容的很形象,就是一锅汤。然后获取汤中的元素

看了一下整个页面的源码

print soup.div.string

 Beautifulsoup比较不错的文章:http://cuiqingcai.com/1319.html

 

3.python实现post请求

  查了一下。。一般把需要提交的放到一个字典,中文需要url编码

1 post_Content = {'inputNumber': i, 'submit': '%E6%8F%90%E4%BA%A4'}  #如果还有多个参数都构造,中文url编码后的用
2 result = status.post(url, data=post_Content)

 

 

脚本源码:

  

#coding=utf-8
from bs4 import BeautifulSoup
import requests
import hashlib

def get_Flag(content,url,status):

    for i in range(0,100001):
        hashmd5 = hashlib.md5(str(i)).hexdigest()
        hashsha1 = hashlib.sha1(hashmd5).hexdigest()
        if hashsha1 == content:
            i = int(i)
            post_Content = {'inputNumber': i, 'submit': '%E6%8F%90%E4%BA%A4'}  #如果还有多个参数都构造,中文url编码后的用
            result = status.post(url, data=post_Content)
            print result.text
            break
            
url = 'http://ctf5.shiyanbar.com/ppc/sd.php'
status = requests.session()
html = status.get(url).text
soup = BeautifulSoup(html ,"html.parser")
get_Flag(soup.div.string,url,status)

 

get。。

CTF{BlAsT_FasT_Pr0gRamE}

 

还是基础太差,还是屌丝一枚,继续加油

posted @ 2017-05-29 17:33  AbyssViper  阅读(3252)  评论(0编辑  收藏  举报