CTF/webhacking.kr

Webhacking.kr #5 old-18

종금 2019. 11. 21. 15:39
반응형

 

이번 문제는 친절하게 SQL Injection으로 풀으라고 설명까지 되어있다.

(오오오오 친절한 문제)

그래도 소스코드보기가 있으니 예의상 클릭해보자.

 

대충 보니 php로 이루어져있고

 

admin에 대한 넘버가 2이고

평상시에 게스트가 뜨나보다.

id에 게스트가 들어가면 hi guest

id에 어드민이 들어가면 hi admin과 solve된다는거보니 결국 admin이 되면 된다.

 

즉 저기 admin이 들어가면 된다.

누가봐도 2가 admin이면 1은 게스트 같으니 그럼 먼저 hi guest가 나오도록 1을 먼저 넣어보자.

 

1 넣고 제출하면 hi guest가 뜬다 위에 no hack 이라는 구문 보이는거 보아 분명 2넣으면 no hack 나올것이다.

 

쳇 예상이 틀렷다 2라고 하면 안뜨고 뭔가 어줍찌 않게 SQL 인젝션하면 뜬다.

 

그럼 해당 핵심 소스코드 한번 이제 분석해보자

 $result mysqli_fetch_array(mysqli_query($db,"select id from chall18 where id='guest' and no=$_GET[no]"));

 

여기보면 mysql을 사용하고 chall18 db에 존재하는 id를 꺼내온다. id는 게스트고 넘버는 (이제 여기가 숫자이다.)

 

그럼 여기서 중요한건 앞에 guest가 있기에 2를 넣어도 admin을 불러오지 못한다. 그럼 우리는 어떻게 해야할까

 

해당 소스코드의 id = 'guest'를 우리가 직접 지울 수 없으니 뒤에 조작해 guest도 틀리되 or구문으로 뒤에 admin도 정답이도록 불러와야 한다.

 

그럼 예상 답안이 뭐냐 3 or no = 2 이거다 그럼 한번 넣어보자.

 

두둥 풀리지가 않는다.

 

그래서 다시 소스코드로 넘어가보자.

소스코드 no을 받아오는 곳에서 우리는 preg_match에 주목해야 한다.

 

이는 문자 정규식으로 문자 입력값을 필터링 하는 함수인데.

솔직히 외우고 다니지 않으니 구글링으로 php 중 preg_match란 해당 문자열이 있으면 그뒤에 있는 결과를 리턴한다는 것인데.

 

if(preg_match("/ |\/|\(|\)|\||&|select|from|0x/i",$_GET['no'])) exit("no hack");

 

no입력 값중 / ,\/,\(,\),\|,&,select,from,0x 가 있으면 no hack을 리턴하는건데

이중 공백값으로 인해 no hack의 리턴결과가 나오는 것이다.

그럼 공백값에 대한 우회구문을 검색해보고

 

출처: https://binaryu.tistory.com/31

 

 여기서 공백문자가 +로 표시되는 것을 알 수 있고 URL 코딩 되잇는 것도 확인했으니 

+부분을 2번 우회구문인 \n의 %0a로 변경하면 

 

 

 

 

 

풀리는걸 확인할 수 있다.

 

#여담... 핵귀찮..

 

반응형

'CTF > webhacking.kr' 카테고리의 다른 글

Webhacking.kr #7 old-26  (0) 2019.11.21
Webhacking.kr #6 old-24  (0) 2019.11.21
Webhacking.kr #4 old-16  (0) 2019.10.29
Webhacking.kr #old-14  (0) 2019.10.28
WebHacking.kr #2 Old-06  (0) 2019.10.25