늘모자란, 개발 :: [webhacking.kr] Challenge 44

늘모자란, 개발


소스도 별거 없고, 일단 1 적고 들어가본다.
Hello 1 이 돌아오는데 뭔가 이상하다. 창이 넘어가는게 한번 더 거친것 같다.
디버거를 켜고 한번 다시 해보기로 한다.

index.php 에서 form값으로 index.php를 넘겨주는데, 값을 입력받으면 <meta>를 이용해 /index/go.html으로 넘겨준다.
그리고 go.html은 내 아이디가 적혀있다. 따로 인자를 넘기진 않는것 같은데도..

근데 뭐 admin이면 admin을 적어도 되고 공백을 넘겨도 넘어가고, 55글자씩 적어서 보내도 잘 된다.
뭘 의도하는지 잘 모르겠다. 그러던와중에 ; 를 적으니까 인자가 안넘어는걸 발견했다. \도 마찬가지.. 이게 쓸모가 있나 모르겠다

그래서 검색 했더니 Command Injection이라고 한다. ㅡㅡ 이게 파일이 생성되고 있는지 아닌지 밖에선 알 길이 없으니...
그제서야 ls 고 cp고 쳐봤는데 하나도 안된다. 허 참...

어쨌든 이런 느낌의 명령어가 실행되고 있나 보다. 아마 그럼 exec일려나? 이런느낌인것 같다.

exec('echo $_POST['html']' > /index/go.html);


근데 아직도 여기 뭘 적어야되는지 모르겠다. 시스템 명령어를 넣으면 성공인가 싶은데. 대강 찾아보니 ls를 넣어야된다는 것 같다.
그래도 이해가 안되서 결국 command injection으로 검색해보니 OWASP에서 보여주고 있는게 있다.

<?php
print("Please specify the name of the file to delete");
print("<p>");
$file=$_GET['filename'];
system("rm $file");
?>


요컨데, 요런 코드가 있으면

http://127.0.0.1/delete.php?filename=bob.txt;id


이렇게 질의를 하면

Please specify the name of the file to delete
uid=33(www-data) gid=33(www-data) groups=33(www-data) 


이렇게 대꾸 한다는것이다. 요 문제에서도 비슷한걸 수행해야 하는 모양이다.
최종 골은, /index/go.html이 아니라 다른 파일을 만들게 해야된다는것!  근데 bypass를 검색해봤는데 주로 사용되는 " 랑 ; 가 이미 필터링 되고 있다. '는 되는것 같고.. bash의 #가 주석이니까 #를 넣는 방법으로도 잘 안되었다ㅠㅠ

결국 검색을 좀 했는데 (이문제는 정말 부끄럽다;;)
ls가 필터링되고 있으니 간단히 ls 필터링을 회피해야된다는것이다. 그래서 다음과 같이 만들어주면 된다.

'&l's


부끄러우니 첨언을 좀 하자면,
&는 커맨드에서 앞 명령어가 성공적으로 실행되게 되면 다음 명령어도 수행하라는 말이다.
즉 echo hello은 성공적으로 실행되기때문에, 뒤의 ls도 동작시켜 go.html에 같이 쓰게 하는것이다.
(실제로, 'l's라고 적어도 ls명령어를 출력한다 -_-;)

정말 별에별 공격이 다있구나 싶다...
2016/04/02 08:59 2016/04/02 08:59