반응형
// pw filtering
if (preg_match("/[a-zA-Z]/", $input_pw)) {
echo "alphabet in the pw :(";
}
else{
$name = preg_replace("/nyang/i", "", $input_name);
$pw = preg_replace("/\d*\@\d{2,3}(31)+[^0-8\"]\!/", "d4y0r50ng", $input_pw);
if ($name === "dnyang0310" && $pw === "d4y0r50ng+1+13")
소스코드의 일부분
정규표현식을 알아야 함
- \d* : 0개 이상의 숫자
- \@ : @
- \d{2,3} : 2자리나 3자리 숫자
- (31) : 31이라는 문자열
- [^0-8\"] : 0부터 8까지의 숫자 및 인용 부호를 제외한 다른 문자
- \! : 느낌표
preg_replace와 정규표현식을 사용하여
nickname=dnyang0310
pw=d4y0r50ng+1+13을 만들어야 한다.
nyang은 공백으로 교체되기 때문에 nyang을 한 번 더 넣어주었다.
pw도 위에 적어둔 정규표현식에 따라 임의의 숫자들로 만들어 입력한다.
step2에서는 command를 입력해야 한다.
리눅스 명령어를 떠올려 cat 명령어를 사용했다.
문제에서 flag값은 ../dream/flag.py라는 경로에 있다고 이미 알려주었다.
// cmd filtering
else if (preg_match("/flag/i", $cmd)) {
echo "<pre>Error!</pre>";
}
else{
echo "<pre>--Output--\n";
system($cmd);
echo "</pre>";
}
하지만 cmd에서 flag를 필터링하고 있다.
*을 사용하여 우회하면 문제를 해결할 수 있다.
반응형
'Dreamhack > Web' 카테고리의 다른 글
session-basic (0) | 2023.11.09 |
---|---|
pathtraversal (0) | 2023.11.09 |
xss-1 (0) | 2023.11.08 |
Carve Party (0) | 2023.11.03 |
file-download-1 (0) | 2023.11.03 |