CTFshow-_Web应用安全与防护-一句话木马变形

CTFshow-_Web应用安全与防护-一句话木马变形

Mel0ny Lv5

CTFshow-_Web应用安全与防护-一句话木马变形

题目

Question
Question

思路

看到是个php代码执行器,先按照框内提示输入,但是题目只允许使用字母、数字、下划线、括号和分号

Question

此时打开f12可以发现,单引号被"替代了

Question

那输入phpinfo();发现能执行,看来源代码大概是使用eval(_POST())之类的语句,尝试输入system(ls);,发现了flag.php分拣

Question

尝试使用system(cat flag.php);命令,发现无法执行,不能有小数点,那就只能无参数rce绕过了

参考资料

输入show_source(next(array_reverse(scandir(getcwd()))));得到flag

Question

Flag

1
CTF{shell_code_base64_bypass}

补充

对于初学者的我来说,没错,完全想不到,对于php学得头痛的我来说也是完全想不到php还有这么多函数(崩
题目说是一句话木马变形,我还以为是通过各种各样的方法来构建一句话木马然后通过蚁剑来连接……
然后我通过各种各样的方式搞清楚了这题的考点

rce,全称Remote Code Execution,远程代码执行,无参rce就是不传递参数获取服务器根目录下的文件内容来获得flag

根据csnd大神的wp可以猜测,源代码应该长这样子

侵删

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php 
if (isset($_POST['code'])) {
echo htmlspecialchars($_POST['code']);
}
?>

<?php
try {
// Validate input characters
if (!preg_match('/^[a-zA-Z0-9();_]+$/', $_POST['code'])) {
throw new Exception('Invalid characters detected! Only letters, numbers, underscores, parentheses and semicolons are allowed.');
}

ob_start();
eval($_POST['code']);
$output = ob_get_clean();
echo htmlspecialchars($output);
} catch (Exception $e) {
echo 'Error: ' . htmlspecialchars($e->getMessage());
}
?>

关于htmlspecialchars()函数可见,会把一些特殊字符变成HTML实体,那就不能通过系统命令来获得flag.php的文件内容,那就只能通过无参rce

然后来看show_source(next(array_reverse(scandir(getcwd()))));这条命令

getcwd():返回当前工作的目录,比如说/var/www/html
scandir():列出指定目录的文件,并通过数组方式返回,在这里就是类似于scandir(/var/www/html),然后文件返回格式是[......'flag.php','index.php']按照字母升序返回
array_reverse():把数组倒转过来
next():取反转后的第二个文件名,即flag
show_source():输出源码

这条命令可以通过不传具体的参而是通过使用系统命令来获得信息

  • 标题: CTFshow-_Web应用安全与防护-一句话木马变形
  • 作者: Mel0ny
  • 创建于 : 2025-09-11 21:01:41
  • 更新于 : 2025-09-11 22:07:17
  • 链接: https://mel0nyrame.github.io/2025/09/11/CTFshow-Web应用安全与防护-一句话木马变形/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
CTFshow-_Web应用安全与防护-一句话木马变形