XCTF两个PHP代码审计的笔记

本文深入探讨了SQL注入攻击的原理,通过一个具体的PHP代码示例,解析了$id和$row['id']的区别,以及如何利用这一点进行攻击和防御。文章还提到了使用mysqlFUZZ进行测试的方法,以及如何绕过$id==adog的限制,使$row['id']仍然存在,展示了在数据表中插入特殊数据来实现这一目标的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目源码如下,考点是输入的$id和$row['id']的区别

关键在于红框内,可以知道题目的payload是要让$row['id']存在,查询的到数据,并且要让POST的id不能与adog相同。那显而易见,肯定是要你输入的id!==adog,并且需要绕过$row['id']的限制。

从P牛blog里,学到的一手姿势。自己用mysql FUZZ测试下,从这里可以查看$row['id']和$id的区别

<?php
mysql_connect("localhost","root","root");
mysql_select_db ("test");
mysql_query("set names utf8");
for($i = 0 ; $i < 256 ; $i++){
    $c = chr($i);
    $name = mysql_real_escape_string('hehe' . $c);
    $sql = "SELECT * FROM `people` WHERE `name` = '{$name}'";
    $result=mysql_query($sql);$row = mysql_fetch_array($result);
    if ($row['name'] == 'hehe') {
        echo "{$c} <br/>";
    }
}
# P牛 bloghttps://www.leavesongs.com/PENETRATION/Mini-XCTF-Writeup.html
?>
#如果在name后面加上一个字符,在mysql里查询,如果查到的和不加这个字符查出来的行相同,则输出。

我在数据表中插入了这些数据

 

 

也就是说输入的id是adog ,但是在mysql_fetch_array(mysql_query($sql)),查询并且关联数组后,数组内键值为id的数组值仍为adog,所以$row['id']存在,因此绕过了$id==adog,并且还使$row['id']值存在.

那个fuzz已经充分的证明了。

 

转载于:https://www.cnblogs.com/BOHB-yunying/p/10685339.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值