webhacknig.kr 18번 문제를 풀어보겠습니다.
배점은 100점 입니다.
webhacking.kr 문제중 낮은 배점입니다.
SQL INJECTION 문제입니다.
SQL INJECTION 문제화면입니다.
SQL 문제 index.phps소스보기 화면입니다. eregi()함수를 사용하고 있습니다. eregi()함수는 대소문자 구분하지 않고 검색 하는 함수 입니다. 여기서 사용자로 부터 입력받은 no값에 대해 일부 문자를 필터링를 하고 있습니다. 그리고 mysql 쿼리문이 select id from challenge18_table where id='guest' and no=$_GET[no]이 있고no가 1이 guest, no가 2면 admin을 select한다는 것을 알 수 있습니다.
no에 1을 넣으면 id='guest' and no=1이므로 아래 처럼 정상적으로 guest가 나옵니다.
일단 처음에 위에 소스와 같이 no=1을 넣어보았습니다.
hi guest 라고 뜹니다.
no=2를 넣었습니다.
아무것도 반응하지 않네요.
그래서 위와 같이 webhacking.kr/challenge/web/web-32/index.php?no=2 or no=1 이라고 입력했는 데, no hack 이라고 나옵니다. no hack 공백사용 eregi() 필터링에 걸렸습니다.
공백 우회를 위해 %0a를 사용하면 (아스키코드표를 보면 %0a는 LF를 이므로 공백과 같은 효과)
그 후 %0a 로 대체해서 썻습니다.
위와 같이 hi guest 라고 나옵니다.
그럼 두번째에 있는 admin를 추출해 내기 위해서 limit를 사용합니다.
limit 0, 1 -> 1번째 부터 1개
limit 0, 2 -> 1번째 부터 2개
limit 1, 2 -> 2번째 부터 2개
와 같은 의미 입니다.
그러면 limit의 첫 번째 숫자에 1을 하면 2번째에 있는 admin을 추출할 수 있게 됩니다.
limit%0a1,1 을 넣으면 됩니다.
그래서 webhacking 문제 18번 클리어!
'* Wargame > WebHacking' 카테고리의 다른 글
webhacking.kr 6번 문제 (0) | 2012.08.22 |
---|---|
webhacking.kr 42번 문제 (0) | 2012.08.16 |
webhacking.kr 24번 문제 (0) | 2012.07.01 |
webhacking.kr 54번 문제 (0) | 2012.06.30 |