WarGame/Lord of SQL Injection

[LOSI] Lord of SQL Injection Level 2 - Cobolt

다음으로 우리는 반기는 몬스터는 cobolt이다. 바로 코드로 넘어가자로 우리는 반기는 몬스터는 cobolt이다. 바로 코드로 넘어가자

<출처 : 위키백과https://ko.wikipedia.org/wiki/%EC%BD%94%EB%B3%BC%ED%8A%B8>


코드

알고 있는 부분은 빠르게 넘어가고 이번에 못쓰는 문자열은 다음과 같다.

prob, _(언더바),.(점), \(역 슬래쉬)

이점은 Level 1이랑 다른 게 없어 보인다. 쿼리를 보자

$query = "select id from prob_cobolt where id='{$_GET[id]}' and pw=md5('{$_GET[pw]}')"; 

으흠; 이번에 는 id에 해당하는 pw를 md5를 이용해서 해싱하고 해싱 값을 비교한다. 

* 여담인데, DB를 다뤄본 분들은 아시겠지만, 비밀번호는 일방향으로 암호화, 생체정보는 양방향 암호화하는 것이 현재 개인정보보호법의 기준이다. 물론 md5같이 충돌이 발견된 불안정한 알고리즘으로 하면 안 된다.

 

눈치 빠른 독자들은 눈치를 챘을지도 모르지만, cobolt의 코드에는 저번 gremlin의 코드의 Injection이 유효하다.

다음을 입력해보자

Answer URL? : los.rubiya.kr/chall/XXX.php?id=admin%27%20or%201=1--%20;

응? 우리 보고 admin이 아니라 rubiya란다. 즉 이번에는 admin으로 접근을 해야 되는 걸 알 수 있다.

* 사실 아래 if($result ['id']='admin')을 비교하고 아니면 위와 같은 화면을 출력하게 코드가 짜여있다.

 

 

 

해결방법

Answer URL : los.rubiya.kr/chall/XXX.php?id=admin%27%--%20; 

아니 이렇게 간단할 수가; 맞다 우리 보고 admin계정의 존재는 알려주었으니까 그냥 admin을 가져오라고 query를 하고, query를 작은따옴표(')로 닫아버리면 끝이다.


이렇게 Lord of SQL Injection의 두 번째 몬스터인 코볼트 사냥에 성공하였다. 상황상황에 따라 필요한 정보를 빼오는 맛이 SQL Injectino엔 있다. 흥미를 잃지 않았기를 바라면서 다음 관문에서 여러분을 기다리겠다.