문제
Command Injection을 통해 플래그를 획득하는 문제입니다.
문제풀이
8.8.8.8로 PING을 보내면 정상적으로 출력 결과가 나옵니다.
Command Injection에 많이 사용 하는 메타 문자를 이용하여 명령을 시도한 결과 "요청한 형식과 일치시키세요."라는 문구를 확인 할 수 있습니다.
메타문자 | 설명 |
`` | 명령어 치환 `` 안에 들어있는 명령어를 실행한 결과로 치환 |
$() | 명령어 치환 $() 안에 들어있는 명령어를 실행한 결과로 치환, 중복 사용 가능 |
&& | 명령어 연속 실행 한 줄에 여러 명령어를 사용하고 싶을 때 사용 앞 명령어에서 에러가 발생하지 않아야 뒷 명령어 실행 |
|| | 명령어 연속 실행 한 줄에 여러 명령어를 사용하고 싶을 때 사용 앞 명령어에서 에러가 발생해야 뒷 명령어 실행 |
; | 명령어 구분자 한 줄에 여러 명령어를 사용하고 싶을 때 사용 ; 은 단순히 명령어 구분을 위해 사용하며, 앞 명령어의 에러 유무와 관계 없이 뒷 명령어 실행 |
| | 파이프 앞 명령어 결과가 뒷 명령어의 입력 삽입됨 |
그 외 | ., >, >>, &>, >&, <, {}, ?, *, ~ |
ping.html 소스코드 내 정규표현식 패턴이 존재하나, 특수문자에 대한 필터링이 아닌 영어 대/소문자, 숫자, 점, 길이가 5~20 사이와 일치하는지를 확인하는 패턴입니다.
# ping.html 소스코드 일부
pattern="[A-Za-z0-9.]{5,20}"
따라서 프록시 도구를 이용하여 메타문자가 삽입되는지 시도합니다.
응답페이지에 메타문자 삽입됨을 확인하였으나, 메타문자 뒤에 ls 명령어가 실행되지않습니다.
메타문자 뒤에 ls 명령어 실행을 위해 더블쿼터(")를 적절하게 사용하여 ls 명령어를 실행시켜봅니다.
ls 명령어가 제대로 실행되었으니 cat 명령어를 이용하여 flag.py 열람을 시도합니다.
더블쿼터 사이에는 단일 문자열만 실행되는것으로 보여 더블쿼터 밖에서 cat 명령어를 시도합니다.
cat 명령어가 동작되며 플래그값이 노출됩니다.
Reference
'CHALLENGE > Dreamhack' 카테고리의 다른 글
[web] phpreg (0) | 2023.12.14 |
---|---|
[web] file-download-1 (0) | 2021.10.09 |
[web] cookie (0) | 2021.10.09 |
[misc] broken-png (0) | 2021.10.09 |