[ webhacking.kr ] 61번 old

sangjun

·

2022. 1. 23. 12:12

반응형

문제 소스

<?php
  include "../../config.php";
  if($_GET['view_source']) view_source();
  $db = dbconnect();
  if(!$_GET['id']) $_GET['id']="guest";
  echo "<html><head><title>Challenge 61</title></head><body>";
  echo "<a href=./?view_source=1>view-source</a><hr>";
  $_GET['id'] = addslashes($_GET['id']);
  if(preg_match("/\(|\)|select|from|,|by|\./i",$_GET['id'])) exit("Access Denied");
  if(strlen($_GET['id'])>15) exit("Access Denied");
  $result = mysqli_fetch_array(mysqli_query($db,"select {$_GET['id']} from chall61 order by id desc limit 1"));
  echo "<b>{$result['id']}</b><br>";
  if($result['id'] == "admin") solve(61);
  echo "</body></html>";
?>

- GET방식으로 id를 받는다.

- id가 없을 시에 guest로 로그인 된다.

- id에 필터링과 길이 제한이 있다.

- sql injection으로 쿼리로 admin을 끌어오도록 만들어야 한다.

- select [payload] from chall 61 order by id desc limit 1

--> id를 기준으로 내림차순으로 정렬하고 상위 첫번째 행만 출력한다.

문제 풀이

- AS 예약어를 이용해 풀이한다.

- admin(hex) -> 0x61646d696e

- 0x61646d696e as id --> 0x61646d696e id

 

로컬에서 mysql로 실험을 해봤다.

그냥 select * 로 해줬을 때는 내림차순이기 때문에 admin보다 guest가 먼저 나온다.
select [임의의 값] from Test order by id des limit 1;을 해주면 이렇게 나옴
admin --&gt; hex로 바꿨을때는 columns의 값이 admin으로 잘 나온다. 하지만 컬럼명이 이상하게 나온다.
컬럼명을 바꿔주기 위해서 별명을 사용해줬다. (as id)
글자수 제한 때문에 글자수를 줄이기 위해서 as를 생략해봤다. as는 생략 가능하다.

반응형

'War Games > webhacking.kr' 카테고리의 다른 글

[ webhacking.kr ] 56번 old  (0) 2022.01.24
[ webhacking.kr ] 57번 old  (0) 2022.01.24
[ webhacking.kr ] 58번 old  (0) 2022.01.24
[ webhacking.kr ] 59번 old  (0) 2022.01.23
[ webhacking.kr ] 60번 old  (0) 2022.01.23
[ webhacking.kr ] 61번 old  (0) 2022.01.23

0개의 댓글