[CISCN 2019 初赛]Love Math

本文介绍了一次PHP代码审计过程,利用特殊技巧绕过黑名单及白名单限制,最终实现读取flag的目标。文中详细展示了如何利用base_convert和dechex等函数进行编码绕过。

[CISCN 2019 初赛]Love Math

刷题刷题,一上来就是代码审计在这里插入图片描述看看,代码讲的意思是传入一个参数c长度不能大于等于80,然后有黑名单字符过滤,有白名单函数过滤,随便传一下他的例子在这里插入图片描述en…它能够计算执行,那我们要读取flag就应该可以,补充一个概念:php中可以把函数名通过字符串的方式传递给一个变量,然后通过此变量动态调用函数比如下面的代码会执行 system(‘ls’);

$a='system';
$a('ls');

我们构造$_GET[]然后再传入想用的exp,但是一些符号的过滤使得我们的构造并不容易,首先中括号下划线禁用,那我们就只能编码绕过了,通过白名单我们看到了一些可能帮助我们编码绕过的函数 base_convert ,dechex,第一个可以进行进制之间的转换,比如 base_convert("1001"2,10)是将二进制的1001转换为10进制,第二个函数是将10进制转成16进制。中括号被禁用我们可以用花括号代替{},要构造的字符串为 _GET,php中有将16进制转成字符串的函数hex2bin,那hex2bin又要使用base_convert函数,在这里插入图片描述所以 base_convert(37907361743,10,36)=hex2bin,要得到_GET所以就得用到另外一个函数dechex将_GET的10进制转为16进制再通过hex2bin转换为字符串在这里插入图片描述在这里插入图片描述ok,成功得到_GET,下一步就是传参了不过要记住传入的函数和变量只能是白名单里面的所以payload为:

?c=$pi=base_convert(37907361743,10,36)(dechex(1598506324));$$pi{pi}($$pi{abs})&pi=system&abs=cat /flag

在这里插入图片描述

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值