SQLMap自动注入-Request、Optimization

SQLMap自动注入-Request

基本数据
  • cookie头:–cookie
    • web应用需要基于cookie的身份认证
    • 检查cookie中的注入点(sqlmap自动测试,当扫描level>=2时才会检查,–level 2)
    • Set-Cookie(sqlmap会自动检测,使用新的cookie)/–drop-set-cookie(drop掉,还使用原来的cookie)
    • sqlmap -u “xxx” –cookie=”key1=1;key2=2”
  • –user-agent
    • sqlmap检查user-agent中的注入点需要level>=3
  • –random-agent
    • /usr/share/sqlmap/txt/user-agents.txt,字典中随机抽取
  • Host头:–host=“xxx”
    • level=5
  • referer头:–referrer
    • level>=3
  • 额外的header:–headers=”Host:xxxxx\nUser=Agent:xxxxxxxxxxx\nxxxx:xxx”
    • 注意用换行符分隔。注意大小写。
  • –method=GET/POST
基于http协议的身份验证
  • Basic
  • Digest
  • NTLM
  • sqlmap -u “http://1.1.1.1/a.php?id=1" –auth-type Basic –auth-cred “user:pass”
  • –auth-cert/–auth-file
    • –auth-file=”ca.PEM”
    • 含有私钥的PEM格式证书文件
    • PEM格式的证书链文件
http(s)代理
  • –proxy=”http://127.0.0.1:8087"
  • –proxy-cerd=”user:pass”
  • –ignore-proxy
    • 忽略系统代理,通常用于扫描本地网络目标。
请求控制
  • –delay

    • 每次http(s)请求之间延迟时间,浮点数,单位为秒,默认无延迟
  • –timeout

    • 请求超时时间,浮点数,默认为30秒
  • –retries

    • http(s)连接超时重试次数,默认三次
  • –randomize

    • 长度、类型与原始值保持一致前提下,指定每次请求随机取值的参数名

    • sqlmap -u http://1.1.1.1/a.php?id=100 -randomize=”id”

  • –scope

    • 过滤日志内容,通过正则表达式筛选扫描对象
    • sqlmap -l burp.log –scope=”(www)?.target.(com|net|org)”
    • sqlmap -l 2.log –scope
  • –safe-url/–safe-freq

    • 检测和盲注截断会产生大量失败请求,服务器端可能因此销毁session
    • 每发送–safe-freq次诸如请求后,发送一次正常请求
  • –skip-urlencode

    • 默认get方法会对传输内容进行编码,但是有些web服务器不遵守rfc标准,使用原始字符。
  • –eval

SQLMap自动注入-Optimization

  • 优化性能
  • –predict-output
    • 根据检测方法,对比返回值和统计表内容,不断缩小检测范围(数据库类型版本等),提高检测效率
    • 通过 版本名、用户名、密码、Privileges、role、数据库名称、表名、列名等判断
    • 与–threads参数不兼容
    • 统计表:/usr/share/sqlmap/txt/common-outputs.txt
  • –keep-alive
    • 使用http(s)长连接,性能好
    • 与–proxy参数不兼容
    • 避免重复建立网络连接的开销,但大量长连接会严重占用服务器资源
  • –null-connection
    • 只获取相应页面的大小,而不是具体内容
    • 通常用于盲注判断 真/假,降低网络带宽消耗。比如页面会回传图片
    • 与–text-only参数不兼容(基于页面内容比较判断真/假)
      • 若是HTTP响应体中有许多诸如JavaScript之类的活动内容,可以使用参数“–text-only”让Sqlmap只专注于纯文本内容。
  • –threads
    • 最大并发线程
    • 盲注时每个线程获取一个字符(7次请求,因为第一位是0,高位ascii码键盘上没有),获取完成后线程结束
    • 默认值为1,建议不要超过10,否则可能影响站点可用性
    • 与–predict-output参数不兼容
  • -o 开启前三个性能参数(除–threads参数)