第二十三关
这一关是get类型
当输入?id=1'时,出现报错信息,是由单引号闭合的
但是输入?id=1'--+的时候,还是报错,说明我们的注释符可能被过滤处理了
查看码源,确实是把注释符过滤了
那我们还是根据语句构造
?id=1' or '1'='1
成功了
判断字段数,这里不能用order by,只能不断往上加数字,不过一般都是3
?id=-1' union select 1,2,3 or '1'='1
说明是三个字段,只显示2号位,那我们就可以在这个位置进行注入
?id=-1' union select 1,database(),3 or '1'='1
第二十四关
是一个登录页面,可以注册账号也可以修改密码
查看登录的源码,发现有mysql_real_escape_string函数对于特殊字符进行转义
查看注册的源码,也有转义函数
查看修改密码的源码,发现有可以利用的点,直接把我们登录的账号拼进语句中,没有把我们的账号进行转义,然后就更新密码
那只要我们注册一个有特殊符号的账号,再用这个账号登录进行修改密码,就可以修改到指定的账号的密码
这是我们数据库的全部账号,管理员账号一般都是admin
那我们就注册一个带有特殊字符的账号叫做admin'#,密码是123456,
然后就登录这个账号,再修改这个账号的密码为123,此时就会执行这个语句
UPDATE users SET PASSWORD='123' where username='admin'#' and password='123456'
注意,单引号闭合前面,#注释掉了后面的语句,也就是说本来修改密码的语句需要验证当前账号和密码,现在把我们含有特殊字符的账号拼到语句中去,只需要验证账号,我们不用知道管理员admin的密码,也能修改他的密码。
开始演示
注册账号
登录成功
开始修改密码
修改成功
可以看到,我们的账号密码没有修改,反而是修改了管理员的密码