Game/webhacking.kr

[350] prob8

ellen28 2015. 7. 23. 14:30

오랫만에 웹해킹 문제를 풀었다 ㅠ^ㅠ.. 

배점이 높아질수록 내가 직접 풀기보단 풀이를 보는 횟수가 더 많아지는 것 같아서 ..

손이 잘 가지 않는다.. 풀이를 보더라도 빠르게 클리어하고 넘어가는게 맞는 일인가 고민..


쨌던! 350점 배점의 8번 문제이다 

그저 까만화면에 USER-AGENT라고 써져있고 done!이라고 뜬다...무슨 뜻일까..

유저에이전트..어디서 많이 본것같다..

소스보기를 해보니 소스를 제공해주어서 확인해보았다.

HTTP_USER_AGENT값을 가져와서 $agent라는 변수의 값으로 사용하고 ip도 가져온다.

처음보는 함수가있었다!


trim($string) - 문자열의 처음과 끝에 있는 공백을 지움 

strtolower($string) - 모든 알파벳을 소문자로 바꿈 


그리고 user-agent는 많은 필터링을 거친다.

7~8 : . / 가 있을 경우 _로 바꿈 

str_replace같은 경우에는 문자열에 대해 한번만 적용되므로 혹시나 필요하다면 중복 입력해서

우회할 수 있을 것 같다.


10 : sql injetion에 사용될만한 여러 단어들을 죄다 거르고 있다 ;

13 : 패턴에 일치하는 문자가 있을 경우 exit


15~16 : USER_AGENT값을 가져와서 싱글쿼터('), 더블쿼터(") 를 str_replace를 이용해 없애 버림!

이것도 중복입력을 통해 우회 할 수 있다.


18 : $count_ck=@mysql_fetch_array(mysql_query("select count(id) from lv0"));

와 같은 쿼리문을 통해 값을 가져오고.

20~23 값이 70을 넘어갈 경우 db에서 삭제한다.


25 : $q=@mysql_query("select id from lv0 where agent='$_SERVER[HTTP_USER_AGENT]'");
와 같은 쿼리문을 이용해서 27번째 라인에서 배열로 저장.

29~37 : $ck가 존재할경우 echo("hi <b>$ck[0]</b><p>"); 를 출력하고
ck[0]가 admin일경우 문제가 풀린다.
39~43 : $ck가 존재하지 않을경우 
$q=@mysql_query("insert into lv0(agent,ip,id) values('$agent','$ip','guest')") or die("query error");
와 같은 쿼리문을 통해 db에 정보를 삽입한다.

소스를 쭉 보니 db에 admin 이라는 새로운 id를 삽입해 주어야 문제가 풀릴 것 같다.

쿼리문을 보니 무조건 id는 guest로 설정되어 삽입되고 있었다.

파로스로 user-agent를 조작해서 admin으로 바꾸어 줄 수 있지 않을까!


+) 그리고 거짓말 같이 파로스로는 문제가 풀리지 않았고 ㅡㅡ.. 버프슈트를 이용하니

거짓말 같이 문제가 풀렸다 ㅡㅡ..삽질잼.. 갈아탈 때가 온 것 같다...


어쨌든..버프 슈트를 사용한다..

쿼리문을 조작하기 위해 user-agent값을 수정한다.

user-agent에 ellen28','0.0.0.0','admim'# 와 같이입력하면

id는 admin으로 삽입될것이다.

done!정상적으로 삽입된거 같다.


그리고 이번에는 user-agent를 아까 등록 했던 ellen28로 수정해주면

!문제가 풀렸다.. 왜인지는 모르겟지만 파로스로 했을땐 이방법 저방법 다 해봐도 안풀렸었는데

바로풀렸다.. 신나는 삽질..


쨌던 8번 문제도 힘들게! 클리어!