18번 문제를 클릭하면 나오는 화면이다.
대문에 SQL INJECTION이라고 떡하니 쓰여져있다.
소스를 주니 한번 따라가보자
]
음... 여러가지를 필터링 하고있다. 그리고 쿼리부분에서 no변수의 값에 쿼터가 없어 취약점이 발생할 수 있음을 알 수 있다.
우선 id가 guest라고 떡하니 쓰여져있고 no와 and로 묶여있으니 or로 분리하면 되겠구나!
( A and B ) or C
이런느낌?
우선 좌측이 거짓이 되어야지 C가 참이 되면서 참의 값을 가져올테니 GUEST를 찾아보자!
사실 찾지 않아도 되지만 찾고싶었다.
아무튼 숫자 1이 guest의 no임을 알 수 있다.
자 이제 명령을 넣어보자
0 or id='admin'
앙?
안된다.
소스를 다시보니 스페이스가 막혀있다...
스페이스가 필요한데.... 우회법을 찾아보자 (http://g0pher.tistory.com/211)
스페이스 대신 사용할 수 있는것은
탭(Tab) 라인피드(LF) 주석(/**/) 괄호()
탭은 그냥 막혀버렸고 주석의 /도 필터링 괄호도 필터링 되었기 때문에 라인피드를 사용하자!
제어문자이기 때문에 아스키코드를 이용해야한다.
0%0Aor%0Aid='admin'
응....?
왜 안될까...?
그것은 바로 magic_quotes_gpc 라는 PHP 기능때문이다.
이는 자동적으로 쿼터에 슬래시(/)를 달아 사용할 수 없게 만들기 때문이다.
그렇기 때문에 이를 우회하려 했으나 함수를 사용할 때 필요한 괄호마저 필터링 되었음으로
그쯤에서 그만두고 guest의 no인 1 주변에서 admin의 no를 찾았다.
'Wargame > webhacking.kr' 카테고리의 다른 글
[Webhacking.kr]23번 (0) | 2017.07.31 |
---|---|
[Webhacking.kr]20번 (0) | 2017.07.31 |
[Webhacking.kr]12번 (0) | 2017.07.30 |
[Webhacking.kr]6번 (0) | 2017.07.30 |
[Webhacking.kr]24번 (0) | 2017.07.19 |