위 사진은 오류인 것 같습니다.
아래는 low풀이이다.
low레벨 풀이
이번 문제에서는 CommandInjection으로 사용자의 hostname을 알아내야한다.
내 아파치 서버는 윈도우에서 돌아가기 때문에 system 명령어들도 전부 윈도우 터미널 기준이다.
low level때 처럼 ip && dir로 ping이 성공하게 되면 자동으로 나의 윈도우서버에 ls를 보여주는 dir 명령어를 사용하여 그 정보들을 빼오려고 했다.
하지만 아래처럼 dir 매개 변수가 잘못되었다고 뜬다. 무슨 이유인지 모르겠지만 &&는 필터링이 되어있는 것 같다.
그래서 전자가 에러가 나면 후자가 실행되는 ||메타 문자를 사용해보았다.
그랬더니 전자에 ping이 오류가 나면서 뒤에 dir이 실행되었고 low 때 만들어 놓은 Hacked.py도 보인다.
그럼 이제 || hostname으로 호스트네임을 확인하자
입력했더니 아래오 같은 결과가 나왔다.
ping이 에러가 나면서 ping의 도움말이 뜨고 맨 밑에 hostname이 뜬 걸 볼 수 있다.
마지막으로 아래 코드를 보면 &&, ;이라는 메타코드만 필터링 된 것을 볼 수 있다.
$target = $_REQUEST[ 'ip' ];
// Set blacklist
$substitutions = array(
'&&' => '',
';' => '',
);
// Remove any of the charactars in the array (blacklist).
$target = str_replace( array_keys( $substitutions ), $substitutions, $target );