no의 특정 값을 넣고 id의 'admin'의 값이 나오도록 만들어야 합니다.


하지만 id에 이미 'guest'가 하드코딩 되어있고 우리는 no의 값만 조작할 수 있습니다.


우선 숫자로 임의의 숫자를 입력합니다.

1을 입력해보니 guest가 나오는 것을 보면 guest의 no는 1인 것을 알 수 있습니다.


다른 숫자들로 해보면 아무 값도 나오지 않으니 어떤 구문을 넣어서 해결해야 할 것으로 보입니다.


cobolt 문제에서 union select를 사용해봤으니 이번 문제에서도 해봤습니다.

no 1번은 guest값일 테니 그 외 다른 값을 사용해야 합니다.


처음에 2 union select admin 으로 해보니 아무 값이 나오지 않았습니다. 당연히 admin이 문자열로 지정 안 해서 그랬던 겁니다.

두번째는 2 union select 'admin' 으로 해보면 Single Quote 가 필터링 되어있기 때문에 되지 않습니다.


preg_match에서 Single Quote를 우회하는 가장 간단한 방법은 hex값으로 보내면 됩니다.

'admin'을 hex값으로 변경하면 0x61646d696e가 되며 다음과 같이 성공하게 됩니다.


'WarGame > LOS(Lord of SQL)' 카테고리의 다른 글

[LOS] darkelf  (0) 2018.10.05
[LOS] wolfman  (0) 2018.10.05
[LOS] orc  (0) 2018.10.05
[LOS] cobolt  (0) 2018.10.05
[LOS] gremlin  (0) 2018.10.05

gremlin 문제와 유사하지만 id 값이 'admin'이어야 풀리는 문제입니다.



전과 동일한 방법이지만 id는 'admin'으로 하기 위해 admin' or 1=1%23 을 입력해봅니다.

뒤에 md5로 해쉬가 되고 괄호가 있지만 주석으로 인해 무시가 됩니다.


하지만 'admin'으로 Query를 보냈는데도 'rubiya'라는 계정으로 인식이 되었습니다.

'admin'말고 'test', 'abc' 등등 다른 문자열을 입력해도 'rubiya'로 되는 것을 보면 테이블의 혹시 'rubiya'만 있을 것 같다는 생각이 들었습니다.



그래서 union select 를 이용하여 문제를 풀었습니다.


그전에 select 'admin'을 한다면 무엇이 반환 되는지 알아야 합니다.

아래 보시는 것같이 select 하고 뒤에 칼럼명이 아닌 문자열이 온다면 해당 문자열을 반환하게 됩니다.


이것을 이용해서 select 'admin'으로 admin 값을 얻을 수 있습니다.



그럼 테이블에 없을 것 같은 'admin'을 불러오기 위해 union select 'admin'으로 'admin' 값을 획득 할 수 있습니다.


'WarGame > LOS(Lord of SQL)' 카테고리의 다른 글

[LOS] darkelf  (0) 2018.10.05
[LOS] wolfman  (0) 2018.10.05
[LOS] orc  (0) 2018.10.05
[LOS] goblin  (0) 2018.10.05
[LOS] gremlin  (0) 2018.10.05

내용을 보시면 별다른 이야기는 없으며 Query를 보내고 result의 무슨 값이든 하나만 들어있으면 통과하는 문제입니다.


따라서 해당 Query를 언제나 참으로 만드시면 됩니다.


흔히 SQL injection을 배울 때 처음 쓰는 ' or 1=1 을 사용하시면 쉽게 해결 할 수 있습니다.

하지만 id의 값을 넣고 뒤에 pw 또한 검증하니 뒤 부분을 주석 처리해서 없애주시면 됩니다.


처음에 --를 주석으로 이용해서 해봤더니 되지 않습니다.

(다 풀고 안 사실. -- 뒤에 공백이 있어야 주석으로 인식되므로 %20을 추가해야 함)



#으로 주석 처리를 하려고 했는데 왠지 모르게 표시가 되지 않고 문제가 풀리지 않습니다. 

Query에는 이상이 없다고 생각하지만 풀리지 않는군요..



굳이 주석을 이용하지 않아도 id/pw 모두 'or '1'='1 을 입력하시면 해결은 됩니다.

1을 '(SingleQuarter)로 감싸준 이유는 id='{$_GET[id]}소스 코드를 보시면 문자열로 넘어가기 때문에 '(SingleQuarter)로 감싸지기 때문입니다.



문제를 풀고 알아보니 URL에서는 #을 인식하지 못한다고 하네요.

#을 사용하려면 URL인코딩 한 값인 %23을 사용하시면 됩니다.


'WarGame > LOS(Lord of SQL)' 카테고리의 다른 글

[LOS] darkelf  (0) 2018.10.05
[LOS] wolfman  (0) 2018.10.05
[LOS] orc  (0) 2018.10.05
[LOS] goblin  (0) 2018.10.05
[LOS] cobolt  (0) 2018.10.05

+ Recent posts