web安全学习笔记(2)

Sqlmap

  • 基于python2的一款sql注入,数据库测试工具
1
-hh # 详细帮助信息

获取目标

  1. 直连数据库

    1
    2
    3
    4
    5
    6
    7
    # 服务型数据库(前提:知道数据库用户名、密码)
    DBMS://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME(Mysql, Oracle, MSSql, postgresql,etc)

    e.g.: python sqlmap.py -d "mysql://admin:admin@192.168.206.133:3306:/testdb" -f --banner --dbs --users

    # 文件型数据库(前提:知道数据库绝对路径)
    DBMS://DATABASE_FILEPATH(SQLite,Access, Firebird, etc)
  2. url探测

sqlmap直接对单一url探测,采用-u或者–url

1
2
3
4
5
6
7
8
9
10
URL格式:http(s):targeturl[:port]/[...]

比如:python sqlmap -u "http://192.168.0.206/sqli/Less-1/index.php/id=1" --banner

sqlmap支持不同类型文件中读取目标进行sql注入探测
1)-l 从burp proxy或webscarab proxy中读取http请求日志文件
2)-x 从sitemap.xml站点地图文件中读取目标探测
3)-m 从多行文本格式文件中读取多个目标,对多个目标进行探测
4)-r 从文本文件中读取http请求作为sql注入探测目标
5)-c 从配置文件sqlmap.conf中读取目标探测

这里我们将bp的project option下loggin勾选上requests立即弹出框,我们自己设置保存地址

  1. google hack批量扫注入

    1
    2
    3
    4
    5
    -g 使用-g自动利用google获取指定Google hack的目标,然后利用交互向导模式进行sql注入探测

    e.g. python sqlmap.py -g "inrul:\".php?id=1\"" (好像普通设置http(s)_proxy不能连接上)

    [CRITICAL] unable to connect to Google ('can't establish SSL connection')

设置请求参数

  1. 设置HTTP方法

    1
    --methed=你的METHOD # 某些场景下需要强制给定,--methed=PUT
  2. 设置POST提交参数

    1
    2
    3
    --data="id=1" -f --banner --dbs --users
    # --data直接转换为post方法,当然也可以使用--method=POST,-f是fingerprint
    ### fingerprint: comment injection fingerprint: MySQL 5.5.47
  3. 设置参数分割符

    某些情况下,sqlmap需要覆盖默认参数分割符(e.g. &在GET和POST数据),才能正确分割和单独处理每个参数

    1
    2
    python sqlmap.py -u "urL" --data="query=foobar;id=1" --param-del=";" -f --banner --dbs
    # --params-del指明data中的变量分割符
  4. 设置cookie头

    1
    2
    3
    4
    --cookie
    --cookie-del
    --load-cookies
    --drop-set-cookie # 忽略即将到来的set-cookie头

    使用场景

    1. web app中有基于cookie验证过程
    2. 想利用cookie值上的sql注入

    使用过程:

    1. 登录or浏览页面
    2. 打开代理截断or审计工具,复制cookie
    3. 在sqlmap中使用–cookie粘贴cookie
  5. 设置User-Agent

    1
    2
    3
    4
    --user-agent="你的UA" # 字符串ua粘贴进去
    --random-agent # sqlmap随机ua

    #
    #! 注意:针对UA的值进行检测sql注入,需要设置--level 3
  6. 设置Host头

    可以手动设置主机头,将对HTTP主机进行SQL注入检测,如果–level值设置为5,将对HTTP著机构进行全部探测

  7. 设置Referer头

    没有显式设置,HTTP请求不会发送HTTP引用头,注意若–level为3或以上,将对HTTP引用头进行sql测试

  8. 设置额外HTTP头

    通过设置–header,提供额外HTTP头。每个头必须用换行符分割,从配置ini文件中提供他们比较容易。可以查看sqlmap.conf

    1
    2
    3
    4
    5
    6
    python sqlmap.py -u "url" -H "User-Agent:...\n" # 只能指定单个头
    等同于??
    --header="..."

    设置多个头
    python sqlmap.py -u "url" --headers="User-Agent:...\nCookie:...\n...."
  9. 设置HTTP协议认证

    1
    2
    3
    4
    5
    6
    7
    认证参数
    --auth-type
    Basic Digest NTLM
    --auth-cred
    username:password

    e.g. python sqlmap.py -u "url" --auth-type Basic --auth-cred "user:passw"
  10. 设置HTTP代理

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    代理参数
    --proxy
    --proxy-cred
    --proxy-file
    --ignore-proxy

    其中
    --proxy用来设置HTTP代理服务器位置
    格式为: --proxy http(s)://ip[:port]

    --proxy-cred用来设置HTTP代理服务器认证信息 格式为:--proxy-cred username:password

    --proxy-file用来设置多条代理在文件中

    --ignore--proxy访问本地不用代理(拗口讲法:希望忽略系统范围内HTTP(S)代理服务器设置来针对本地网络目标部分运行sqlmap时)
  11. 设置Tor隐藏网络

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    --tor
    --tor-port
    --tor-type
    --check-tor

    #
    初次使用必须安装tor
    # kali中: apt install tor
    # 开启服务:service tor start
    # 状态:service tor status

    #
    注意要连接能够连接外网的vps或者别的代理
    e.g. python -u "url" --tor --tor-type https --check-tor
  12. 设置延迟

    1
    2
    3
    --delay 0.5 # 延迟0.5秒

    python sqlmap.py -u "url" --delay 0.5 -f
  13. 设置超时

    1
    --timeout 0.5 # 10.5秒超时
  14. 设置重置次数

    1
    --retries count # 设置对应重试次数,默认3次
  15. 设置随机化参数

    1
    2
    3
    --randomize 参数名称

    e.g. python sqlmap.py -u "url" --randomize id --banner
  16. 设置日志过滤目标

    可以指定有效的python正则表达式,用于过滤所需日志

    1
    2
    3
    --scope
    # e.g. python sqlmap.py -l burp.log --scope="(www)?\.target\.(com|net|org)"
    --skip-urlencode # 不进行url加密
  17. 设置忽略401

    1
    --ignore-401 # 用来忽略未验证错误
  18. 设置HTTP协议私钥

    1
    --auth-file 文件名 # 应该提供一个PEM的key file私钥文件
  19. 设置安全模式

    避免在多次请求失败后销毁会话,有时执行了一定量失败请求后web应用or检查技术会销毁会话,这可能发生在sqlmap检测阶段or利用盲注阶段

    1
    2
    3
    4
    --safe-url
    --safe-post
    --safe-req
    --safe-freq

    将访问预定义请求数量请求,而部队某个安全url执行任何注入

  20. 设置忽略URL编码

    1
    --skip-urlencode

    某些情况下服务器不遵循RFC标准,需要医院是非编码形式发送

设置额外HTTP头

FIXIT

1 2 3

sqlmap注入总结


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!