Attack - Readflag(100 pts)
readFlag.tar의 압축을 풀어보면 dump.py와 send.sh가 있는 것을 확인 할 수 있다. 각각의 소스는 아래와 같다.
from pickle import dumps print dumps([1, 2, 3])+'#' |
dump.py
#!/bin/bash |
send.sh
이는 dump.py에서 pickle 모듈을 이용하여 pickling을 한 후 55402 포트로 해당 데이터를 보내는 것을 확인 할 수 있다. 여기에서 dump.py 대신에 pickle 취약점을 이용한 공격코드를 작성하여 pickling 한 후 해당 서버로 데이터를 전송한다면 RCE가 가능하다.
#coding: utf-8 |
payload.py
위와 같이 페이로드를 작성하여 날려주면 __reduce__메소드에서 튜플의 형태로 함수 또한 리턴하며 원격 서버에서 RCE가 발생한다. 이 때, 의도적으로 오류를 발생시킬 경우 서버의 파일명인 “test.py”를 알 수 있으며, 이를 open하여 파일의 내용을 읽어올 수 있다.
굳이 이렇게 사용하지 않고 __file__이나 sys.argv를 사용하여 실행되는 파일명을 알아낼수도 있다.
test.py 안의 내용을 살펴보면 flag를 얻어낼 수 있다.
FLAG : SCTF{3a5y_e4zy_p1ckl1ng}
'CTF > Samsung CTF 2017' 카테고리의 다른 글
[SCTF 2017] Attack - Letter to me(300 pts) (0) | 2017.07.24 |
---|---|
[SCTF 2017] Coding - Buildingblocks(250 pts) (0) | 2017.07.24 |
[SCTF 2017] Reversing - Easyhaskell(200 pts) (0) | 2017.07.24 |
[SCTF 2017] Defense - Dfa(100 pts) (0) | 2017.07.24 |