본문 바로가기

웹해킹

webhacking.kr old 50번 문제풀이(Writeup)

반응형

webhacking.kr old 50번 문제풀이(Writeup)

old 50번 문제풀이 1

문제를 들어가면 위와 같이 출력된다.  SQL Injection을 통해 푸는 문제이고, 코드가 있으니 먼저 확인해보자.

 

old 50번 문제풀이 2

코드를 확인해보니, 방금 전에 푼 old 45번 문제와 유사하다. id와 pw를 받아서 \(역슬래시)를 붙이고, utf-8에서 euc-kr로 바꾸면서 멀티 바이트가 된다.  이후 foreach문을 사용하는데 PHP에서 foreach 문은 배열의 원소나, 객체의 프로퍼티 수만큼 반복하여 동작하는 구문입니다.  반복하면서 from, pw, (, ), 공백,  %, =, >, < 를 필터링하고, union도 필터링한다. 

level 3가 되면 문제가 해결된다.

 

먼저 필터링에 대한 생각부터 했다. 공백이 필터링이 되니 %09로 우회하고, #도 필터링이 되니 %23으로 우회하기로 했다. 전 문제에서 싱글 쿼터 우회를 %ab%27로 했으니 똑같이 하겠다.

 

 

?id=%aa%27 or lv like 2#

먼저 level이 3이 되어야 하기 때문에 level에 like를 통해 직접 값을 입력하는 방법을 수행하였지만 실패했다.

그래서 level 2가 되나 보니 level 2로는 접근이 되었다. 접근 방법이 잘못됐다고 생각해서 union을 쓰기로 했다.

 

 

 

id=guest'/*&pw=*/ union select 3 #

위 문장을 URL 인코딩하고, 몇 가지 필터링 우회를 하면 다음과 같다.

 

id=guest%ab%27'/*&pw=*/union%09select%093%23

이렇게 구성된 문장을 URL에 바로 넣었다.

 

해결 메시지가 나오면서 풀렸다. old 45번과 유사하다 보니 /**/를 생략하는 것 말고는 똑같은 문제였던 것 같다.

 

 

 

 

 

728x90