无字母数字webshell之命令执行

php 复制代码
<?php
if(isset($_GET['code'])){
	$code = $_GET['code'];
	if(strlen($code) > 35){
		die("Long.");
	}
	if(preg_match("/[A-Za-z0-9_$]+/",$code)){
		die("NO.");
	}
	eval($code);
}else{
	highlight_file(__FILE__);
}

这个代码如果要getshell,怎样利用?

这道题的限制:

1.webshell长度不超过35位

2.除了不包含字母数字,还不能包含$和_

1.对于php7环境的解题方法。

这个环境的php版本是7以上,对于7以上的php可以使用('phpinfo')()来执行命令。

显然,我们直接这么写会被检测到英文字母,所以不行。

但我们可以构造一个可以生成phpinfo这个字符串的php表达式即可。这里的**~符号是取反**,我们先对phpinfo进行url code编码的取反,然后将这个值放入url地址栏中,这是进行访问,url就会对这个编码进行本身的取反,然后我们加了~符号,就会再次取反一次,所以我们传进去的还是%8F%97%8F%96%91%99%90这个值,就可以拿到webshell。

这里或许就有人疑惑了,我们对phpinfo进行取反了后,是含有数字的啊,但题目会过滤数字啊,怎么就成功了呢?

对于这来所,我进行了debug查看,当程序进行到过滤函数这,我们传进来的code值是这个程序识别不了的,所以就成功绕过了这个过滤函数。

2.php在7版本以下的解决方法

7版本以上的取反操作就不行了,因为7以下的版本不支持(phpinfo)();这种执行命令的操作。

这里我们写了一个文件上传的html页面,用于上传文件.

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="less8.php" method="post" enctype="multipart/form-data">
        <input type="file" name="file" id="">
        <input type="submit" value="submit">
    </form>
</body>
</html>

在这里,我也是去当场下载了php5.6的版本,并调试了xdebug;先下载php5.6,以及对应的fpm和dev(phpize)等,然后切换到5.6,并去/etc/alternatives/,下查看了php,phpize和php-config是否切换到5.6上,然后就是把xdebug调试好了

在5.6版本中,我们使用上传文件的方式,在他的临时文件目录下生成我们的文件,然后执行;但现在的问题是上传到临时文件的名字是会被服务器随机命名(英文名称)的,我们怎么在文件被清除之前去匹配我们上传的文件并执行。对于执行操作,我们的权限肯定是不够的,用sh去执行的话因为有过滤,并不能执行,所以这我们使用. (点加空格)的方式去执行。

这里可以使用linux的glob通配符来匹配我们的目标临时文件,临时文件是9位字符,且他的最后一位是大写,所以我们就可以设计我们的匹配规则:/???/????????@-\[这样

1.开启文件上传的路径。

cpp 复制代码
root@ubuntu3:/tmp# vim /etc/php/5.6/fpm/php.ini 

2.进行包的上传,这里先不点submit,去浏览器开启代理,去抓包

这个文件的内容是一个脚本

这个是文件上传(demo.html)抓的包

这个是php页面(less8.php)抓的包

3.将他们放在burpsuite的重放模块,进行参数的修改。

对于在重放模块中的web.php抓取的包进行修改

第一,将第一行的提交动作从GET改为POST;

第二,传参?code=?><?=`.+/???/????????@-\[`;?>;

第三,将demo.html包里面的Content-Type和下面画圈的部分代码拷贝到web.php的包里面

最后进行发送,可见右边的回应包里的状态是200ok

相关推荐
IT_陈寒33 分钟前
Vite的热更新突然不香了,排查三小时差点砸键盘
前端·人工智能·后端
子兮曰1 小时前
Agency-Agents 深度解析:400+ AI 专家的"梦之队"如何重塑开发工作流
前端·后端·vibecoding
竹林8182 小时前
用 The Graph 查询链上数据实战:从手搓 RPC 到 Subgraph,我的 NFT 项目数据加载快了 10 倍
前端·javascript
karry_k2 小时前
MyBatis批量insert-select踩坑:useGeneratedKeys=true 可能让PostgreSQL返回大量插入结果
java·后端
妙码生花2 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(十九):点选验证码代码逐行目检
前端·后端·go
karry_k2 小时前
PostgreSQL 在 MyBatis 中执行正常 SQL 失效:一次 DELETE USING 踩坑记录
java·后端
Awu12273 小时前
⚡从零开发 Agent CLI(五)实现一个可治理、可扩展的工具系统
前端·人工智能·claude
咪库咪库咪3 小时前
Vue3-生命周期
前端
莪_幻尘4 小时前
你的 AI Skill 越多越蠢?Token 上下文爆炸的求生指南
前端·ai编程
lichenyang4534 小时前
从 has.echo 到异步 API 注册表:一次 ASCF API 回调不触发的排查复盘
前端