1. 코볼트 문제 풀이
<코볼트>
코볼트의 문제는 위와 같다.
쿼리문이
$query = "select id from prob_cobolt where id='{$_GET[id]}' and pw=md5('{$_GET[pw]}')";
이라고 되어있다.
우리가 값을 집어넣을 수 있는 변수는 id와 pw이다.
그리고 문제 해결 조건은
if($result['id'] == 'admin') solve("cobolt");
위와 같이 id가 admin이면 된다.
일단 변수를 아무 값이나 넣어보자.
id에 1과 pw에 1을 집어넣은 결과이다.
id는 정상적으로 들어가지만 pw에 집어넣은 값은 md5('') 함수 안에 들어가게된다.
우리는 1번 문제를 풀때 패스워드를 무조건 참으로 만드는 방법으로 풀었다.
하지만 이 같은 경우에는 우리가 무슨 값을 넣어도 입력 값이 md5함수에 의해 해쉬값으로 변하게 되므로 의미가 없다.
그럼 생각할 수 있는 방법은 md5함수를 무력화 시켜야 한다는 것이다.
우리가 pw에 ')를 집어넣으면 어떻게 될까?
결과는 이렇다.
')를 집어넣게 되면 md5함수가 닫히고, 그 뒤에 우리가 원하는 값을 집어넣을 수 있게된다.
그럼 이제 1번 문제처럼 id='1' and pw=md5('') 의 and좌우 모두 참일 리는 없으니까(설마 비밀번호가 md5('')의 결과일까..)
id='1' and pw=md5('')구문은 무시가 되고, 뒤에 우리가 새로운 조건을 만들면 된다.
1번과 같이 비밀번호가 무조건 참이되게끔 만들어보자.
자.... 일단 이렇게 되면 비밀번호가 무조건 참인 id가 추출이 된다. 하지만 맨 뒤의 ')가 거슬린다.
')때문에 문장에 오류가 생겨 결과가 나오지 않는것이다.
그럼 ')를 주석처리를 해보자.
오라클 기반에 주석처리는 #을 사용하면된다. (참고로 Mysql은 --이다.)
아, 그리고 입력할때 #라고 써주면 필터링에 의해 안되는 듯하다.
따라서 URL인코딩을 한 값인 %23을 넣어주면 #으로 인식된다. (URL인코딩도 필터링 우회 기법 중 하나이다.)
자, 문장의 뒤에 #를 붙여 그 뒤의 ')가 주석처리되어 무시된다.
그에 따른 결과는 위와 같이
안녕 루비야? 넌 어드민이 아니야...
....ㅎㅎ;;
누구세요;;
자, 우리가 pw의 값을 참으로 만들었지만 무조건 admin이 나오라는 의미는 아니다.
왜냐하면 id=admin이라고 지정해 주지 않았기 때문이다.
그렇기에 데이터베이스상에 존재하는 수많은 id중 하나가 나오게 되는것이다.
(어떠한 방식에 의해서인지는 잘 모르겠다. 데이터베이스마다 차이가 있을수도 있고..)
그럼 이제 id를 지정해주자.
id는 admin이고, pw는 무조건 참인 값을 가져오면 된다.
결과는 만족스럽다.
*참고로 이런식이 아닌 간단히 푸는 방법도 있다.
문제 해결 조건은 id=admin이다. 이번 문제를 해결할때에는 pw의 값은 중요하지 않다.
그렇다면 id에 admin을 넣어보고, 그 뒤의 값은 다 무시하게하면 어떻게될까?
단순히 변수 id에 admin을 넣고 #을 붙인것 뿐이다. (pw에는 값을 넣지 않았다.)
그럼 where id='admin' 이라고만 판단하기 때문에 admin의 id를 SELECT 문에 의해 출력된다.
참고로 실무에서는 주석처리가 잘 먹히지 않는다고한다. 하지만.. 먹히는데는 먹히겠지..
자신이 알고있는 SQL 쿼리문을 잘 이용해 보다 쉽게 우회하는 방법을 찾는것이 SQL 인젝션을 학습하는 목적이 아닐까싶다.
--------------------------------------------------------------------------------------------------------------------------------------------------
본 게시물은 공부한 내용을 바탕으로 작성한 글로써, 점차 수정 및 추가를 통해 내용을 발전시킬 계획입니다.
따라서 오타 및 내용상의 오류, 추가할 내용 등이 있을 경우 주저 없이 알려주시면 감사하겠습니다.
궁금한점을 물어보시면 제가 아는 선에서 최대한으로 알려드리겠습니다.
'Wargame & CTF. > LOS(The Lord Of the SQL)' 카테고리의 다른 글
[LOS] 4. Orc 문제 풀이 (3) | 2017.01.06 |
---|---|
[LOS] 3. Goblin 문제 풀이 (0) | 2016.11.10 |
[LOS] 1. Gremlin 문제 풀이 (2) | 2016.11.03 |