power-girl0-0

[ Los ] goblin 본문

War game/Lord of SQL Injection

[ Los ] goblin

power-girl0-0 2021. 1. 26. 21:34
728x90

 

주소 : https://los.rubiya.kr/

 

Lord of SQLInjection

 

los.rubiya.kr

 

[ 문제 ]

 

[ 풀이 ]

 

1) 10줄

소스를 확인해보면 id가 admin일 때 문제를 클리어할 수 있다.

 

 

2) 6줄

해당 query문을 확인해보면, id는 guest로 지정되어 있으며 no만 입력받아 오는 것을 알 수 있다.

따라서, id를 guest가 아닌 admin으로 넣어야 문제를 클리어할 수 있다.

 

 먼저, no에 특정 값인 1을 넣어보자. 

실행 결과, hello guest가 출력되는 것을 확인할 수 있다.

 

그렇다면, 0 값을 넣으면 어떻게 될까?

 

아무것도 출력되지 않는다.

즉, guest에 해당되는 no는 1이라는 것을 알 수 있다.

 

 

 OR 을  이용해서 id 에  admin 을  입력해보자. 

OR 연산자는 둘 중 하나만 참이어도 TRUE로 나온다.

해당 원리를 이용하여  id='guest' and no=0거짓(False)으로 만들고 id=admin 참(True)으로 만들 수 있다.

? no=0 or id='admin'

실행 결과, 다음과 같이 ' No Quotes ~.~ ' 문장이 출력된다.

 

 

 ' No Quetes ~.~ ' 문자열에 의미에 대해서 알아보자. 

3) 5

소스를 보니 "No Quetes ~.~" 문자열에 대한 소스를 찾을 수 있었다.

 

preg_match 는 PHP4, 5, 7에서 지원하는 함수로, 정규표현식 중 하나이며 지정한 패턴이 일치하면, 검색 결과를 반환해주는 함수이다.

즉, 해당 페이지는 preg_match함수를 이용하여 ' (작은 따옴표), " (큰따옴표), \ 를 필터링하고 있다.

 

 

 ' (작은 따옴표) 를 사용하지 말고, 값을 넣어보자! 

' (작은 따옴표)를 사용하지 않고도 값을 넣을 수 있는 방법은 두가지가 있다.

 

 

방식 1. 문자열을 16진수로 바꿔서 넣어준다.

 

admin을 16진수로 바꿔줘서 값을 넣어보자. 

( 16진수로 바꿀 수 있는 사이트 -> https://www.percederberg.net/tools/text_converter.html )

 

16진수로 바꾸니 0x61646D696E가 출력되었다. ( 16진수는 맨 앞에 0x 를 붙여서 표현한다. ) 

? no=0 or id=0x61646D696E

 

성공적으로 문제를 클리어 하였다.

 

 

방식 2. char( )함수를 이용하여 값을 넣어준다.

 

char()함수는 mysql의 내장함수로, 아스키 코드를 바꿔주는 함수이다.

즉, char()함수는  ' ( 작은 따옴표 ) ,  " ( 큰 따옴표 ) 를 사용하지 않고도 문자열을 입력할 수 있다.

 

? no=0 or id=char(97,100,109,105,110)

3번 문제인 goblin문제도 클리어   /(@^0^@)/

728x90

'War game > Lord of SQL Injection' 카테고리의 다른 글

[ Los ] darkelf  (0) 2021.03.20
[ Los ] wolfman  (0) 2021.03.20
[ Los ] orc  (0) 2021.03.19
[ Los ] cobolt  (0) 2021.01.25
[ Los ] gremlin  (0) 2021.01.25
Comments