1.手撕CTFHub-Web(七):RCE
手撕CTFHub-Web(七):RCE
在深入探讨 RCE(远程代码执行)的网站网站实现过程中,我们首先聚焦于 PHP 中的源码源码 eval 函数。eval 函数允许执行 PHP 字符串,题目通常通过接收 POST 或 GET 方法提交的讲解数据,如 cmd 参数。网站网站这允许执行如 `system('ls')` 这样的源码源码源码战命令,以查看当前目录。题目然而,讲解没有对输入进行过滤,网站网站这直接导致了攻击者可以连接到菜刀(web shell)服务器。源码源码
当在根目录发现 flag 文件时,题目我们注意到一个名为 shell.txt 的讲解一句话木马文件。通过接收 file 参数并利用 strpos 函数,网站网站我们可以绕过对 flag 文件的源码源码直接包含限制。构造请求 `?题目file=./shell.txt` 来包含 shell.txt,并使用菜刀连接,我们得以在根目录下获取 flag。数钱游戏源码
接着,我们转向 PHP://input 的概念,它允许将 POST 请求中的数据作为 PHP 代码执行。构造 `?file=php://input` 的请求并提交 POST 数据,我们可以执行命令并从根目录中找到 flag 文件。
远程包含提供了一种通过外部服务器的包含命令执行代码的方法。通过在 file 参数中填写自己的服务器上的包含一句话木马的 txt 文件地址,我们可以绕过服务器端的溯源码扫描限制,直接在根目录下找到 flag。
在尝试直接读取源代码时,发现与 PHP://input 类似的问题。根据题目描述和提示,我们猜测使用 PHP://filter 协议可以读取 flag 文件。构造请求 `/?file=php://filter/read=convert.base-encode/resource=/flag`,读取 flag 文件的 base 内容,然后对得到的荣耀6源码内容进行 base 解码以获取 flag。
进入命令注入的探讨,exec 函数用于执行 cmd 参数指定的命令,并将执行后的返回状态写入 res。尽管尝试使用管道符|连接命令,但没有返回任何内容,可能是因为存在无法显示的字符。使用 base 编码并导出命令后,解码得到 flag。花店网站源码
面对 cat 命令的过滤,我们使用连接符''、\ 或 $@ 来绕过过滤,构造命令 `.0.0.1|ca''t ./ flag_.php|base`,获取 base 编码后的内容并解码得到 flag。
过滤空格的处理中,我们使用连接符`<`构造命令 `.0.0.1|cat<./flag_.php|base`,获取 base 编码后的内容,解码后得到 flag。
目录分隔符的过滤处理需要特别注意,使用分号`;`来分割命令。由于 `/` 被过滤,我们先用 `cd` 进入 flag_is_here 文件夹,然后用 `cat` 读取 flag 文件 flag_.php。构造命令 `.0.0.1;cd flag_is_here;cat flag_.php` 获取 flag。
运算符的过滤包括 |、& 和 ||,通过使用分号`;`来分隔命令,我们绕过了这些过滤。构造命令 `.0.0.1;cat flag_.php` 并查看源代码页面以获取 flag。
综合过滤练习要求我们整合多种技术,以应对复杂的过滤策略。借助一篇文章中提供的 Linux 绕过方法,我们了解到使用 `%0a` 作为分隔符可以执行命令。请注意 `%0a` 是 URL 编码,必须在 URL 中使用,否则将被二次编码。构造请求 `?ip=.0.0.1%0als` 可以执行成功并发现目录 flag_is_here。接下来,用 `%` 代替空格并使用连接符`'’`绕过对关键词 cat 和 flag 的过滤,构造命令 `?ip=.0.0.1%0acd%fl''ag_is_here%0aca''t%fl''ag_.php` 并查看源码获取 flag。