My Drive

webhacking #27 본문

writeup

webhacking #27

sunnyeo.park 2014. 11. 11. 14:58

webhacking #27.


sql injection 문제 이다.

소스는 아래와 같이 주어져있다.



여기서 우리가 살펴볼 부분은 GET방식으로 no를 넘기고 있고,

if(eregi("#|union|from|challenge|select|\(|\t|/|limit|=|0x",$_GET[no])) exit("no hack");

위와 같이 #, union, from, challenge, select, (, 탭, /, limit, =, 0x 를 필터링 하고 있다.

"select id from challenge27_table where id='guest' and no=($_GET[no])"

쿼리문을 위와 같이 날리고 있고, 우리는 여기서 admin이라는 값이 반환되도록 해야 한다.


아래와 같이 1을 입력하니 

no=1이 넘어가며 guest가 나온다.


DB의 구조는 전과 비슷하다고 볼 수 있다.

no     |     id

1       |     guest

?       |     admin


admin 이라는 값이 반환되기 위해

"select id from challenge27_table where id='guest' and no=($_GET[no])"

에서 no를 1이 아닌 임의의 값으로 주어 guest가 반환되지 않게 한 후,

뒤에 추가로 admin을 반환하게 하도록 하면 된다.


아래와 같은 방식을 생각해 볼 수 있다.

no에 임의의 값을 넘기고 괄호 짝을 맞추기 위해 닫는 괄호 ) 를 써준다.

그리고 뒤에는 admin을 반환할 수 있도록 no 를 넣어준다.

= 기호가 필터링 되어있으므로 like로 대신한다.

1이 guest이므로 0이나 2가 admin임을 짐작해 볼 수 있다.


몇 번 시도해보면 2번이 admin임을 알 수 있다.


"select id from challenge27_table where id='guest' and no=(3) or no like 2 -- )"


주석 뒤에는 공백을 꼭 넣어주어야 한다.

?no=3)%20or%20no%20like%202%20--%20






'writeup' 카테고리의 다른 글

webhacking #31  (0) 2014.11.12
webhacking #20  (0) 2014.11.12
webhacking #19  (0) 2014.11.11
xcz #11  (0) 2014.11.05
xcz #13  (0) 2014.11.05
Comments