문제를 보면 guest 뒤에 주석으로 막혀있어서 pw파라미터에 값을 입력해도 주석으로 처리되어 아무런 의미가 없다.

php코드를 보면 필터로 중요한 문자열이 걸러지지는 않는다.

처음에 고민을 하다가 %0a로 뉴라인을 만들어 주석을 탈출하면되겠다는 생각이 들었다.


처음엔 그냥 %0a 후 or id='admin'#을 입력했으나 Hello guest가 출력되었다.


그래서 로컬 DB에서 비슷하게 환경을 구성했다.


id가 guest 또는 admin일때 출력하는것이기 때문에 guest와 admin이 둘다 출력되면서 guest가 admin보다 위에 저장되어 있어서 guest가 출력된것이다. 


그래서 guest가 거짓이 되도록 뒤에 and 연산자를 이용해 false를 리턴하게 한 후 or로 id='admin' 을 붙이니 admin이 출력되면서 문제가 풀린다.


'Wargame > lord of sqlinjection' 카테고리의 다른 글

Lord of SQLinjection dark_eyes  (0) 2017.08.08
Lord of SQLinjection iron_golem  (0) 2017.08.06
Lord of SQLinjection nightmare  (0) 2017.08.05
Lord of SQLinjection succubus  (0) 2017.08.04
Lord of SQLinjection zombie_assassin  (0) 2017.08.04

이 문제는 pw 파라미터만 입력을 받는다.

pw에 값을 입력하면 ('')에 싸여 쿼리가 완성된다. php코드에서 필터링이 되는 문자를 살펴보면 이전까지 잘 사용하던 #, -- 이 막혀있다.

주석이 두개나 막혀있고, pw에 6글자 보다 많이 입력할 수가 없다.

문제를 풀기 위해 알아야 할 포인트는 mysql에서 문자열을 0과 비교하면 true가 반환된다. 이를 이용하여 문제를 풀면 된다.

그리고 #, --이 막혀있지만 주석을 ;%00으로 우회할 수있다.


비교하는 값의 맨 앞에 문자가 오면 0과 비교했을때 true가 리턴된다.

하지만 비교하는 값의 맨 앞에 숫자가 오면 0과 비교했을때 false를 리턴한다.




'Wargame > lord of sqlinjection' 카테고리의 다른 글

Lord of SQLinjection iron_golem  (0) 2017.08.06
Lord of SQLinjection dragon  (0) 2017.08.05
Lord of SQLinjection succubus  (0) 2017.08.04
Lord of SQLinjection zombie_assassin  (0) 2017.08.04
Lord of SQLinjection assassin  (0) 2017.08.04

php 코드를 보면 싱글 쿼터가 필터에 막혀있다.

그래서 싱글 쿼터를 우회하는 방법에 대해 검색을 많이 해봤지만.. 역시나 magic_
quote_gpc 나 addslashes외에는 나오지가 않았다.

분명 무슨 방법이 있을거라고 고민하던 중 DB에 싱글쿼터가 들어간 값을  싱글쿼터로 싸인 쿼리에서 뽑을때 그냥 싱글쿼터를 입력하면 에러가 터진다.

따라서 싱글쿼터로 싸인 쿼리에서 싱글쿼터를 포함한 값을 뽑을때는 \' 를 써줘야 싱글쿼터가 문자로 인식된다. 이 방법을 이용하면 이 문제가 풀린다.

id 파라미터에 \를 넣고 pw에서 True값을 만들면 문제가 풀린다.



'Wargame > lord of sqlinjection' 카테고리의 다른 글

Lord of SQLinjection dragon  (0) 2017.08.05
Lord of SQLinjection nightmare  (0) 2017.08.05
Lord of SQLinjection zombie_assassin  (0) 2017.08.04
Lord of SQLinjection assassin  (0) 2017.08.04
Lord of SQLinjection giant  (0) 2017.08.02

+ Recent posts