저 스크립트를 주입시키면 풀리는 문제인듯 하다. code에 스크립트를 고대로 넣으면 no hack이라 뜨면서 필터링 된것을 볼 수 있는데 어떤필터링인지 몰라 막 넣어봤다. 그런데 문자는 두글자 이상 이어지면 필터링 되는 것 같았다. 그래서 문자가 이어지지 않게 null문자를 끼어넣어서 시도해봤다. 웹에서 null문자는 %00 이다. index.php?code=a%00l%00e%00r%00t%00(1); 이렇게 문자들 사이에 막 끼워넣으니 풀리게 되었다.
Web Hacking
"; echo "view-source"; $_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 "{$result['id']}"; if($result['id'] == "admin") solve(61); echo "";?> result의 id가..
lv : {$result['lv']}"; if($result['lv'] == "admin"){ mysqli_query($db,"delete from chall59"); solve(59); } echo "view-source"; exit(); } } if($_POST['id'] && isset($_POST['phone'])){ $_POST['id'] = addslashes($_POST['id']); $_POST['phone'] = addslashes($_POST['phone']); if(strlen($_POST['phone'])>=20) exit("Access Denied"); if(preg_match("/admin/i",$_POST..
웹 해킹 문제를 풀다보면 preg_match 함수로 일부 키워드들을 필터링 한 문제들이 많이 보인다. preg_match("/admin|0x|#|hex|char|select/i",$_POST['phone']); '|'로 필터링하는 단어들을 구분하고 뒤에 i 옵션을 이용해 대소문자 구분을 하지 않는다. *정규식 참고하기 따로 알아낸 정규식들 정리 \d => 모든 숫자 \x20 => 스페이스 \& => 리터럴로 변환 즉, &문자 사용 불가능 preg_match("/or|union|admin|\||\&|\d|-|\\\\|\x09|\x0b|\x0c|\x0d|\x20|\//",$t) 이렇게 하면 %09같은거 못