Bugku题目-爆破
在学校平台(PCCTF)做题的时候,遇到了这样一道Web题目:
它的内容呈现是这样的:
嗯……五位数密码,数字并不大,看起来似乎需要暴力破解了。
回到宿舍后,我试图再现这道题,然而宿舍并不链接学校的内网,无法进行记录。
所幸,我在网上开放的CTF题库-Bugku(https://ctf.bugku.com/)找到了呈现形式近乎一样的题——“输入密码查看flag”。
链接:http://123.206.87.240:8002/baopo/
初步思路:将链接扔进FireFox浏览器进行抓包,查看HTTP请求数据结构。
随意输入密码12345,点击“查看”,使用Burp Suite抓取此次请求:
POST /baopo/?yes HTTP/1.1
Host: 123.206.87.240:8002
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 9
Origin: http://123.206.87.240:8002
Connection: close
Referer: http://123.206.87.240:8002/baopo/
Upgrade-Insecure-Requests: 1
pwd=12345
注意最后一句pwd=12345,这就是我们此次破题的重点。我们可以知道,这个POST请求向服务器发送的是一个赋值的pwd表单,我们输入的12345就被赋值在这上面。
到了这时,思路就很清晰了:使用Python的Request包构造HTTP的POST请求,将数据(data)[pwd=密码]对服务器发起请求,然后解析收回的信息,直到获取flag。
具体代码如下:
导入requests包,以字符串形式存储目标网址。
构造传入数据parme={‘pwd’:’00001′}
使用for循环,并对parme列表的pwd进行赋值,然后将parme作为data向url服务器发送请求。
相关方法:requests.post(url,data=)
向指定网址url发送表单data=,返回服务器返回字段。
req.contect:返回字段的二进制形式
req.text:返回字段的文本形式
判断返回字段是否含有字符串“flag”,如果有则返回字段,否则返回“失败”。
因为做判断使用的是返回二进制形式的req.contect,所以需要在判断字符串’flag’前加一个b,标记二进制字段。
密码根据提示是五位数,所以我们的循环范围为10000~99999。
解释并启动,查看循环结果:
获得flag,flag为flag{bugku-baopo-hah}。
暂无评论内容