Search

WebHacking.kr Challenge old-61

목표 : SQL ‘as’와 HEX 변환
소스 외에 아무것도 없다.
<?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>"; ?>
PHP
복사
GET 메소드로 id 값을 받는다.
앞에 역슬래시를 붙이고 필터링을 거친다. 길이는 15자가 최대.
필터링 목록
( ) select from by . ,
select {$_GET['id']} from chall61 order by id desc limit 1
SQL
복사
id를 기준으로 내림차순 정리 후 값을 1개만 가진 것에서 가져온다는 쿼리.
필터링들을 모두 넘어 해당 SQL 문에서 admin 이라는 결과를 얻는 것이 목적
뒤를 -- 주석 처리해버리기엔 from 문을 쓸 수 없게 막아놨다.
as 를 이용해 ‘admin’을 id 필드명으로 지정하자.
‘admin’ as id
SQL
복사
음 아무런 변화가 없다. URL ENCODE 과정 중에 글자 수가 늘어나서 그런건가 싶었다.
as는 생략이 가능하므로 as 하나를 빼는것만으로 %20as를 함께 뺄 수 있다.
사실 이렇게 해도 15자가 넘는다. 하지만 이보다 줄일 방법이 떠오르지 않는다.
다시 보니 addslashes 함수가 있다. 즉 가 무시 당하게 돼있는데 이를 우회하기 위해선 문자열을 바꿔줄 필요가 있다.
admin 의 hex값은 0x61646d696e로 다음과 같이 입력해보자.
id=0x61646d696e id
SQL
복사

✓ 다른 [워게임] 포스트

WebHacking.kr Challenge Write-Up (70/80)
In progress
WebHacking.kr Challenge Write-Up (70/80)
In progress
Load more
︎ 더 많은 게시물을 보려면
︎ 작성자가 궁금하면?
 2023. absolroot all rights reserved.