首页 > 代码库 > CTF 脚本编程 速度爆破
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=http://www.mamicode.com/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=http://www.mamicode.com/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}
还是基础太差,还是屌丝一枚,继续加油
CTF 脚本编程 速度爆破