2021. 1. 16. 19:55ㆍ정보보안/웹 해킹
이 문제는 보자마자 뭔가 앞서 풀었던 문제들보다 코드의 Line 수가 적다는걸 알 수 있다.
8번 문제는 if(preg_match('/\' /i), $_GET[id]) 필터식을 통해 id 파라미터의 싱글쿼터(')를 필터링하며,
if(preg_match("/admin/"), $_GET[id]) 필터식을 통해 id 파라미터의 "admin" 이라는 문자열을 필터링한다.
if($result['id'] == 'admin')을 보아 문제를 해결하기 위해서는, id 파라미터가 'admin' 이어야 한다는 점을 알 수 있다.
select id from prob_troll where id=''
?id = admin 을 입력하면 분명 두번째 필터식으로 인해 안될것이므로 패스하고,
이를 우회하기 위해서 3번 문제에서 이용했던 hex값 혹은 char 함수를 이용하는 방법을 떠올렸다.
'admin' 은 char(97,100,109,105,110) 과 같으므로
?id=char(97,100,109,105,110) 를 입력해본다.
하지만 문제가 Clear 되지 않는다.
이는 id 파라미터에 싱글쿼터 쌍이 있으므로 char(97,100,109,105,110)가 admin으로 들어가는것이 아닌,
문자열 그대로 id 파라미터로 들어가기 때문이다.
원래 같으면 ?id=' and 1=2 or id = char(97,100,109,105,110)와 같은 방법으로 문제를 해결하겠지만,
첫번째 필터식에 의해 싱글쿼터가 필터링 되므로 다른 방법을 이용해야 한다.
다시한번 두번째 필터식을 보자.
if(preg_match("/admin/"), $_GET[id])
뭔가 여태까지 봐왔던 preg_match 필터식과 다르지 않은가 ?
바로 대소문자를 구분하지 않음을 설정하는 i가 빠져있다.
필터식이 if(preg_match("/admin/i"), $_GET[id]) 일 경우엔 admin, ADMIN 둘 다 필터식에 막히지만
현재 필터식은 i가 없기 때문에 대소문자를 구분하게 되어
?id = ADMIN 을 입력하면 바로 문제를 해결할 수 있다.
'정보보안 > 웹 해킹' 카테고리의 다른 글
LOS(The Lord of the SQLI) 11 - GOLEM (0) | 2021.01.16 |
---|---|
LOS(The Lord of the SQLI) 9 - VAMPIRE (0) | 2021.01.16 |
LOS(The Lord of the SQLI) 7 - ORGE (0) | 2021.01.16 |
LOS(The Lord of the SQLI) 6 - DARKELF (0) | 2021.01.16 |
LOS(The Lord of the SQLI) 5 - WOLFMAN (0) | 2021.01.16 |