본문 바로가기

web/Lord of SQLInjection

Lord of SQLInjection - 5번 : wolfman

문제 살펴보기

los wolfman 문제

 

문제 코드는 위와 같다.

문제 푸는데 필요한 부분을 분석해보도록 하자.

 

 

 

 

 

if(preg_match('/ /i'$_GET[pw])) exit("No whitespace ~_~");

 

위 코드를 보면 pw 파라미터로 데이터를 전달할 때 공백을 사용하면 안된다고 한다.

공백을 우회하는 법은 다양하게 있으니 그 중 아무거나 사용하면 될 것 같다.

 

 

 

 

 

                                 $query "select id from prob_wolfman where id='guest' and pw='{$_GET[pw]}'";

                                 ... 
                                 
$result = @mysqli_fetch_array(mysqli_query($db,$query)); 
                                 ...

                                 if(
$result['id'] == 'admin'solve("wolfman");

 

해당 select문을 통해 id 컬럼의 값이 'admin'인 행을 반환할 경우 문제가 풀리게 된다.

매우 간단하니 바로 문제를 풀어보도록 하자.

 

 

 

 

 

문제 풀이 과정

공백을 막아서 or 연산자를 사용하지 못하게 하는 것 같다.

or 연산자는 그대로 사용할 경우 앞과 뒤에 공백이 있어야 사용이 가능하다.

하지만 or을 ||로 바꿔서 사용하면 공백 없이도 사용이 가능하다.

이를 통해 pw 파라미터에 '||id='admin'%23을 넣어주면 바로 문제가 풀릴 것이다.

 

 

 

 

 

{"originWidth":920,"originHeight":270,"style":"alignCenter","caption":"?pw='

 

wolfman 바로 clear

 

페이로드 : ?pw='||id='admin'%23

 

 

 

 

 

or 연산자를 ||로 대체할 수 있다는 것을 알고 있으면 바로 풀 수 있는 문제였다.

매우 쉬웠던 문제이니 바로 다음 문제를 풀어보도록 합시다.