Iriton's log

[los.rubiya] gremlin write-up 본문

WebHacking/WarGame

[los.rubiya] gremlin write-up

Iriton 2023. 10. 4. 18:23

필요 개념 정리

  • preg_math(): 인자로 전달받은 정규 표현식과 일치하는 패턴을 검색하는 php의 함수.⇒ 1. 정규식 표현 2. 검색 대상 문자열 3. 매칭된 값을 배열로 저장하고 싶을 시, 배열의 변수⇒ preg_math($pattern, %subject, $matches)
  • ⇒ preg_math(’/정규식표현/’, ‘검색대상문자열’, ‘배열변수’)
  • 세 가지 인자를 받는다.
  • 정규 표현식: 문자열을 바탕으로 검색을 수행하여 패턴과 일치하는지 조사하고, 분할하는 문자열 처리 방법
  • mysqli_fetch_array 함수는 특성상 한 번의 콜에 하나의 행만 가져올 수 있다.
  • #: %23
  • 공백: %20

query :

select id from prob_gremlin where id='' and 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__);
?>

preg_match 코드 부분을 보면 GET으로 받은 값을 대상으로 /prob, _, ., (, ) 이 다섯 가지 표현을 검색한 후 매칭되는 패턴이 존재하면 exit 된다는 걸 알 수 있다.

즉, 아이디나 비밀번호에 해당 표현이 추가 되면 안 된다는 뜻이다.

(여기서부턴 내 추측) 쿼리문을 보면 아이디와 비밀번호를 입력 받으며 그 값을 데이터베잇에서 찾아 쿼리에 저장하고 result에 해당 쿼리값을 배열 형태로 저장한 뒤 if절을 통해 result 값에 아이디가 있으면 즉, 데이터베이스 내에 존재하는 아이디로 로그인 되면 성공하는 거 같다.

가장 유명한 공격 방식인

‘ or 1 = 1 #

이걸 사용하면 쿼리문이 참으로 되고 뒤에 코드는 주석 처리된다.

해당 값을 아이디에 입력하면 참이 되면서 아이디의 모든 값을 호출한다.

mysqli_fetch_array 함수는 한 행만 가져오기 때문에 prob_gremlin의 첫 행에 담긴 id 값이 호출되면서 문제가 풀린다.

pw 값에 공격문을 넣어도 문제가 풀렸다!

 

+) ?id= ‘ or 1 = 1 # 을 URL에 넣어서 자동인코딩 된 것으로는 문제가 안 풀린다.

#과 띄어쓰기까지 인코딩을 안 해줘서 그런 건데, or 앞뒤로 한 번 더 띄어쓰기를 하고 #도 %23으로 입력하면 풀린다.

1%27%20or%201=1%23

'WebHacking > WarGame' 카테고리의 다른 글

[los.rubiya] goblin write-up  (0) 2023.10.10
[los.rubiya] cobolt write-up  (0) 2023.10.10
[root-me] Challenge: Install files  (0) 2023.10.04
[root-me] Challenge: File upload - Double extensions  (0) 2023.10.04
[Webhacking.kr] old-28 write-up  (0) 2023.10.04
Comments