web安全学习笔记(2)
Sqlmap
- 基于python2的一款sql注入,数据库测试工具
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)url探测
sqlmap直接对单一url探测,采用-u或者–url
1 |
|
这里我们将bp的project option下loggin勾选上requests立即弹出框,我们自己设置保存地址
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')
设置请求参数
设置HTTP方法
1
--methed=你的METHOD # 某些场景下需要强制给定,--methed=PUT
设置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设置参数分割符
某些情况下,sqlmap需要覆盖默认参数分割符(e.g. &在GET和POST数据),才能正确分割和单独处理每个参数
1
2python sqlmap.py -u "urL" --data="query=foobar;id=1" --param-del=";" -f --banner --dbs
# --params-del指明data中的变量分割符设置cookie头
1
2
3
4--cookie
--cookie-del
--load-cookies
--drop-set-cookie # 忽略即将到来的set-cookie头使用场景
- web app中有基于cookie验证过程
- 想利用cookie值上的sql注入
使用过程:
- 登录or浏览页面
- 打开代理截断or审计工具,复制cookie
- 在sqlmap中使用–cookie粘贴cookie
设置User-Agent
1
2
3
4--user-agent="你的UA" # 字符串ua粘贴进去
--random-agent # sqlmap随机ua
##! 注意:针对UA的值进行检测sql注入,需要设置--level 3设置Host头
可以手动设置主机头,将对HTTP主机进行SQL注入检测,如果–level值设置为5,将对HTTP著机构进行全部探测
设置Referer头
没有显式设置,HTTP请求不会发送HTTP引用头,注意若–level为3或以上,将对HTTP引用头进行sql测试
设置额外HTTP头
通过设置–header,提供额外HTTP头。每个头必须用换行符分割,从配置ini文件中提供他们比较容易。可以查看sqlmap.conf
1
2
3
4
5
6python sqlmap.py -u "url" -H "User-Agent:...\n" # 只能指定单个头
等同于??
--header="..."
设置多个头
python sqlmap.py -u "url" --headers="User-Agent:...\nCookie:...\n...."设置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"设置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时)设置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设置延迟
1
2
3--delay 0.5 # 延迟0.5秒
python sqlmap.py -u "url" --delay 0.5 -f设置超时
1
--timeout 0.5 # 10.5秒超时
设置重置次数
1
--retries count # 设置对应重试次数,默认3次
设置随机化参数
1
2
3--randomize 参数名称
e.g. python sqlmap.py -u "url" --randomize id --banner设置日志过滤目标
可以指定有效的python正则表达式,用于过滤所需日志
1
2
3--scope
# e.g. python sqlmap.py -l burp.log --scope="(www)?\.target\.(com|net|org)"
--skip-urlencode # 不进行url加密设置忽略401
1
--ignore-401 # 用来忽略未验证错误
设置HTTP协议私钥
1
--auth-file 文件名 # 应该提供一个PEM的key file私钥文件
设置安全模式
避免在多次请求失败后销毁会话,有时执行了一定量失败请求后web应用or检查技术会销毁会话,这可能发生在sqlmap检测阶段or利用盲注阶段
1
2
3
4--safe-url
--safe-post
--safe-req
--safe-freq将访问预定义请求数量请求,而部队某个安全url执行任何注入
设置忽略URL编码
1
--skip-urlencode
某些情况下服务器不遵循RFC标准,需要医院是非编码形式发送
设置额外HTTP头
FIXIT
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!