0%

sqlmap注入基础参数

  • MySQL 注释

    注释符:#--/**/

    注意这里 -- 后面的空格,在 chrome 中可能被吞掉,那么应该用 %20 来代替空格

    内联注释:/*! sql语句 */ ,仅有 MySQL 可以识别,用来绕过 WAF,例:

    1
    SELECT *FROM user WHERE id=-1 /*!union*/ /*!select*/ 1,2,3,4
  • SQLmap

    • 获取目标

      • 直连数据库

        • 服务型数据库(如mysql,oracal,microsoft SQL server)

          1
          sqlmap -d DBMS://ADMIN:PASSWORD@DBMS_IP:DBMS:PORTS/DATABASE_NAME
        • 文件型数据库(需要知道绝对路径)

          1
          sqlmap -d DBMS://DATABASE_FILEPATH
      • url 探测

        -u / -url

      • 从文件读取目标

        • -lburp 中读取的 http 请求日志文件—>在 Project options-misc-logging-Proxy 选择requests
        • -x 从站点地图 sitemap 中读取慕白哦
        • -m 从文本格式文件中读取多行作为目标
        • -r 文本文件中读取 http 请求作为目标
        • -c 从配置文件 sqlmap.conf 读取目标
    • 参数设置

      • http 请求方法

        • get 向服务器请求资源
        • post 向服务器提交资源
        • put 全局更新资源
        • delete 删除

          sqlmap 中,put 请求不会自动使用,那么可以强制指定,但并不常用

          1
          --method=PUT
      • 设置 POST 请求

        默认下执行 http 请求的方法是 GET ,但可以通过提供仅在 POST 请求中发送的数据将其更改为 POST 方法

        1
        --data="[截获的请求参数]"

        当然,--method 在这里也可以使用

        如图就是截获的 POST 参数,对于 GET 请求的使用如此参数便可以 POST 方式

      • 设置参数分隔符

        1
        --param-del="[指定分隔符]"

        sqlmap 默认分隔符为 & ,而当特殊情况下截获的参数分隔符不为 & 时,需要手动设置与其相同的分隔符以便正常探测

        如截获的请求为 user=admin;pass=123 时,分隔符为 ; ,此时需要手动设置

      • 设置 cookie

        1
        --cookie [cookie]

        当仅使用自己的 cookie 而不用网站返回的 set-cookie 报头时,可以使用 drop-set-cookie 忽略网站返回的所有 cookie

        注意:对 cookie 进行探测时,需要设置 level 为 $2-5$

      • 设置 user-agent

        默认情况下,sqlmap 使用的用户代理头容易被相关措施拦下,但可以自定义用户代理来伪造

        1
        2
        --user-agent="[合法的useragent]"
        --random-agent 从share/sqlamp/txt/user-agent.txt中随机选取一

        burp 抓包即可得到合法的 user-agent

        此时 level 设置需为 $3$ 以上

      • 设置 host

        $\sout{感觉没什么用的样子}$

        • 关于 host

          一个 ip 可对应多个域名,host 参数用于识别将访问到哪个域名

          当服务器仅允许特定主机访问敏感资源时,可以伪造 host 标头,使服务器误以为请求来自受信任的主机

          比如通过查看 robot.txt 发现后台,将 host 改为 localhost 绕过

          level 设置为 $5$ 时,sqlmap 将对 HTTP 主机头进行注入探测

      • 设置 referer

        • 关于

          包含 “引荐页面” ,即用户在访问当前页面之前所在的位置

          常用于用户跟踪,比如是否从特定网站访问,防盗链等,但值得注意的是 referer 易被更改,不能用于关键部分。

          sqlmap 中,默认不发送任何引用头。而当 level 在 $3$ 以上时,会对 referer 进行渗透测试

      • 设置 http 标头

        就是总结输入以上参数,以 \n 分割不同参数,例

        1
        --header="User-agent:[balabala]\ncookie:[balabala]\nhost:[balabala]"
      • 设置 http 认证

        • 关于认证

          • basic

            服务器收到敏感请求后返回 $401$ 状态,要求用户名与密码,客户端以 base64 加密后明文发送至服务器,成功后服务器返回 $200$ 状态

          • Digest

            客户端根据用户名密码加密生成响应码 response (默认下是 md5 加密), 服务器验证响应码

            值得注意的是,即使不再以明文传输密码,攻击者仍可截获响应码进行重放攻击。所以一般来说服务器会发送基于时间的随机数 nonce,并要求其与用户名密码一同加密,从而避免未随机化的摘要认证

          • NTML

            Windows 下的单点验证。客户端发送用户名,并根据密码生成对应摘要,服务器返回一个随机数挑战 Challenge ,客户端使用摘要对随机数加密(HMAC-MD5)并返回给服务器,服务器检索用户名并进行根据其密码同样加密,若两者相符则认证成功

          而在 sqlmap 中,针对需要认证的页面,通过设置参数中的用户名和密码可以进行渗透测试

          1
          2
          --auth-type [支持的认证方式:Basic,Digest,NTML]
          --auth-cred "[username]:[password]"
      • 设置代理

        1
        2
        3
        4
        --proxy http://[ip]:[port]
        --proxy-cred [username]:[password]
        --proxy-file 从文件中设置多条代理
        --ignore-proxy 忽略系统代理
      • 设置测试参数

        1
        2
        3
        4
        5
        --delay [time] //延迟发包时间
        --timeout [double_time] //超时时间,默认30s,可设置小数
        --retries count [num] //设置重试次数
        --ignore 401 //忽略未验证错误
        --skip-urlencode //关闭url编码
      • 设置随机参数

        每次请求中随机更改指定值,长度与类型与原始值保持一致,如对 id 进行随机,会随机提交 id=1,2,3... 的请求

        1
        --randomize [参数名称]
      • 设置安全模式

        对于大型渗透中,当 sqlmap 多次不成功访问时,服务器长时间不响应,会导致与 sqlmap 的连接中断,导致会话失效。所以应该一直保持最初的会话,即在每次请求数量达到预设时访问该 url ,因为不对该 url 进行任何注入,所以服务器一定会相应,从而达到保持会话的目的

        1
        --safe-url [url]
      • 绕过 CSRF

        网站一般在表单中添加随机值的 token 为隐藏字段来防止 CSRF 攻击,sqlmap 自动识别失效时需要手动添加参数

        1
        2
        -csrf-token [字段名] 指定包含token的隐藏字段名,不过不是常见字段名则不能识别,需要手动指定
        -csrf-url [url] 从任意url中回收token,当目标url不包含token而要求在其他网站提取token时可用
    • 性能优化

      1
      -o //开启所有性能优化参数
      • HTTP 持久连接

        此时 HTTP 报文中显示 Connection:keep alive

        1
        --keep-alive

        当扫描站点url较多时,如此能提高性能

      • 不接受 HTTP body

        盲注时,只关心响应头 head 部分,则设置空连接

        1
        --null-connection
      • 多线程

        1
        --thread=[num]

        最大线程数为 $10$

    • 指定位置注入

      Submit 为静态参数,id 为动态参数,那么扫描时只需要指定 id 即可

      同理,可以跳过某些参数

      1
      2
      -p "id","[balabala],[balabala]"
      --skip "referer,host"
      1
      2
      --param-exclude="[],[]" //不对包含指定参数的请求进行探测
      --skip-static //扫描时忽略非动态参数