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
'Web > Webhacking.kr' 카테고리의 다른 글
| Webhacking.kr Challenge alien golf 문제 풀이 (0) | 2024.03.18 |
|---|---|
| Webhacking.kr Challenge old-9 문제 풀이 (0) | 2024.03.15 |
| Webhacking.kr Challenge old-4 문제 풀이 (0) | 2024.03.07 |
| Webhacking.kr Challenge old-46 문제 풀이 (0) | 2024.03.05 |
| Webhacking.kr Challenge old-43 문제 풀이 (0) | 2024.03.03 |