[WARGAME][los] gremlin

jckim22·2022년 11월 21일
0

[WEBHACKING] STUDY (WARGAME)

목록 보기
93/114

아래는 처음 들어갔을 때 화면이고 경고문이 있다.
들어가서 회원가입 하고 로그인 할 때는 딱히 트릭은 없다.

아래는 서버 코드이다.

<?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__);
?>

코드는 아래 정규식으로 필터링하고 있고 쿼리문도 아래 쿼리문을 사용하고 있다.
나는 '아이디 인젝션', '비밀번호 인젝션' 부분에 인젝션 쿼리를 삽입하면 되겠다.


위 정규식을 보면 핵심적인 sql 문법들은 필터링 되고 있지 않고 있다.
아마도 첫 번째 문제라서 낮은 난이도인 것 같다.


그럼 난 위 쿼리문에 아주 기본적인 sql 인젝션인 ' or 1=1을 아래오 같이 삽입하여 무조건 참이 되게 하여 결과값이 있게 한 후 주석으로 그 뒤는 다 무시해주겠다.

.을 공백으로 잘못보고 아래처럼 공백을 %09로 우회해주었다.
아무튼 아래 쿼리를 id에 get 메소드 페이로드로 보내게 되면

result에 id 결과 값이 성공적으로 담기면서 GREMLIN 단계를 Clear할 수 있다.

profile
개발/보안

0개의 댓글