SQL注入--结合源代码审计的SQL注入

Posted Labs安全研习笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL注入--结合源代码审计的SQL注入相关的知识,希望对你有一定的参考价值。

大家好,今天小编为大家准备的是一道需要结合源码和SQL注入的题目,下面给出题目链接


因缺思汀的绕过

http://ctf5.shiyanbar.com/web/pcat/index.php


打开题目给的链接,页面显示如下

首先审计网页代码,有如下信息

SQL注入--结合源代码审计的SQL注入

于是我们去查看同目录下的source.txt,发现登录的逻辑代码显示如下

SQL注入--结合源代码审计的SQL注入


从源代码我们可以看到,有三层限制登录

第一层:$filter="and|select|from|where|union|join|sleep|benchmark|,|(|)";

这一层的filter里面过滤了常用的SQL关键词,所以常规的SQL注入就行不通了。如果输入了filter里面的语句,网页返回”水可载舟,亦可载艇!“。

SQL注入--结合源代码审计的SQL注入

第二层: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注入的主要内容,如果未能解决你的问题,请参考以下文章

PHP 代码审计之死磕 SQL 注入

JAVA代码审计 SQL注入篇

java源代码审计-sql注入

2020/1/27代码审计学习

JAVA代码审计之WebGoat靶场SQL注入

代码审计之SQL注入