CTF/웹해킹

[Cyber Security Rumble] Cyberwall - 웹해킹 / Command Injection

SecurityMan 2022. 12. 19. 11:00

 

아주 전형적인 Command Injection 문제

 

아주 똑같은 문제들을 이전에 블로그에서도 다룬적이 있었다.

(https://hackingstudypad.tistory.com/74)

(https://hackingstudypad.tistory.com/256)

 

반응형

 

 

회사에서 방화벽 시스템을 구축했다면서 

 

방화벽의 웹 인터페이스 접속 주소를 제공하고 있다.

 

해당 페이지로 접속하면 비밀번호를 입력하는 창이 하나 나오는데

 

 

F12를 눌러 개발자도구를 이용

 

비밀번호 입력창 부분의 소스를 확인해본 결과

 

비밀번호가 하드코딩 되어있는것을 발견했다.

 

알아낸 비밀번호는 rootpw1337 이다.

 

 

비밀번호를 입력해서 접속하면

 

Debugging 페이지가 나오는데,

 

여기 익숙한 UI가 보인다.

 

IP 주소를 입력할 수 있는 칸이 있고, 옆에 Ping! 버튼이 있다.

 

IP 주소를 입력한 다음 버튼을 누르면

 

해당 IP주소로 ping 명령어를 수행한 뒤 결과를 보여주는 기능이다.

 

웹 페이지를 통해서 운영체제 명령어를 실행하고, 그 결과를 가져와서 보여주는 것이다.

 

 

참고로 실제 리눅스 환경에서 ping 명령어를 실행시키면 이렇게 뜬다.

 

출력 내용을 보면 완전 똑같은것을 볼 수 있다.

 

문제는 이렇게 웹서비스를 통해서 운영체제 명령어를 실행시킬 경우 

 

사용자의 입력값을 적절하게 필터링 해줘야 한다는 것이다.

 

그렇지 않으면 불필요한 정보까지 노출될 수 있다.

 

 

리눅스 쉘스크립트는 명령어 뒤에 ; (세미콜론)을 쓰면

 

이어서 다른 명령어를 실행시킬 수가 있다.

 

ping 뒤에 ; 를 입력하고 ls를 입력하면

 

명령어 수행결과가 이렇게 같이 연달아서 출력되게 된다.

 

 

이 문제에서도 똑같이 생각하면 된다.

 

1.1.1.1;ls 라고 입력해 봤더니

 

ping 명령어 뒤에 ls가 수행되어서 파일 목록이 같이 출력된 것을 볼 수 있었다.

 

그 중 super_secret_data.txt 파일이 눈에 띄었고

 

 

cat 명령어로 해당 파일을 읽어 주면

 

플래그를 찾을 수 있었다.

반응형