목록Hacking/Lord of SQLInjection (4)
minhui study
Challenge orc GET 방식으로 pw를 입력받고 addslashes()함수를 통해 pw를 변환하고 그 비밀번호에 일치하는 비밀번호를 테이블에서 찾아낸 뒤 GET방식으로 받아온 pw와 같으면 문제가 풀린다. 여기서 addslashes()함수에 대해 잠깐 알아보고 넘어가자 만약에 I'm a girl 이라는 문자열을 전송하게 되면 '(따옴표)때문에 오류가 발생하게 된다. 이 때 addslashes함수가 I(역슬래쉬)'m a girl로 바꾸어 주는 작업을 해준다. 그리고 DB에서 다시 꺼내왔을 때 추가됐던 백슬래쉬를 제거해주는 함수가 바로 stripslashes()함수이다. 자 이제 문제는 pw를 어떻게 찾나 이다. 먼저 pw길이부터 알아보자 select id from prob_orc where id=..
Challenge goblin url에 ?no=1이라고 치면 다음과 같이 나온다. 코드를 보면 no에 따옴표가 필터링이 된다. 그리고 문제가 해결되려면 id가 guest가 아닌 admin이어야 한다. 그러므로 쿼리문은 no에 1이 아닌 다른 값을 넣어주어 거짓으로 만든 다음 뒤에 id='admin'을 붙여서 select id from prob_goblin where id='guest' and no=2 or id='admin' 이런식으로 보내면 문제가 해결될 것이다. 하지만 이대로 넣어주면 '이 필터링이 된다. 일단 첫번째 방법은 a=97(아스키 코드)이므로 id에서 맨 왼쪽 값이 a(97)을 찾아라라는 의미의 쿼리를 넣는 것이다. select id from prob_goblin where id='gues..
challenge cobolt 리턴되는 id값이 idmin이면 문제가 해결된다. select id from prob_cobolt where id='admin'-- a' and pw=md5('') 다음과 같이 id에 admin값을 넣어주고 뒤를 주석처리 해주었다. 그랬더니 문제 해결~! 주석처리는 다음과 같이 -- 말고도 #으로도 가능하다.
php코드를 보면 GET방식을 통해 id와 pw값을 받는 것을 알 수 있다. 그리고 쿼리문을 날렸을 때 만족되는 값이 있으면 성공이다. select id from prob_gremlin where id='' or 1=1-- a' and pw='' 가 되게끔 url에 ?id='' or 1=1-- a라고 입력하면 문제 해결~! 여기서 --는 한 줄 주석처리를 의미하는데 이후 공백 문자 1칸이 반드시 필요하다. -- 뒷 부분이 주석처리 되면 구문은 select id from prob_gremlin where id='' or 1=1 이 되어 항상 참 값을 갖게 된다.