59번 200점짜리 문제이다. join과 login을 적절히 이용해야 할 듯 싶다.
소스코드를 볼 수 있게 되어있는데 핵심 기능을하는 코드는 아래와 같다.
login 쿼리를 받아 db에 저장된 id와 lv를 가져온다. 이때 lv가 admin일 경우 문제 clear
다음으로 가입을 받는 코드다. phone의 문자열 길이가 20이상을 넘기면 안되고 id는 admin이라는 문자를 필터링한다.
또 phone변수에 0x hex char ascii ord 등등 여러 필터링이 걸려 있는 것을 알 수 있다.
필터링을 통과한 경우 insert~~ 쿼리를 보낸다.
id='asd' , phone =1 으로 join하고 login했을때 위 쿼리문에 lv에 'guest'가 박혀있듯이 아래와 같이 로그인후 창이 나타난다.
저 lv 같을 admin으로 바꿔야 문제를 클리어하는데 어떻게 sql injection을 하면 좋을까?
답은 아래와 같은 형식의 쿼리문을 만드는 것이다.
@mysql_query("insert into c59 values('nimda',1,reverse(id)) -- ,'guest')");
values에 테이블 열순서에 맞춰 값을 적고 insert into 해주는데 형식에 맞게 괄호를 닫아주고 -- <==주석처리를 통해서 뒷줄은 주석처리 해준다.
'Web Hacking > Webhacking.kr' 카테고리의 다른 글
Webhacking.kr 12번 (0) | 2018.04.27 |
---|---|
Webhacking.kr 61번 (0) | 2018.04.27 |
Webhacking.kr 42번 (0) | 2018.04.26 |
Webhacking.kr 33번 (0) | 2018.04.25 |
Webhacking.kr 32번 (0) | 2018.04.17 |