본문 바로가기

워게임/LOS

[워게임 LOS] 문제 11번, 골렘(Golem)




Lord Of SQL injection, 문제 11번 골렘입니다.


기본 필터링은 무시하고 두번째 pw 필터링을 봅시다.


if(preg_match('/or|and|substr\(|=/i'$_GET[pw])) exit("HeHe");


or and substr( 그리고 등호(=, equal)까지 필터링하는 군요.

그럼 각각의 다른 표현을 알아볼까요


or은 || 으로 바뀌고

and 는 &&

substr 은 substring으로 작성하면되고

엥 substring이 어떻게 되냐구요? 그 이유는 preg_match에서 substr( 을 대상으로하고 있기 때문입니다.

그냥 substr이라면 substring 또한 필터링되기 때문에 substring을 쓰라고 배려해준듯합니다.

등호는 LIKE로 표시하면 되겠죠.


일단 첫번째 조건을 만족하기 위해 id=admin을 만듭니다.


pw=1234' || id LIKE 'admin


저는 이렇게 했어요.

앞의 pw에서 등호를 쓸 수 있는 것은 이건 그냥 문자가 아니라 특수한 기능을 가지고있는 특수문자이기 때문이에요.H

Hello admin 을 이렇게 출력할 수 있습니다.

하지만 두번째가 남았습니다. admin의 비밀번호를 정확히 알아야는데 방식은 7번 문제와 같습니다.


pw=1234' || id LIKE 'admin' %26%26 LENGTH(`pw`) LIKE '8


LENGTH 내에서는 Back quote를 씁니다.

위와 같은 식으로 비밀번호의 길이를 조사하고 substring을 사용해서 자동화 도구로 돌려주면 되겠죠.


prob11 - lato.py