사용자 삽입 이미지

○ 예선전 12번 문제

이번 문제는 SQL Injection관련 문제였다. 개발자 출신이 아니여서 그런지 소스를 조금 오해했지만 몇가지 점검 하고 20~30분만에 해결했던 문제였다. 의도가 참 좋은 문제라고 생각한다.


■ 예선전 12번 문제 화면

문제 소스 :

사용자 삽입 이미지
사용자 삽입 이미지


■ 소스 보기에 주석 힌트 화면

사용자 삽입 이미지


■ Index.php.bak의 소스

→ 필터링 키워드가 나열된 화면
사용자 삽입 이미지

→ SQL Query 실행 화면
사용자 삽입 이미지

→ Answer 값 출력 로직 화면
사용자 삽입 이미지



■ 문제 풀이 화면

해당 문제는 RS의 값의 첫번째가 2가 되어야만 답이 출력되는 구조라는 것을 위의 소스에서 확인 할수 있다. 먼저 DB의 데이터에 뭐가 있는 확인해 보면 다음과 같은 결과를 얻을 수 있다.
사용자 삽입 이미지

lv 컬럼에는 1이라는 데이터 하나만 존재한다. RS의 값을 2로 변경하려면 union연산자를 사용해서 2의 값이 반환되도록 변경해야한다. 하지만 위의 Keyword Filtering 규칙을 보면 공백(space)이 필터링되어 사용 할 수 없다. 또한 숫자 2도 차단되어 있어 '-' 연산자 등을 사용해서 우회를 해야 하며 또한 1이 아닌 값을 사용해서 union 앞의 구문을 null 상태로 만들어 줘야 우리가 입력한 데이터가 첫번째로 반환된다.

rand==1의 질의어 : select lv from web01 where lv=($go)

완성된 질의어 : index.php?lv=0)union(select(5-3)

rand==1일 경우 질의어 구문
select
lv from web01 where lv=(0)union(select(5-3))

rand 값의 의해 20% 확률로 5번 중의 한번 꼴로 해답이 출력된다.

사용자 삽입 이미지
사용자 삽입 이미지
Posted by n3015m
:
BLOG main image
웹 해킹 스터디를 위한 공간입니다. n3oism@gmail.com by n3015m

공지사항

카테고리

분류 전체보기 (17)
공지사항 (0)
웹 해킹 & 입문 (5)
웹 해킹 & 참고자료 (2)
해킹대회 문제풀이 (8)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

Total :
Today : Yesterday :