<?php
$input = trim(getUserInput());
if(
str_split($input) == array(0,0,0,0) ||
strcmp($input, "0000") == 0 ||
strcmp($input, "000") == 0 ||
strcmp($input, "00") == 0 ||
strcmp($input, "0") == 0 ||
$input === 0 ||
preg_match("/^[\d]{1,}$/D", $input)
)fail_advanced_1();
if($input == "0000") complete_advanced_1();
?>
라는 코드가 있고 필터링들을 통과해서 complete_advanced_1로 가게되면 성공이다.
==과 ===과 strcmp과의 차이점을 잘 이해해야 한다.
==은 그냥 형을 따지지 않고 같으면 같다고 나오고, ===은 엄격한 비교로 데이터형까지 같아야
같다고 나온다. strcmp는 문자열이 같으면 0, 사전 순서에 따라 1또는 -1이 리턴된다.
즉 위의 필터링을 보면... $input===0을 피해가기 위해서는 대충 0으로 변환되는...
"00"같은걸로 형이 다르면 될것이고, strcmp($input,"0000")에서 0이 안나오려면 0의 갯수를 다르게
써주면 된다. 처음엔 "00000"이런거나 NULL, false등등의 왠지 0과 비슷하게 행동할것같지만
다른 형들을 생각해봤는데 자꾸 필터링에서 걸렸다... 포기하고 몇일동안 생각하다가
e가 떠올랐다. 테스트로 만들어서 돌리고 있던 php에 e를 변형해서 1e1처럼 넣었더니 필터링을
다 통과했다.
'webhacking > etc' 카테고리의 다른 글
Security Override Decryption 1~7 (0) | 2014.12.21 |
---|---|
Security Override Advanced 2 (0) | 2014.12.21 |
Security Override Basic (0) | 2014.12.17 |
Security Override Recon (0) | 2014.12.17 |
xcz.kr 21번. (0) | 2014.12.07 |