티스토리 뷰
SQL INJECTION 문제
id와 pw를 입력하는 걸로 봐서는 인증 우회 문제로 보인다.
기본적으로 적혀져 있는대로 로그인을 해보면 아래와 같이 hi guest가 출력 된다.
소스를 보면 index.phps 파일이 주어져 있다는 것을 알 수 있다.
index.phps 파일을 보면 id 부분은 admin, from ,union 등이 필터링되어 있고 pw 부분은 md5로 변환되서 비교를 한다는 것을 알 수 있다.
그리고 Query 위쪽에 보면 mb_convert_encoding($_GET[id],'utf-8','euc-kr'); 이 있는데 이를 이용해서 magic_quote_gpc, addslashes, real_escape_string 을 우회할 수 있다. (single quote, double quote, back slash, null 문자가 입력될 경우 back slash를 붙여서 실행되지 않도록 해준다. escape characters)
id 로 입력되는 문자의 인코딩 방식을 euc-kr 에서 utf-8 로 변경을 해준다.
id 부분에 '를 입력하면 \' 가 되어서 '가 유효하지 않게 된다. 하지만 ' 앞에 %a1~%fe 의 값을 붙여주면 %5c(\)와 함께 하나의 멀티바이트 문자로 변경되면서 escape characters를 무효화할 수 있다.
id=guest%a1' or id in (0x61646d696e)-- -&pw=guest
를 입력하면 아래와 같이 된다.
"select id from members where id='guest%a1\' or id in (0x61646d696e)-- -' and pw=md5('guest')"
위와 같이 ' 앞에 \가 붙게 되지만 mb_convert_encoding($_GET[id],'utf-8','euc-kr'); 를 거치면서 %a1%5c 가 하나의 다른 문자로 변경되기 때문에 ' 가 유효해진다.
"select id from members where id='guest?' or id in (0x61646d696e)-- -
따라서 다음과 같이 id in (0x61646d696e) 에 의해서 admin으로 인증 우회할 수 있다.
'Wargame > Webhacking.kr' 카테고리의 다른 글
Challenge 50 (0) | 2015.09.05 |
---|---|
Challenge 49 (0) | 2015.09.03 |
Challenge 48 (0) | 2015.08.31 |
Challenge 47 (0) | 2015.08.31 |
Challenge 46 (0) | 2015.08.29 |
Challenge 44 (0) | 2015.08.28 |
Challenge 43 (0) | 2015.08.28 |
Challenge 42 (0) | 2015.08.28 |
Challenge 41 (0) | 2015.08.15 |
Challenge 40 (0) | 2015.08.14 |