본문 바로가기
Web/Webhacking.kr

Webhacking.kr Challenge old-45 문제 풀이

by jh117jh 2024. 3. 14.
728x90

sql injection 문제이고 코드를 보면

id와 pw 둘 다 addslashes함수와 admin, select, limit, pw, =, <, >가 필터링되어 있으며 쿼리 출력값이 id=admin일 때 문제가 풀린다. 이 문제는 보자마자 멀티바이트 문제인걸 알 수 있다.

 

$_GET['id'] = mb_convert_encoding($_GET['id'],'utf-8','euc-kr');

 

id만 euc-kr에서 utf-8로 인코딩하는 코드가 있는데 addslases는 이렇게 멀티바이트를 사용하는 언어로 인코딩 될 때 우회할 수 있다.

 

멀티바이트란?

- 아스키 문자 코드에다가 다른 문자(2byte)들을 포함한 문자 집합이다. 어떤 문자는 1byte이고, 어떤 문자는 2byte이다.

 

예를 들어 우리가 싱글쿼터(')를 입력한다 했을 때 addslashes에 의해 \'로 바뀔 것이다. 하지만 앞에 %a1~%fe값을 넣어주면 

%a1' -> %a1%5c%27 -> %a1%5c%27  

이런 과정을 통해 빨간 부분이 멀티바이트 문자로 인식되어 변환되고 싱글쿼터(')는 제 기능을 할 수 있다.

(url encoding: ' -> %27, \ -> %5c)

 

그럼 이제 문제 풀이는 거의 끝났다.

id파라미터를 작성해 보면 id=guest%a1'%20or%20id%20like%200x61646d696e%23

 

우회를 한 부분은 빨간색으로 표시를 했는데

 

  • addslashes -> 멀티바이트 사용, 아스키코드 값으로 문자열 작성
  • = -> like 사용

 

이제 id파라미터를 전송하면 

 

문제가 풀리는 걸 확인할 수 있다.

728x90