본문 바로가기

WarGame/webhacking.kr

[webhacking.kr] Challenge 25 :: LFI (Local File Inclusion) 취약점


▼ Challenge 25는 다음과 같습니다.



리눅스 환경이라는 것을 알수 있습니다.



 URL에 ?file=hello라고 입력 되어 있습니다.




"hello" 대신에 "index.php", "password.php" 라고 입력해도 아무 변화가 없습니다.


무엇을 입력해도 변화가 없습니다...



한참을 생각하다가 hello 다음에 확장자가 없는 것을 보니,


서버측 언어가 [ 파일명 + ".txt" ] 이런식으로 구성되었을 것이라고 추측을 하게 됩니다.



파일업로드/다운로드에서 확장자 우회를 막기 위한 방법이죠.


그렇다면 뒤에 ".txt"를 없애고, "password.php"가 입력되게 하면 될 것 같습니다.



구글에 확장자 우회라고 검색을 해보니,


 리눅스에서는 "%00", "%zz"로 확장자를 후회할 수 있다고 합니다.



        [리눅스]


        파일명에 특수문자가 있는지 체크합니다. -> %00 , %zz, ;

%00 이나 %zz 는 종단문자로서 파일서버가 리눅스 시스템일 경우 우회 기법으로 사용합니다. 예를들어 파일명을 shell.jsp%00.gif 로 업로드 하면 확장자 체크는 우회할 수 있습니다. 그리고 서버에 저장되어 호출될때 시스템이 %00, %zz 를 종료문자로 인식하여 shell.jsp 로 호출을 했을때 jsp로 실행되는 경우가 있습니다.


[윈도우]

세미콜론(;) 같은 경우는 윈도우 IIS 의 취약점입니다. shell.asp;.jpg 로 파일명을 업로드 하면 확장자 체크를 우회할 수 있는데 shell.asp 로 호출을 하니 호출이 됩니다. 세미콜론(;) 이나 물음표(?) 는 URL에서 URI와 파라메터를 구분하는 문자입니다. 예: http://www.xxx.co.kr/xxx.asp;xxxx=111 URL : http://www.xxx.co.kr/xxx.asp;xxxx=111 URI : http://www.xxx.co.kr/xxx.asp 인자값 : xxxx=111 그래서인 지는 몰라도 IIS 에서 호출할때 shell.asp;.jpg 파일을 shell.asp 로 호출하면 asp 로 정상 호출이 됩니다.



참고 : http://ankyu.entersoft.kr/



이것을 사용해서 ?file=password.php%00 이라고 입력하면 Success!