cdor1's lab
Webhacking.kr 50번 본문
450점이나 주는데 sql injection이라고 해서 얼마나 어려울까 무서웠다..
id값을 mb_convert_encoding이라는 함수를 이용해서 건드는데
인코딩 할 때 사용되는 함수라고 한다.
이 소스에서는 euc-kr인코딩에서 utf-8인코딩으로 바꿔주고 있는데 여기선 크나큰 취약점이 발생한다.
php에선 magic_quotes_gpc 설정을 세팅해 ', ", /, %00이 들어가게 되면 /와 함께 붙게 되어 injection을 방어하는데
멀티바이트를 사용하는 언어셋 환경에서는 함수가 백슬래쉬 앞에 %a1~%fe의 값이 들어오게 되면
%a1\이 한 개의 문자로 취급해서 인코딩해 백슬래쉬를 먹어버리게 된다.
여기서 생기는 취약점으로 '(싱글쿼터)를 주입할 수 있게 할 수 있다.
select lv from members where id='$_GET[id]' and pw=md5('$_GET[pw]')
에서 pw를 md5로 인코딩 하는 부분을 주석처리하여 id와 pw가 이어지게 해 sql injection을 하려고 한다.
select lv from members where id='%a1'/*' and pw=md5('*/union select 3 #')
또한 id값에서만 union을 필터링하고 pw값에서는 union을 필터링 하지 않기 때문에 pw에 넣어 사용할 수 있다.
id = %a1'/*
pw = */union select 3#
똑같이 공백을 필터링하니 %0a(라인피드)를 넣어 우회하도록 하자.
'Security > Web' 카테고리의 다른 글
Webhacking.kr 49번 (0) | 2017.04.07 |
---|---|
Webhacking.kr 28번 (0) | 2017.04.06 |
Webhacking.kr 21번 (0) | 2017.04.04 |
urllib2 request (0) | 2017.04.03 |
Webhacking.kr 25번 (0) | 2017.04.03 |
Comments