드림핵 4번 문제이다.
Ping 테스트를 입력하는 곳에 command injection을 이용하는 문제라는 걸 알 수 있다.
우선 Ping 테스트를 입력하고, 정상적으로 작동되는 것을 확인한다.
현재 서버에서 ping 테스트를 진행하면 ping -c 3 명령어와 똑같이 진행되는 것을 확인할 수 있다.
칼리 리눅스를 이용하여 똑같은 명령어를 실행해보았다.
패킷 로스등 네트워크 상태등 환경상황을 제외하곤 똑같은 명령어가 실행된다.
코드를 보면 ping -c 3 "{host}" 값이 있고 저 부분에 ping 명령어를 입력 후 다음 명령어에 연결하여 사용하면 될 것 같다.
커맨드 인젝션은 대부분 메타문자를 이용하여 공격 진행을 할 수 있으며,
아래 표를 참고하면 된다.
메타문자 | 설명 | 예시 | 결과 |
; | 명령어 구분자로 사용됩니다. 여러 명령어를 한 번에 실행할 때 사용합니다. | ping 8.8.8.8; ls | ping 명령 실행 후, ls 명령어 실행 |
&& | 앞선 명령이 성공했을 때만 다음 명령을 실행합니다. | ping 8.8.8.8 && ls | ping 성공 후, ls 실행 |
` | ` | 앞선 명령이 실패했을 때만 다음 명령을 실행합니다. | |
& | 명령어를 백그라운드에서 실행합니다. | ping 8.8.8.8 & ls | ping이 백그라운드에서 실행되고, ls 즉시 실행 |
` | ` | 파이프(pipe)로, 첫 번째 명령어의 출력을 두 번째 명령어의 입력으로 전달합니다. | `cat /etc/passwd |
> | 명령어의 출력을 파일에 저장합니다. | ping 8.8.8.8 > result.txt | ping 명령 결과를 result.txt에 저장 (덮어쓰기) |
>> | 명령어의 출력을 파일에 추가합니다. | ping 8.8.8.8 >> result.txt | ping 명령 결과를 result.txt에 추가 |
< | 파일의 내용을 명령어의 입력으로 사용합니다. | cat < input.txt | input.txt의 내용을 cat으로 읽음 |
$() | 명령어 치환. 내부 명령어를 먼저 실행하고 그 결과를 사용합니다. | echo $(whoami) | 현재 사용자 이름 출력 |
\ | 메타문자 이스케이프. 메타문자의 기능을 무시하고 문자 그대로 처리합니다. | echo \$PATH | 환경 변수 대신 $PATH 문자열 그대로 출력 |
" (큰따옴표) | 문자열을 감싸서 공백이 포함된 인자를 처리할 때 사용됩니다. | echo "Hello World" | Hello World 출력 |
' (작은따옴표) | 작은따옴표 안의 모든 문자를 리터럴로 처리합니다. | echo '$HOME' | $HOME 문자열 그대로 출력 |
``` (백틱) | 명령어 치환. 백틱 안의 명령어를 먼저 실행하고 그 결과를 사용합니다. (현대 시스템에서는 $()로 대체됨) | echo `whoami` | 현재 사용자 이름 출력 |
우선 난 메타문자 &&를 사용하여 진행을 하려고 작성을 하였는데,
요청한 형식과 일치하지 않는다고 하여 F12를 눌러 input 태그부분을 확인한다.
F12를 열어 코드를 보니 input 태그 부분에 HTML pattern으로 유효성? 검사를 진행하고 있어, 저 부분을 삭제하고 입력한다.
실행은 됐지만 ping, ls 두 명령어 모두 실행되지 않는 에러가 발생하였다.
메타 문자 입력 부분에 조금 수정을 해주어 작성하고,
ping 명령어와 ls 명령어가 정상적으로 출력 하는 것을 확인하였고,
ls명령어로 출력된 리스트에 flag.py가 있는 걸 확인하였고, 다시 flag.py를 실행하면 된다.
cat 명령어를 이용하여 flag.py를 실행하였고, 정상적으로 flag값을 확인할 수 있다.
요약
1. 문제 서버 파일 다운로드 및 서버 생성
2. Ping 테스트 진행
> ex) 8.8.8.8
3. 문제 스크립트 실행
- flask 서버로 생성되었으며, host의 값을 검증없이 받아서 이용함
4. 메타문자를 이용하여 삽입 공격 실행하나 input 태그의 패턴으로 인하여 삽입 실패, F12를 눌러 HTML5 pattern 부분 삭제
5. 삽입공격 재실행
- 8.8.8.8"&&"ls
6. flag.py 파일 확인
7. 8.8.8.8"&&"cat " " flag.py
- cat과 flag.py사이에도 메타문자 사용
후기
오랜만에 포스팅이기도하고, 이번에는 문제를 푸는 데 조금 시간이 걸렸다. 점점 갈수록 어려워 지는 것 같다.
'정보보안 > Dreamhack' 카테고리의 다른 글
[Dreamhack] Background: Web 강의 정리 (7) | 2024.10.24 |
---|---|
[Dreamhack, WarGame] 3. file-download-1 (4) | 2024.09.06 |
[Dreamhack, WarGame] 2. devtools-sources (2) | 2024.09.04 |
[Dreamhack, WarGame] 1. cookie (0) | 2024.08.27 |