Challenge old 마지막 문제ㅠ
깔끔하게 소스만 있네요..
<?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>";
?>
이번 문제의 핵심은 여기네요
$result = mysqli_fetch_array(mysqli_query($db,"select {$_GET['id']} from chall61 order by id desc limit 1"));
order by id desc limit 1에서
"order by desc"는 "내림차순으로"
"limit 1"은 "1개만(최대 1개까지)" 입니다
즉 id를 내림차순으로 정렬했을 때 가장 첫 번째 자료를 select한다는 것 같네요
그리고 그 id가 admin이면 풀립니다
일단 id의 기본값은 guest, 쿼터 외 여러 문자열과 부호들이 필터링되고 있고
안봐도 admin 역시 필터링 돼있을 게 뻔하죠,, 길이 제한도 있어오 15자 이하만 됩니다
먼저 ?id=id로 모든 id를 가져와 봤어요
가장 마지막 알파벳, 내림차순에서는 가장 첫번째인 'test'가 출력됩니다
그럼 admin을 우회해야 하는데 매일 쓰는 char()은.. 괄호가 걸려서 패스
같은 이유로 함수로 우회하는 방법은 다 막힙니다
그래서 hex값인 0x61646d696e을 넘겨볼게요
아무일 x
이쯤에서 코드를 다시 볼 필요가 있었다
$result = mysqli_fetch_array(mysqli_query($db,"select {$_GET['id']} from chall61 order by id desc limit 1"));
{$_GET['id']}에 'admin'이 들어간다고 해도 chall61이라는 테이블에 admin 값이 없는거다..
따라서 먼저 테이블 내 id 칼럼 속에 admin을 넣어주고! select 해야한다!
그래서 어떻게 넣어줄까 찾아보니 '컬럼 별칭Alias'이란 게 있어따
컬럼 별칭 - 원래 이름대신 내가 설정한 별칭으로 컬럼명을 대체할 수 있다
예를 들어, select b a는 b(원래 컬럼명)를 a로 부르겠다는 뜻이고 결과적으로 a 컬럼 안에 b값이 속하게 된다.
컬럼 별칭을 사용해서 우리가 필요한 '이 칼럼에 이 값 넣기'를 할 수 있는거당
그럼 select {$_GET['id']} from chall61 order by id desc limit 1에서
select 다음을 'admin id'로 설정하면 id 컬럼에 admin 값이 들어가고 admin을 select하게 됩니다
따라서 ?id=admin id를 넣을 건데, admin은 hex값으로 넣어볼게요
?id=0x61646d696e id
'Wargame > webhacking.kr' 카테고리의 다른 글
Challenge old 41 (250) (0) | 2020.02.18 |
---|---|
Challenge old 42 (200) (0) | 2020.02.18 |
Challenge old 60 (300) (0) | 2020.02.18 |
Challenge old 59 (200) (0) | 2020.02.17 |
Challenge old 58 (150) (0) | 2020.02.17 |