Skip to content
blogs of mekrina
Go back

字符生成

Updated:
Edit page

进制转换

hex2bin将十六进制转化为字符,比如hex2bin(61)生成a,这里61被当作字符串”61”处理 配合dec2hex把十进制转换成16进制,可以实现数字生成任意字符,如$_GET

base_convert方便生成数字字母,如getallheaders

$dec = base_convert("zzzzzzzzzz", 36, 10);
echo base_convert($dec, 10, 36);

36进制数可以包括0-9a-z,所以理论上通过36->10再10->36可以用数字表示所有小写字母,但实际上只能表示10几位字母(取决于php版本),可能是整数过大溢出? 如果要表示的字母不包含z,最大到y,那么可以用35,因为这个进制数越小,转换后也越小,越不容易溢出,所以可以表达的字符串长一点。

八进制

需要能用双引号和转义符

<?php

function str2oct($str){
    $res = "";
    for($i=0;$i<strlen($str);$i++){
        $chr = $str[$i];
        $res.="\\".decoct(hexdec(bin2hex($chr)));
    }
    return $res;
}

$res = '"';
$res .= str2oct("system");
$res .= '"("';
$res .= str2oct("calc");
$res .= '");'; # "\163\171\163\164\145\155"("\143\141\154\143"); system(calc)

echo $res;
eval($res);

异或等数学运算


Edit page