php代码审计特殊漏洞

一.变量覆盖漏洞

常见变量覆盖漏洞问题–>5个

1.$$
2.extract()变量覆盖

3.parse_str()mb_parse_str()
原理:这两个函数会将查询到的值覆盖php的变量
<?php
parse_str("a=1");
echo $a."<br/>"; //$a=1
parse_str("b=1&c=2",$myArray);
print_r($myArray); //Array ( [b] => 1 [c] => 2 )
?>

4.import_request_variables()函数导致变量覆盖
原理:这个函数在 register_global = off 时,可以把 GET/POST/Cookie 变量导入全局作用域
中。
<?php
import_request_variables("g", "get_");
echo $get_id;
?>
//提交:?id=111
//结构:111

5.register_globals变量覆盖
产生原理:
当这个变量设置为On的时候,传递过来的值(传递方式:get、post、cookie)会被直接注册为全局变量而直接使用
当为OFF的时候,就需要到特定的数组中去得到它。
设置地方:在php.ini去学习

<?php
//?id=1
echo "Register_globals: ".(int)ini_get("register_globals")."<br/>";
echo '$_GET["id"] :'.$_GET['id']."<br/>";
echo '$id :'.$id;
?>

二.弱类型

php是弱比较语言导致的
常见的几个问题点

==  弱比较(这个不需要类型也相同导致的漏洞)MD5弱比较
导致原理:是因为magic hash比较的时候如果遇到了 0e\d+ 这种
字符串,就会将这种字符串解析为科学计数法,进而认为两个字符串是相同的
"0e132456789"=="0e7124511451155" //true
"0e123456abc"=="0e1dddada" //false
"0e1abc"=="0" //true

③弱比较函数这些
is_numeric()
in_array() 这个如果拿来做比较的话 会出问题-->导致原因:在比较之前会自动类型转换

<?php
if (in_array($_GET['id'],array(1,2,3,4)))
{
$sql="select * from admin where id ='".$_GET['id']."'";
}
echo $sql;
?>
//提交:?id=1' union select 1,2,3,4%23
//结果:select * from admin where id ='1' union select 1,2,3,4#'

strcmp()或者switch()
绕过id[]=

三.字符串offset特性

即php中的字符串可以当作数组来操控导致的

<?php
ini_set("display_errors", "On");
error_reporting(0);
foreach (array('_COOKIE','_POST','_GET') as $_request)
{
foreach ($$_request as $_key=>$_value)
{
   $$_key= $_value;
}
}
$userinfo["username"] = $username; //==> $userinfo[0]=a 赋值以后 $userinfo=a33333
$userinfo["password"] = $password; //==> $userinfo[0]=1 赋值以后 $userinfo=133333
$_SESSION["userinfo"] = $userinfo;
var_dump($_SESSION);
echo "<br/>";
$userinfo=$_SESSION["userinfo"]; //输出 array(1) { ["userinfo"]=> string(6) "133333" }
if($userinfo["id"] == 1) {
echo "flag{xxx}";
die();
}
?>

解题思路:
在cookie中添加一个userinfo[id]=1;就可以解决了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

goddemon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值