Web Hacking/DreamHack

드림핵 phpmyRedis 문제

프레딕 2023. 11. 24. 22:11
728x90

이 문제를 풀기 위해 알아야 할 점은 다음과 같다.

- redis는 명령어를 이용해 메모리 데이터를 저장하는 파일의 저장 주기를 지정 가능하다.

- 저장되는 파일의 경로와 이름, 그리고 데이터도 함꼐 설정 가능하다.

- eval 명령어를 통해 lua 스크립트를 실행 시킬 수 있다.

 

먼저 데이터 저장이 되는 파일을 알기 위해 config.php에서 dir을 get해보면

{"dir":"\/var\/www\/html"}

임을 알 수 있다. html 경로에 있으니 냅두고 dbfilename을 redis.php로 set해준다.

그 후 데이터 저장 주기도 설정해줘야 하는데 계속 저장되는게 좋으니 save 60 0 으로 set해준다. (60초 이내에 0개 이상 데이터가 변경되면 저장한다.)

그 후 redis.php에 셸 스크립트 삽입을 위해 lua 스크립트를 실행시킨다.

(아래 eval을 이용한 lua스크립트 참고)

https://docs.w3cub.com/redis/eval

 

Eval - Redis - W3cubDocs

EVAL EVAL script numkeys key [key ...] arg [arg ...] Introduction to EVAL EVAL and EVALSHA are used to evaluate scripts using the Lua interpreter built into Redis starting from version 2.6.0. The first argument of EVAL is a Lua 5.1 script. The script does

docs.w3cub.com

 

이렇게 하면 redis.php에 셸 스크립트가 삽입이 되었다.

다음으론 flag를 찾아야 하는데 dockerfile을 보면 /flag에 있다고 되어있다.

http://host3.dreamhack.games:포트번호/redis.php?cmd=/flag 이렇게 주소를 치고 들어가면 flag를 획득 할 수 있다.

728x90
반응형