1. Orc 문제 풀이
Orc이다.
문제를 보게되면 중간에 보이는
$_GET[pw] = addslashes($_GET[pw]);
을 기준으로 2번 검증을 하고 있다.
if($result['id']) echo "<h2>Hello admin</h2>";
를 통해서 입력한 id가 존재하면 Hello admin이라고 출력하고있으며 (admin이 아닌 데이터베이스에 존재하는 모든 id에 대해서)
if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orc");
를 통해서 입력한 pw가 실제 데이터베이스의 값과 같으면 해결이 된다. ( 정확한 pw를 구하라는 의미 )
일단 입력되어있는 Query가 id='admin' and pw='{$_GET[pw]}'"; 이기 때문에 pw의 값을 무조건 참을 만들어야 Hello admin이라는 출력값이라도 받을 수 있을 것이다.
이미 입력되어있는 id='admin'은 그대로 놓고, pw에 'or '1'='1'# 라고 입력을 해서 pw값이 무조건 참이 되게 만들었다.
Hello admin이라는 답은 얻었다. 이제 pw를 구해야한다.
어떻게 구해야 할까?? 일단 비밀번호에 대한 아무런 자료가 없기 때문에 비밀번호의 길이부터 구해야 할 것이다.
LENGTH라는 함수를 사용할 수 있다. LENGTH 함수는 이름 그대로 특정 변수의 길이를 출력하는 함수이다.
사용법은 다음과 같다.
LENGTH(변수)
자, length함수를 사용해서 입력해 보았다. length(pw) > '1' 이라고 입력 했는데 그대로 Hello admin이라고 출력이 되었다는 것은 pw의 길이가 1보다 크다는 조건이 참이라는 것이다.
만약 조건이 참이 아니게 주면 어떻게 될까?
물론 Hello admin이 나오지 않는다. 이 결과 값을 이용하여 차근차근 pw를 유추해가면 되는 것이다.
아 당연히 length(pw)='1' 이런식으로 해도 된다. 그렇지만 만약, 만약에 pw의 길이가 200이라고 해보자. ㅎㅎ;;; 부등호로 범위를 줄여가기 위해서 부등호를 사용한 것이다.
이렇게 몇차례 시도를 해본 결과 비밀번호가 8자리라는 것을 알게 되었다.
이제 비밀번호의 길이는 알았고 정확히 무엇이냐를 알아야한다. 이럴 때 sql인젝션에서 많이 사용하는 함수가 substr 함수이다.
substr함수는 문자열이나 변수에서 특정번째 부터 특정 길이만큼 자르는 함수이다.
예를들어서
substr('HELLO',2,2)
라고 하게되면
HELLO라는 문자열의 2번째 E부터 2개 만큼 자르겠다. 라고 해서 결과는 "EL"이 된다.
자, 이제 이걸 어떻게 쓰느냐. 우리에겐 우리의 질의가 정답인지 아닌지 알려주는 HELLO ADMIN이라는 출력값이 있다.
substr(pw,1,1) = '1' 이라고 한다면 pw의 첫번째 글자가 '1'이 맞는지 알아 낼 수 있다는 것이다.
패스워드의 범위를 모르기 때문에 숫자만인지, 문자도 합쳐져있는지, 특수문자가 있지는 않는지, 알 방법이 없다.
내가 처음 풀었을 때에는 substr(pw,1,1) substr(pw,2,1) substr(pw,3,1) 등을 일일이 풀었다. 힘들었지만 해결은 했다.
풀 수는 있다. 비밀번호는 문제를 아직 풀지 않은 독자를 위해 가려놓겠다.
그리고나서 워낙 경우의 수가 많다보니까 파이썬을 이용해서 자동화로 입력하고 결과를 받는 짧은 소스를 만들었었다.
만약 파이썬과 같은 언어를 조금 해본 경험이 있다면 어떤식으로 만들어야할지 금방 생각날 것이다.
현재 내 개인서버에서 LOS를 돌리지 않고 있어서 보안상 접속이 잘 안되고있지만.. 후에 개인서버로 LOS를 돌리게 된다면 소스 검증을 통해 사용할 수 있게 업로드 할것이다.
--------------------------------------------------------------------------------------------------------------------------------------------------
본 게시물은 공부한 내용을 바탕으로 작성한 글로써, 점차 수정 및 추가를 통해 내용을 발전시킬 계획입니다.
따라서 오타 및 내용상의 오류, 추가할 내용 등이 있을 경우 주저 없이 알려주시면 감사하겠습니다.
궁금한점을 물어보시면 제가 아는 선에서 최대한으로 알려드리겠습니다.
'Wargame & CTF. > LOS(The Lord Of the SQL)' 카테고리의 다른 글
[LOS] 3. Goblin 문제 풀이 (0) | 2016.11.10 |
---|---|
[LOS] 2. Cobolt 문제 풀이 (0) | 2016.11.09 |
[LOS] 1. Gremlin 문제 풀이 (2) | 2016.11.03 |