Normaltic 모의해킹 취업반 스터디 8기 - 15주차 과제(CTF Write-up) - 리빌딩 버전

containerxox·2025년 7월 20일
post-thumbnail

✅ Web Shell 3

🔸회원가입 후 로그인

‣ id: testUser3
‣ pw: testUser3



🔸마이페이지의 테마 설정 기능 분석

해커테마에서 모던테마로 변경해보자.

➡️ theme쿠키에서 hacker.php가 그대로 실행된다는 것을 볼 수 있다.
➡️ 마이페이지에서 테마를 선택하면, 서버가 해당 파일을 include 해준다.

theme 값을 조작해서 PHP 파일을 include하거나 실행할 수 있다면, 웹쉘 동작 가능성이 有



theme쿠키에 ../../../../etc/passwd 를 넣어보면
/etc/passwd 파일이 서버에 include되어 응답에 그대로 노출된다.



🔸File Include 취약점에 사용될 PHP웹쉘 파일을 게시판에 업로드

게시판에서 lizard.jpg 파일 업로드하려고 한다.
인터셉트 기능을 켜서 파일 확장자는 그대로 유지하며,
내부에 PHP 웹쉘 코드를 삽입한다.


🧑‍🏫 system()이 아닌 shell_exec()를 쓴 이유
?cmd와 같은 GET파라미터를 전달할 수 없는 파일 인클루드 상황에서는,
외부 입력을 필요로 하는 system($_GET['cmd'])같은 코드는 제대로 작동하지 않는다.

따라서, shell_exec()함수를 사용하는 것이 더 적절하다.

shell_exec()는 명령어의 실행결과를 문자열로 반환해 변수로 저장하거나 조작할 수 있어,
인클루드된 코드 내부에서 명령어를 직접 지정해 실행하고 결과를 출력하는데 유리하기 때문이다.



해당 게시글을 클릭하면 응답 부분에 파일업로드 경로가 주석처리되어 그대로 노출되어 있다.

theme 쿠키에 웹쉘 경로를 삽입하면, 서버에서 바로 웹쉘 코드가 실행된다.

➡️ 웹쉘 코드가 실행됨 !

➡️ 입력칸에 find - name "flag*"/flag.txt 경로에 해당 파일이 위치함 !

➡️ 입력칸에 cat /flag.txt → 플래그 획득 !




✅ Get Flag File

🔸회원가입 후 로그인

‣ id: testUser4
‣ pw: testUser4



lizard.jpg 이미지파일 업로드

해당 게시글을 클릭하고 응답을 보면, URL 인코딩된 파일 업로드 경로를 볼 수 있다.

filePath 파라미터에 /etc/passwd와 같은 시스템 파일 경로를 입력하면,
필터링 없이 해당 파일이 그대로 다운로드되어 정보 노출 위험이 발생한다.

이런 방식을 이용하여 filePath파라미터에/var/www/html/index.php입력하여
index.php 소스코드를 다운로드 할 수 있다.
index.php 소스코드를 보면, /flag.txt를 확인해보라는 문구가 주석처리 되어 있음을 확인할 수 있다.


위와 동일한 방식을 이용하여, /flag.txt 텍스트 파일을 다운로드 할 수 있다.
➡️ flag 획득 !




✅ Get Flag File 2

🔸회원가입 후 로그인

‣ id: testUser5
‣ pw: testUser5



lizard.jpg 이미지파일 업로드

해당 게시글을 클릭하고 응답을 보면, URL 인코딩된 파일 업로드 경로를 볼 수 있다.

../../etc/passwd의 파일을 다운로드 하려고 시도했지만,
파일이 존재하지 않거나, 접근 권한인 없습니다. 라는 응답이 돌아옴.

➡️ 일단, ../ 을 필터링하고 있는지 확인해보자 !
➡️ 필터링을 우회하기 위해 ../..../로 작성 !
우회방법대로 작성하니 /etc/passwd파일을 다운로드 할 수 있었다.
../을 필터링한다는 것을 파악함 !

전 문제에서 index.phpflag.txt경로가 있었으니, index.php를 다운로드 시도 ~
이동하는 경로를 단계적으로 줄여가며 시도한 결과, /index.php에서 다운로드가 성공했다.


....//....//....//flag.txt의 경로에 있는 flag.txt파일을 다운로드 하니까 flag를 획득할 수 있었다 !

0개의 댓글