Webhacking.kr Challenge 27 풀이.
첫 화면이다.
임의로 asdf를 입력하고 제출을 하니 아래와 같은 화면이 등장한다.
일단 소스를 본다.
기본적으로 있고 index.phps가 있으니 index.phps를 본다.
<? ?> 부분을 보도록 하겠다.
아래쪽을 보면 @solve 부분이 있는데 이게 핵심이다. 위에 if 조건문들이 존재한다.
@solve가 있는 if문을 보면 id의 변수 값이 admin 이라면 문제가 풀린다는 것을 알 수 있다.
그래서 id라는 말이 어디 있나 찾아보면, 위 쪽을 보면 id 앞 부분에 $q가 붙어 있다.
$q는 바로 위에 존재한다.
$q=@mysql_fetch_array(mysql_query("select id from challenge27_table where id='guest' and no=($_GET[no])")) or die("query error");
상당히 긴 코드가 있다. 하나하나 살펴보겠다.
@는 함수 실행시 발생하는 오류를 표시하지 않는다.
mysql_fetch_array는 자주 봤지만 mysql_query()함수의 호출을 통한 결과 값을 반환한다는 뜻이다.
mysql_query()는 연결된 객체를 이용해서 MySql 쿼리를 실행시키는 함수.
결국 저 문구는 mysql_query의 가로 안의 문구를 쿼리 형태로 실행시키라는 말.
() 안에 있는 말을 봐보자.
select는 mysql에서 찾아서 보이라는 말이고 from ~~는 27번 문제 테이블에서 id를 찾아 보이라는 뜻이다.
where은 조건을 의미하는 것이고, id='guest' and no가 $_GET[no] <= [입력받은 no 값]인 id 값을 27번 문제
테이블에서 찾으라는 말이다. mysql_fetch_array에 의해 보여진 id값을 반환하면 된다는 뜻.
or die는 실패했을 경우 query error를 보여준다는 뜻.
말이 길었는데 간단히...
테이블 이름은 27번 테이블이고 테이블의 열은 id와 no로 되어 있다.
no는 ()가 있으므로 정수형을 담는 열.
no는 박스의 이름이고, 테이블의 시자근 0부터 시작하므로 0부터 차례대로 써보겠다.
반응이 없다.
guest라는 문구가 있다.
query error라는 문구가 뜬다.
일단 이 상태 덕분에 guest의 no 값은 1이라는 것을 알 수 있고,
no 값이 0 or 2일 때가 admin이라는 것을 알 수 있다.
쿼리 문을 이용해서 no를 2로 만들어본다.
0) or no = 2 ==> 필터링을 우회하기 위해 0) or no like 2
반응이 없다.
좀 더 집중적으로 살펴보면 no값에 0) or no=0 이라고 하면,
no=($_GET[no])")) or die("query error")에서 no=(0) or no=0)")) or die("query error")가 된다.
문제는 or은 2개가 올 수 없으니까 뒤쪽에 있는 or 문을 주석처리 한다.
즉 그러면 0) or no=0 --를 넣어서 뒤쪽의 문장을 무효화시키면 no=(0) or no=0.
--의 앞과 뒷 부분은 띄어쓰기를 해야 된다.
eregi는 전에도 언급했듯이 제시한 변수에 찾는 문자열이 있을 경우 수행하라는 뜻.
exit no hack는 no hack을 반환. 찾는 문구에 =가 존재한다.
즉 0) or no=0 --에 =가 포함되어서 no hack을 출력한 거 같다.
그러면 =을 대신할 것을 적어준다. 여러 명령어 중에 가장 무난한 like를 써보겠다.
like는 말 그대로 조건이라는 뜻으로 ~와 같은 이라는 뜻이다.
즉 no like 0 ==> 0과 같은 no값. ===> 즉 0.
=를 빼고 like를 넣어본다.
여전히 query error가 뜬다. 음...
no=0 admin no=1 guest는 아닌 거 같다.
no=1 guest no=2 admin로 해보겠다. 2값이 admin.
즉 or 다음 부분이기에 or 앞에 0)은 아무렇게나 써도 된다.
Cf) 150점 치고는 어려웠다.
'# Related site issues > WEBHACKING.KR' 카테고리의 다른 글
Webhacking.kr Challenge 58. (0) | 2018.05.03 |
---|---|
Webhacking.kr Challenge 32. (0) | 2018.05.03 |
Webhacking.kr Challenge 25. (0) | 2018.05.02 |
Webhacking.kr Challenge 19. (0) | 2018.05.01 |
Webhacking.kr Challenge 4. (0) | 2018.05.01 |