SQL注入--结合源代码审计的SQL注入
Posted Labs安全研习笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL注入--结合源代码审计的SQL注入相关的知识,希望对你有一定的参考价值。
大家好,今天小编为大家准备的是一道需要结合源码和SQL注入的题目,下面给出题目链接
因缺思汀的绕过
http://ctf5.shiyanbar.com/web/pcat/index.php
打开题目给的链接,页面显示如下
首先审计网页代码,有如下信息
于是我们去查看同目录下的source.txt,发现登录的逻辑代码显示如下
从源代码我们可以看到,有三层限制登录
第一层:$filter="and|select|from|where|union|join|sleep|benchmark|,|(|)";
这一层的filter里面过滤了常用的SQL关键词,所以常规的SQL注入就行不通了。如果输入了filter里面的语句,网页返回”水可载舟,亦可载艇!“。
第二层:if (mysql_num_rows($query) == 1)
第二层是限制从数据库返回的数据必须是一行,在满足第一层条件的情况下可以使用 limit 的返回来确定数据库中总共有几行数据。
注意它的查询语句是 select * from interest where uname = ‘{$_POST[‘uname’]}’于是构造:
1' or 1 limit 1 offset 0#
1' or 1 limit 1 offset 1#
1' or 1 limit 1 offset 2#
发现2#时返回“一颗赛艇!” 其他都是“亦可赛艇!”,说明数据库只有两条信息。
3. if($key['pwd'] == $_POST['pwd'])
这里是个if判断,只要为true 就可以过,于是可以利用group by with rollup来绕过,group by with rollup会在统计后产生一条null信息,然后在pwd里不写值,if就为true了,用limit offset取出一条数据。
总结下来,我们需要构造的payload就为:1' or 1 group by pwd with rollup limit 1 offset 2#
于是我们得到flag
以上是关于SQL注入--结合源代码审计的SQL注入的主要内容,如果未能解决你的问题,请参考以下文章