[Dreamheack] command-injection-1

Monitor In Secure☃️·2024년 3월 8일

wargame_web

목록 보기
3/14
post-thumbnail

오늘부터 정기적으로 워게임 문제를 풀어보려고 한다.

대학교를 다니면서 개념은 어느정도 배웠다고 생각했는데, 이걸 막상 워게임 문제로 개념을 응용하려고 하니까 잘 안풀리는 것 같다..
그래서 쉬운 문제부터 천천히! 하나씩 문제를 풀어나가보려한다.


(Home 화면)
(Ping 화면)

ping에 나온대로 한번 '8.8.8.8'을 입력해보겠다.

위 결과를 통해 입력란은 ping의 명령어를 수행해주는 역할을 하는 것 같다는 유추를 할 수 있다.

그냥 cmd 명령어를 받는 역할을 하는 걸 수도 있다는 생각에 '8.8.8.8'의 주소로 ping을 보내고, flag.py파일이 있으면 안의 내용을 볼 수 있는 기능을 가진 코드를 한번 입력해보았다.

위 캡처본을 통해 출제자가 지정한 형식이 있을 것이라는 걸 확인할 수 있다.
개발자도구(F12)를 이용해서 코드 구성요소를 살펴볼 필요가 있어보인다.

입력칸에 있는 코드를 한번 확인해보았다.

pattern="[A-Za-z0-9.]{5,20}"

이런 패턴이 저장되어있다는 것을 확인할 수 있다.
저런 코드는 바로 "정규표현식"이라고 불린다.
정규표현식 관련 유명한 사이트가 있다. https://regexr.com/ 이 사이트를 통해 어떤 정규표현식을 나타냈는지 확인해보자.

[A-Za-z0-9.]{5,20}

기초) '[]' 안에 하이픈(-)을 사용하면 두 문자 사이의 범위를 의미한다
(참고로, [0-9]나 [a-zA-Z] 등은 무척 자주 사용하는 정규 표현식이라고 한다.)
-> 입력하는 문자의 허용 범위는 'A~Z, a~z, 0~9, .'까지! 그리고, 마지막의 글자 수의 길이의 5-20까지 허용!! 이라는 조건을 달았다는 것으로 해석할 수 있다.
즉, ';' 같은 문자는 사용할 수가 없게끔 '필터링' 되었다는 것을 의미한다.
(참고 사이트 : https://wikidocs.net/4308)

이러한 문제를 해결하기 위해서 개발자 도구에서 pattern 코드를 지워버리고 입력해보았다.

ping 기능을 수행하는 코드이기 때문에 cat명령어를 '"'로 묶어주어 문자처럼 인식하게 한 다음 다음 명령어를 실행 할 수 있게끔 하여 실행시켰다.

위의 사진처럼 입력하면 플래그값이 나온다!

0개의 댓글