-
Less-24
1.png
代码审计题
进入页面后各种加',"都返回相同错误页面,又看到题目写着二次注入,很明显是我不会的题
找了篇wp,发现也是代码审计,只好去看代码
一共8个php文件
大概浏览一遍,发现有5个是html静态文件,只有 -
login.php
-
login_create.php
-
pass_change.php
2.png
三个php动态文件,找到查询的部分,发现变量都用ysql_real_escape_string()函数或mysql_escape_string()函数进行了过滤,无法注入,只有pass_change.php文件中$username= $_SESSION["username"];
一个地方是直接从$_SESSION中读出username值。但是_SESSION是服务器端生成的无法伪造,只能通过修改username值。该站虽然无修改username的接口,但是可以创建用户,我们可以将注入语句写入创建的用户名中,进入注册页面,注册名为admin' #'
的用户
注册成功后用该账号登录,进入修改密码页面,修改密码为123
3.png
修改成功后登出,用username=admin,password=123登录,发现admin账号的密码已被修改为123,注入成功。
4.png
5.png -
Less-25
本来是领开一篇写Less-25的,结果新建文章遇到Record not found的问题,只好在Less-24后面接上了。
进入页面,看到图片可知应该是过滤了'or' 和 'and'
首先判断注入类型,单字符型注入。
本来想通过order by语句判断查询列数的,结果order中也含'or'被过滤了(笑)
1.png
那么通过联合查询判断查询列数
2.png
直接构造联合查询payload:
?id=0' union select 1,group_concat(username),group_concat(password) from users %23
结果发现password中也含'or'
3.png
因此构造payload:
?id=0' union select 1,group_concat(username),group_concat(id) from users %23
4.png
查询username和id,通过id就可以得到password,但这种方法并不好因为不是通过注入得到password,于是去看了wp,发现存在过滤次数的问题。
这里只进行了一次过滤
注:只进行一次过滤并不是指只过滤一个'or',而是对字符串只过滤一遍。例如passworororord中的'or'仍然会被全部过滤,而passwoorrd中只会过滤中间的'or',从而实现了过滤绕过
构造payload:
?id=0' union select 1,group_concat(username),group_concat(passwoorrd) from users %23
5.png
注入成功
(一般来说都不会进行多次过滤,因为可能正常字段中的'or'也会被过滤)
- Less-25a
和Less-25一样,区别有两个,一个是单字符型注入变成了数值型注入,另一个是无sql查询报错回显,构造payload:
?id=0 union select 1,group_concat(username),group_concat(passwoorrd) from users %23
6.png
注入成功
网友评论