无字母数字webshell之命令执行

源码

题目限制:

  1. webshell长度不超过35位
  2. 除了不包含字母数字,还不能包含$_

这里使用php5来解决

可以围绕以下两点展开:

  1. shell下可以利用.来执行任意脚本
  2. Linux文件名支持用glob通配符代替

.或者叫period,它的作用和source一样,就是用当前的shell执行一个文件中的命令。比如,当前运行的shell是bash,则. file的意思就是用bash执行file文件中的命令

并且用. file执行文件,是不需要file有x权限的

我们可以发送一个上传文件的POST包,此时PHP会将我们上传的文件保存在临时文件夹下,默认的文件名是/tmp/phpXXXXXX

由于执行该命令也需要用到字母,那此时可以用到glob通配符

1.*可以代替0个及以上任意字符

2.?可以代表1个任意字符

这是由于能够匹配上/???/?????????这个通配符的文件有很多,如果先匹配到别的文件则会出现错误,导致整个流程停止,根本不会执行到我们上传的文件。

通过ASCII码表可得知,大写字母位于@[之间

先创建一个文件(文件名要对上),测试

构造POC,执行任意命令

php生成临时文件名是随机的,最后一个字符不一定是大写字母

复现漏洞还需要用于存放shell命令的文件以及用于提交表单的html

这里把提交的表单数据复制过来

需要将request中的get改为post,因为get提交没有临时文件。这里post作为请求体,而code作为get传参,执行完后才会删除临时文件

code为

php 复制代码
`?><?=`. +/???/????????[@-[]`;?>`

get传参需要url编码

第一个?>为闭合,+为空格编码

通过eval()执行反引号从而执行系统命令

在burpsuite中可以不转码

注意:这里的POST与GET参数是并行的

想要查看临时文件是否生成,可以用sleep()函数

相关推荐
合天网安实验室1 天前
记录一个免杀的php webshell demo
渗透测试·php·webshell·免杀
AnalogElectronic1 天前
linux 测试网络和端口是否连通的命令详解
linux·网络·php
Rust研习社1 天前
使用 Axum 构建高性能异步 Web 服务
开发语言·前端·网络·后端·http·rust
灰子学技术1 天前
Envoy HTTP 流量层面的 Metric 指标分析
网络·网络协议·http
上海云盾-小余1 天前
海外恶意 UDP 攻击溯源:分层封禁策略与业务兼容平衡方案
网络·网络协议·udp
智慧光迅AINOPOL1 天前
校园全光网建设指南:从架构到调优,打造稳定高体验校园网络
网络·全光网解决方案·全光网·酒店全光解决方案·泛住宿全光网解决方案
被摘下的星星1 天前
Internet 的域名系统:从“名字”到“地址”的翻译官
网络
跨境数据猎手1 天前
跨境独立站系统技术拆解(附带源码)
服务器·前端·php
淘矿人1 天前
从0到1:用Claude启动你的第一个项目
开发语言·人工智能·git·python·github·php·pygame
Diros1g1 天前
如何通过普通网线给另一个设备供网
网络·网络协议