| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> PHP知识库 -> [极客大挑战 2019]RCE ME -> 正文阅读 |
|
[PHP知识库][极客大挑战 2019]RCE ME |
打开环境,得到源码:
分析代码,首先要GET传值code,否则就高亮显示源码;传值后判断长度,不能超过40,否则结束;传的值也不能为字母和数字,否则也结束;最后执行传递的语句。那么很明显,这个题要构造命令执行! 但这题关键还在于要传递不是字母和数字的命令,长度还不能超过40,咋办呢? ?第一种方法是利用url编码取反绕过:取反的符号是 运行php代码:
就能得到:
?我们就可以直接传入:
成功绕过!!!? 第二种用异或的方法,异或的规则是:
?如果是两个字符进行异或运算,就先看字符对应的ASCII码值,再将ASCII码转为二进制,然后逐位经行异或运算,例如: 字符:?? ? ? ?ASCII码:63 二进制: 00?11 1111? 字符:~? ? ? ?ASCII码:126 二进制: 0111 1110? 两字符的二进制逐位经行异或运算得到二进制: 0100 0001 转为十进制就是:65,也就是字符A,也就是说 ? 和 ~ 异或运算得到 A 。 那么此题他只过滤了字母和数字,ASCII码中还有很多 经过一次get传参会进行一次URL解码,所以我们可以将字符先进行url编码再进行异或得到我们想要的字符:
?所以我们传入:
成功绕过!!? 那我们如何知道哪些字符异或运算后能得到我们想要的字符? 我们可以用下面的脚本:
?运行后得到:
就能根据自己的需要进行组合! 当然还有一些绕过的方法,有时间后面自己了解! 执行之后发现过滤了大部分命令执行的函数,下面考虑如何绕过 ?我们直接用取反的方法构造一个木马:
得到:? 传入:?code=~%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%9E%A2%D6; 测试了没成功!! 用异或传入:
也没成功!!! 这里其实要像这样构造:
得到:
说明:开始我想的是直接传一个$_POST[s]的取反进去,加上代码最后的eval,这不就是一个木马吗,试了半天一直不行,后面发现是eval只能解析一次,意思是题目中是@eval($code),当你传入$code的时候,eval会进行变量的替换,相当于已经解析了一次,自己再以post传进去的s不能被解析。 然后我还想试一试传eval($_POST[s]),也是不行的,因为eval不是可变函数,不能当作字符串交给php让他当作函数名: ?传进去的payload为/?code=(~%9A%89%9E%93)(~%D7%DB%A0%AF%B0%AC%AB%A4%8C%A2%D6); 也就是eval($_POST[s]),之所以要用两个括号,而不是一次性取反传入一个括号的东西是因为你传入的是一个函数,eval运行的时候会根据函数名先检测是否存在这个函数,而第一个括号的内容也就是函数名,第二个括号的内容应该是传入的函数内应该传的参数。所以它会先检测有没有eval这个函数,然后继续进行,但是eval又不能做可变函数,所以这样也是错误的。 assert($_POST[s])为啥也不行呢? 网上找了个说法: ?所以最后传入的只能是上面最后那样构造!!!! 接着连接蚁剑: ?看到有个flag和readflag,但是flag无法直接读取!需要执行readflag才能得到flag,当时因为限制了很多函数,这个shell基本是废的,一个不能执行命令的shell叫什么shell,所以这里需要绕过这个disable_functions执行命令。 这里可以用到蚁剑的一个能绕过disable_functions的插件,点击蚁剑中的AntSword,然后点击插件市场: ?? ?但是鉴于可能加载不出来,那就在本地安装吧!下载地址: 链接:https://pan.baidu.com/s/1cYXwsfjMe15gdI0KR4W_BQ? 下载之后,将其解压在antSword\antData\plugins路径下,再回插件市场就能在本地仓库看见了: ?回到开始选择: ?选择PHP_GC_UAF模式,点击开始会自动弹出shell,用命令回到根目录,执行:./readflag 得到答案: ? |
|
PHP知识库 最新文章 |
Laravel 下实现 Google 2fa 验证 |
UUCTF WP |
DASCTF10月 web |
XAMPP任意命令执行提升权限漏洞(CVE-2020- |
[GYCTF2020]Easyphp |
iwebsec靶场 代码执行关卡通关笔记 |
多个线程同步执行,多个线程依次执行,多个 |
php 没事记录下常用方法 (TP5.1) |
php之jwt |
2021-09-18 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/29 18:44:09- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |