관리 메뉴

IT창고

[LOS] 1. Gremlin - (LOS 소개) 본문

WarGame/Load of SQL injection

[LOS] 1. Gremlin - (LOS 소개)

방구석여포 2019. 7. 18. 14:31

LOS(Load of SQLInjection) 워게임 풀이를 해보도록 하겠습니다.

난이도는 몬스터 이름으로 난이도가 높을수록 강한 몬스터의 이름으로 대처됩니다. 

 

LOS의 경우 유명한 워게임이라 그런지 LOS 사이트가 여러가지가 있는데 아래에 두곳을 소개합니다.

1. https://los.eagle-jump.org/

2. https://los.rubiya.kr/

 

1번 사이트는 UI가 보기 좋고 25번까지 문제가 있으며 2번 사이트는 문제 수가 20년 8월 기준으로 48개나 되네요 

이전에 BOF를 풀었던 당시에는 20문제까지 있는줄 알았는데 더 많이 생겨났네요 

이번 글에서는 모든 LOS의 공통인 Gremlin 문제를 풀어보도록 하겠습니다.

 

문제를 보면 PHP 소스코드가 있으며 문제를 해결할 만한 힌트를 볼 수 있습니다.

 

if(preg_match('/prob|_|\.|\(\)/i'$_GET[id])) exit("No Hack ~_~"); // do not try to attack another table, database!

소스를 보면 위와 같은 부분이 있는데 id 값에 /prob|_|\.|\(\)/i 입력 시 종료페이지로 넘어가므로 해당 값은 사용하지 말라고 되어있습니다

 

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

위의 소스를 통해 쿼리문이 $result 변수에 배열로 저장되며 DB는 MySQL를 사용한다는걸 확인할 수 있습니다. 

 

if($result['id']) solve("gremlin");

마지막으로 소스를 보면 $result 값의 id가 참일 경우 풀이 성공이라고 생각되는 소스가 있습니다.

 

 

정석대로 쿼리문을 넣어 보았습니다. 

id값과 pw값이 제대로 확인이 됩니다.

 

사실 처음에 바로 풀 수 있었는데 URL 인코딩 생각을 깜빡하고 삽질을 조금 했습니다. 

쿼리문은 ?id=1 or 1=1# 으로 하였으며 결과값은 위와 같습니다. 

id= 값에 작은따옴표 ' 가 있는걸 확인할 수 있습니다. 

 

위와 같은 방법으로 바로 문제를 풀 경우 쿼리문의 정답은 아래와 같습니다. 

더보기

?id=1' or 1=1%23

추가로 id값도 굳이 넣을 필요는 없으며 ?id=' or 1=1%23 쿼리문으로도 충분합니다.

#을 URL 인코딩할 경우 %23이 됩니다. 이걸 깜빡해서 삽질한게 화가 나네요

이번엔 id값은 정상적으로 기입하고 pw값을 건드려보았습니다.

pw값도 id값과 동일하므로 id에 아무값이나 혹은 그냥 두고 pw값에 or문으로 참값을 만들 수 있습니다. 

pw를 위와 같이 참값으로 만들어 주석문 없이도 가능합니다.

'WarGame > Load of SQL injection' 카테고리의 다른 글

[LOS] 4. Orc  (0) 2020.12.24
[LOS] 3. Goblin  (0) 2020.12.22
[LOS] 2. Cobolt  (0) 2020.12.21
Comments