728x90
반응형
상단에 나오는 쿼리문은 DB에 해당 쿼리문으로 데이터가 들어간다고 알려준다.
이번문제도 쿼리문을 보면 값이 없는 id 파라미터만 있고, pw는 없다.
query : select id from prob_troll where id=''
아래에는 php 코드가 나와있으며, 이걸 참고해서 문제를 푸는 것 이다.
해당 php 코드에서 자세하게 봐야 하는 부분은 이 부분인 것 같다.
아래 조건문을 보면 따옴표( ‘ )와 admin이라는 문자를 소문자로만 필터링 하고 있다.
이번에는 기존의 필터링에서 prob(테이블에 직접 접근을 막고, 추가적으로 information_schema에 접근)가 빠졌다.
문제를 풀기 위해서는 id의 값이 admin 이어야만 풀리게 되어있다.
if(preg_match('/\\'/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match("/admin/", $_GET[id])) exit("HeHe");
if($result['id'] == 'admin') solve("troll");
?id=AdMiN 같은 방식도 필터링이 된다. (preg_match 함수에서 i가 들어가야 대소문자를 구분하는 줄 알았는데 뭐지..?)
?id=char(97,100,109,105,110)’ 을 입력했으나 이 방법도 필터링이 되는 것 같다.
?id=hex('admin') 의 방법도 필터링된다...
?id=char(0x61646D696E)’ 도..
?id=ADMIN 으로 입력했는데 풀렸다.
→ 조건문에서 id값이 admin이면 된다는 문장에서는 대소문자 구분이 안되는건가...?
728x90
반응형