内存马检测与排查
内存马检测与排查源码检测在java中,只有被JVM加载后的类才能被调用,或者在需要时通过反射通知JVM加载。所以特征都在内存中,表现形式为被加载的class。需要通过某种方法获取到JVM的运行时内存中已加载的类, Java本身提供了Instrumentation类来实现运行时注入代码并执行,因此产生一个检测思路:注入jar包-> dump已加载class字节码->反编译成java代码-> 源码webshell检测这样检测比较消耗性能,我们可以缩小需要进行源码检测的类的范围,通过如下的筛选条件组合使用筛选类进行检测:①新增的或修改的②没有对应class文件的③xml配置中没注册的④冰蝎等常见工具使用的⑤filterchain中排第一的filter类
还有一些比较弱的特征可以用来辅助检测,比如类名称中包含shell或者为随机名,使用不常见的classloader加载的类等等
另外,有一些工具可以辅助检测内存马,如java-memshell-scanner是通过jsp扫描应用中所有的filter和servlet,然后通过名称、对应的class是否存在来判断是否是内存马
内 ...
Spring内存马
控制器、拦截器、管道上一篇分析了 Servlet API 中提供的能够利用实现内存马的一些点。总结来说:
Servlet:在用户请求路径与处理类映射之处,添加一个指定路径的指定处理类
Filter:在用户处理类之前的,用来对请求进行额外处理提供额外功能的类
Listener:在 Filter 之外的监听进程
那么除了 Servlet API ,其实在常用的框架、组件、中间件的实现中,只要采用了类似的设计思想和设计模式的位置,都可以被发掘出来作为内存马的相关实现
Spring内存马什么是SpringSpring是一个轻量级的Java开源框架,用于配置、管理和维护Bean(组件) 的一种框架,其核心理念就是IoC(Inversion of Control, 控制反转)和 AOP(AspectOrientedProgramming, 面向切面编程)。如今Spring全家桶已是一个庞大的家族
Spring的出现大大简化了JavaEE的开发流程,减少了Java开发时各种繁琐的配置
Spring框架的核心之一就是分层,其由许多大大小小的组件构成,每种组件都实现不同功能
Spri ...
Tomcat内存马
Java内存马简介内存马又名无文件马,指无文件落地的webshell。传统的webshell需要写入文件,难以逃避防篡改监控。为了与传统的防御手段对抗,衍生出一种新型的内存WebShell技术,其核心思想用一句话概括:利用类加载或Agent机制在JavaEE、框架或中间件的API中动态注册一个可访问的后门
目前内存马主要分为以下几种方式:
动态注册 servlet/filter/listener(使用 servlet-api 的具体实现)
动态注册 interceptor/controller(使用框架如 spring/struts2)
动态注册使用职责链设计模式的中间件、框架的实现(例如 Tomcat 的 Pipeline & Valve,Grizzly 的 FilterChain & Filter 等)
使用 java agent 技术写入字节码
JSP先来简单了解一下JSP技术
JSP(Java Server Pages),是Java的一种动态网页技术。在早期Java的开发技术中,Java程序员如果想要向浏览器输出一 ...
FastJson反序列化
FastJson的使用简介FastJson是alibaba的一款开源JSON解析库,可用于将Java对象转换为其JSON表示形式,也可以用于将JSON字符串转换为等效的Java对象。分别通过 toJSONString 和 parseObject/parse 来实现序列化和反序列化
导入依赖
1234567<dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.24</version> </dependency></dependencies>
将类转为 json最常用的方法就是 JSON.toJSONString() ,该方法有若干重载方法,带有不同的参数,其中常用的包括以下几个:
序列化特性:com.alibaba ...
JNDI注入
什么是JNDIJNDI(Java Naming and Directory Interface)即Java命名和目录接口。调用JNDI的API可以定位资源和其他程序对象
Naming Service 命名服务命名服务将名称和对象进行关联,提供通过名称找到对象的操作。其中值得一提的名称服务为LDAP,全称为Lightweight Directory Access Protocol,即轻量级目录访问协议
Bindings: 表示一个名称和对应对象的绑定关系,如在文件系统中文件名绑定到对应的文件,在 DNS 中域名绑定到对应的 IPContext: 上下文,一个上下文中对应着一组名称到对象的绑定关系,可以在指定上下文中查找名称对应的对象。如在文件系统中,一个目录就是一个上下文,可以在该目录中查找文件,其中子目录也可以称为子上下文 (subcontext)References: 在一个实际的名称服务中,有些对象可能无法直接存储在系统内,这时它们便以引用的形式进行存储,可以理解为 C/C++ 中的指针。引用中包含了获取实际对象所需的信息,甚至对象的实际状态。比如文件系统中实际根据名称打开的文件是 ...
红日靶场五
环境搭建
12win7: sun\Administrator dc123.com sun\leo 123.comDC: sun\admin 2020.com
win7打开phpstudy
网站渗透
使用工具检测thinkPHP框架漏洞
上传一句话木马,蚁剑连接
内网渗透信息收集横向移动psexecMS17-010登录远程桌面权限维持DSRM后门
DSRM是Windows域环境中域控制器的安全模式启动选项。每个域控制器都有一个本地管理员账号(也就是DSRM账号)。DSRM的用途是:允许管理员在域环境出现故障或崩溃时还原、修复、重建活动目录数据库,使域环境的运行恢复正常。在域环境创建初期,DSRM的密码需要在安装DC时设置,且很少会被重置。修改DSRM密码最基本的方法是在DC上运行 ntdsutil 命令。在渗透测试中,可以使用DSRM账号对域环境进行持久化操作。每个DC都有本地管理员(administrator)账号和密码(与域管理员账号密码不同)。DSRM账号可以作为每个域控制器的本地管理员用户,通过网络连接域控制器,进而控制域控 ...
红日靶场四
环境搭建创建仅主机模式子网网卡vmnet1
1vmnet1:192.168.183.0(内) vmnet0:192.168.157.0(外)
WEB主机网卡设置
WIN7主机网卡、DC主机网卡同下设置
123web: ubuntu:ubuntu 192.168. 192.168.157.0win7: douser:Dotest123DC: administrator:Test2008
WEB主机(Ubuntu)上启动环境
1sudo docker start ec 17 09 bb da 3d ab ad
网站渗透扫主机
1nmap -sP -T4 192.168.157.0/24
扫描端口开放情况
1nmap -sS -p 1-65535 -A 192.168.157.0
22端口开放SSH服务;2001使用了Struts2中间件;2002使用了Apache Tomcat中间件;2003为Apache、PhpMyadmin、mysql
Struts2访问2001端口,是一个struts2的框架 ...
红日靶场三
本环境为黑盒测试,在不提供虚拟机帐号密码的情况下进行黑盒测试拿到域控里面的flag。涉及敏感信息泄露、暴力破解、脏牛提权、内网穿透、端口转发、以及域渗透等多种知识点
环境搭建
新建一个VMnet2
本次测试为黑盒测试,所以所有主机都为挂起状态,且账号都默认已经登录。已知出网主机为centos主机,将centos出网网卡和kali攻击机网卡都设置为NAT模式,其它网卡都默认vmnet2模式
开启centos,第一次运行,需重新获取桥接模式网卡ip,service network restart。查看ip发现两个网段192.168.48.0/24(出网ip)和192.168.93.0/24(内网ip)
在kali上ping一下出网主机,看能否连通。开启所有主机,靶场搭建完毕
服务器渗透因为是黑盒测试,所以我们现在并不知道出网主机的ip。使用nmap扫描整个网段,探测存活主机
1nmap -sP -T4 192.168.1.0/24
端口扫描
1nmap -sS -p 1-65535 -A 192.168.1.110
dirsearch进行目录扫描,发现 ...
红日靶场二
环境搭建NAT模式修改为111网段(DCHP也要设置)
添加一个仅主机模式网卡,分配10.10.10.0(DCHP也要设置)
PC
DC
WEB
此虚拟机需要恢复快照,登陆时切换用户为: WEB\de1ay 密码: 1qaz@WSX 进入,还得重新设置下上面的网络适配器
登陆后修改密码为admin@123,随后按要求重启计算机,登录mssql用户
用前面登录的账号密码(.\de1ay admin@123)启动360
到这个目录下启动右键startWeblogic以管理员身份启动weblogic
在物理机访问192.168.111.80:7001,完成搭建环节
主机
网卡1(内)
网卡2(外)
kali
\
192.168.111.128
WEB
10.10.10.80
192.168.111.80
PC
10.10.10.201
192.168.111.201
DC
10.10.10.10
\
外网打点
发现了1433端口判断是sql server,另外一个特征端口就是7001端口,判断为weblogic端口 ...
ctfshow——RealWorld渗透赛
ssh连接
cd /tmp,上传fscan开扫
SSH端口转发123ssh -L 主机A端口X:主机C:主机C端口Z username@hostname# 简单理解为:将对A:X的访问转变成对C:Z的访问#ssh -L 23333:172.2.162.5:80 ctfshow@pwn.challenge.ctf.show -p 28112
也可以用termius的Local Forwarding
Dynamic Forwarding
1ssh -D 23333:172.2.155.5 ctfshow@pwn.challenge.ctf.show -p 28112
sql注入
sql注入得到账号密码(我用burp才能看到回显)
12username=1&email='/**/union/**/select/**/password/**/from/**/user%23@q.c#账号:ctfshow 密码:ctfshase????
登录后台文件管理系统
反序列化继续审计前面源码,发现反序列化入口
1234567891011 ...
红日靶场一
环境搭建三台虚拟机:Win7、Win2003、Win2008 ,默认密码均为hongrisec@2009(若win7重启后密码不对,试试Qwer1234)
kali一个nat网卡,模拟外网攻击机 192.168.52.128
win7一个nat网卡,一个VMnet 1网卡,模拟web服务器 192.168.52.143
win2003一个VMnet 1网卡,模拟内网域成员主机 192.168.52.141
win2008一个VMnet 1网卡,模拟内网域控主机 192.168.52.138
拓扑图
设置完毕后VM1、VM2、VM3就在同一内网中了,只有VM1 web服务器能够访问内网,所以要想访问win2008和win2003服务器必须要先拿下win7服务器,用它做跳板进内网进行横向渗透
win server2008、win2k3密码需更改,改为admin@123
外网渗透信息搜集nmap扫端口服务(启用了防火墙,无法ping)
目录扫描
phpmyadminroot/root成功进入后台
12SHOW GLOBAL VARIABLES L ...
ctfshow终极考核
web640-654打开页面 flag_640=ctfshow{060ae7a27d203604baeb125f939570ef}
刷新抓包 ,返回包 flag_641=ctfshow{affac61c787a82cc396585bea8ecf2dc}
发现奇怪路径,访问
存在跳转,抓包得到flag_642
扫目录
robots.txt —> source.txt
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485include 'init.php';function addUser($data,$username,$password){ $ret = array( 'code'=>0, 'messag ...
内网渗透体系建设——Kerberos攻击专题
Kerberos攻击专题Kerberos认证基础在内网渗透中,Kerberos认证协议是基于票据的一种认证方式,简单理解可以分为三部分:用户(Client)、服务器(Server)和KDC(Key Distribution Center, 密钥分发中心)。KDC包含AS(Authentication Server, 认证服务器)和TGS(Ticket Granting Server, 票据授权服务器)
Kerberos基础认证流程
①AS_REQ。Client向AS发起AS_REQ,请求内容为通过Client的哈希加密的时间戳、ClientID等内容②AS_REP。AS使用Client密码哈希值进行解密,如果解密正确,就返回用krbtgt的NTLM-hash加密的TGT(Ticket Granting Ticket, 票据授权凭证)票据。TGT包含PAC(Privilege Attribute Certificate, 特权属证书),PAC包含Client的相关权限信息,如SID及所在的组。简单理解,PAC就是用于验证用户权限,只有KDC能制作和查看PAC③TGS_REQ。Clien ...
内网渗透体系建设——权限维持
权限维持当获取到服务器的控制权后,为了防止服务器管理员发现和修补漏洞而导致对服务器权限的丢失,测试人员往往需要采取一些手段来实现对目标服务器的持久化访问
权限持久化(Persistence, 权限维持)技术就是包括任何可以被测试人员用来在系统重启、更改用户凭据或其他可能造成访问中断的情况发生时保持对系统的访问的技术,如创建系统服务、利用计划任务、滥用系统启动项或注册表、映像劫持、替换或劫持合法代码等
常见系统后门技术创建影子账户影子账户,就是隐藏的账户,无论通过”计算机管理”还是命令行查询都无法看到,只能在注册表中找到其信息。通过创建具有管理员权限的影子账户,在目标主机上实现权限维持,不过需要拥有管理员级别的权限通过创建影子账户,测试人员可以随时随地通过远程桌面或其他方法登录目标系统,并执行管理员权限的操作
系统服务后门对于启动类型为“自动”的系统服务,测试人员可以将服务运行的二进制文件路径设置为后门程序或其他攻击载荷,当系统或服务重启时,可以重新获取对目标主机的控制权。不过需要拥有目标主机的管理员权限
计划任务后门通过创建计划任务让目标主机在特定的时间点或规定的周期内重复运行测试 ...
内网渗透体系建设——横向移动
横向移动本章所有关于横向移动的攻击技术都以如图所示的网络拓扑进行测试
Kali Linux为测试人员的主机,其对测试人员是可控的,也被称为”可控主机”或”可控服务器”。Initial Victim为测试人员最初攻陷的机器,也被称为”跳板机” “所控主机”或”当前所控主机”。内网中的其他三台机器分别是本次实践的横向移动目标,需要从Initial Victim迁移到这三台目标机器。它们也被称为”远程主机”或”内网其他主机”
横向移动中的文件传输测试人员往往需要预先制订文件传输方案,以便在后续操作过程中向攻击目标部署攻击载荷或其他文件
通过网络共享
Windows系统中的网络共享功能可以实现局域网之间的文件共享。通过提供有效的用户凭据,用户可以很轻松地将文件从一台机器传输到另一台机器。执行”net share”命令,获得Windows系统默认开启的网络共享,其中C$为C盘共享,ADMIN$为系统目录共享,还有一个是IPC$共享。IPC (Internet Process Connection) 是共享”命名管道”的资源,为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接 ...
内网渗透体系建设——权限提升
权限提升系统内核漏洞提权查找系统潜在漏洞
手动寻找可用漏洞
1systeminfo
执行命令后可以根据系统版本和系统的补丁程序,将两者结合通过相关辅助网站找到没打补丁的可能存在的系统漏洞,如
MS18-8129与KB4131188对应、CVE-2020-0787与KB4540673对应
借助WES-NG查找可用漏洞
Windows Exploit Suggester(WEG)项目于2014年发布, 项目根据操作系统版本结合systeminfo输出的信息, 结合Microsoft安全公告数据Excel文件找到可能存在且未打补丁的系统漏洞, 该工具在Windows XP/Vista上运行良好, 但是工具自2017第一季度之后就不再更新(意味着只能匹配2017第一季度之前的系统漏洞)
Windows Exploit Suggester-Next generation(WEG-NG)项目就是基于WEG创建的新一代系统提权辅助工具, 项目当前仍在维护当中
123python3 wes.py --update #更新漏洞数据库tyaepython3 wes.py sysinfo.tx ...
内网渗透体系建设——端口转发与代理
端口转发与内网代理端口转发与代理端口转发
端口转发(Port Forwarding)是网络地址转换(NAT)的一种应用。通过端口转发,一个网络端口上收到的数据可以被转发给另一个网络端口。转发的端口可以是本机的端口,也可以是其他主机的端口。在现实环境中,内网部署的各种防火墙和入侵检测设备会检查敏感端口上的连接情况,如果发现连接存在异样就会立即阻断通信。通过端口转发,将这个被检测的敏感端口的数据转发到防火墙允许的端口上,建立起一个通信隧道,可以绕过防火墙的检测,并与指定端口进行通信
端口映射(Port Mapping)也是网络地址转换(NAT)的一种应用,用于把公网的地址翻译成私有地址。端口映射可以将外网主机收到的请求映射到内网主机上,使得没有公网P地址的内网主机能够对外提供相应的服务
SOCKS代理
SOCKS全称为Protocol For Sessions Traversal Across Firewall Securely,是一种代理协议,标准端口为1080。SOCKS代理有SOCKS4和SOCKS5两个版本,SOCKS4只支持TCP,SOCKS5在SOCKS4的基础上进一步扩 ...
内网渗透体系建设——内网信息收集
内网信息收集本机基础信息收集查看当前用户以及当前用户所处的用户组,所拥有的特权等信息,综合判断是否需要提权
1whoami /all
查看当前主机的网络配置情况,包括主机的IP地址、主机名、各网络适配器的信息等,判断当前主机所处的内网网段
1ipconfig /all
图中当前主机有两个以太网适配器Ethernet0和Ethernet1,分别连通10.10.10.0/24和192.168.2.0/24这两个网段。在后面的横向渗透过程中,测试人员可以通过扫描这两个网段来探测内网中存活的主机
还有一个值得注意的就是Ethernet0中DNS服务器的IP地址。在域环境中,DNS服务器的IP地址通常为域控制器地址
查看当前主机的路由表
1route print
“网络目标”都是直接可以访问到的,里面包含的重要ip段在后续的横向渗透中可以尝试探测其中的存活主机
查看操作系统信息
123systeminfosysteminfo | findstr /B /C:"OS name" /C:"OS Version" #查看操作 ...
内网渗透体系建设——基础知识
内网渗透建设基础知识内网工作环境
工作组 (work group)
组(Group)是用户账号的集合。通过向一组用户分配权限,就可以不必向每个用户分别分配权限了。按照用途分类,域组分为通讯组和安全组
对于通讯组,我们接触的比较多的就是邮件组,将若干个人划分到一个通讯组,给这个通讯组发件,组内用户都能收到
安全组则是用户权限的集合。举个例子,管理员在日常的网络管理中,不必向每个单个用户账号都设置单独的访问权限,只需要创建一个组,对这个组配置访问权限,然后将需要配置该访问权限的用户账号拉进这个组中即可。并且如果管理员在网络运维中需要一些特殊的管理权限时,只需将自己的运维账号拉进该组中就行了
工作组适用于网络中计算机不多、资产规模较小、对安全管理控制要求不严格的情况。当组织中的网络规模越来越大,需要统一的管理和集中的身份认证,并且能够为用户提供更加方便的网络资源搜索和使用方式是,就要放弃工作组而使用域
域
域与工作组概念类似,但是域的计算机集合更大,适用于计算机数量众多的大型网络环境
域用户需要访问域中资源时,必须通过域控制器集中进行身份验证获取相应访问权限
域管理员用户是域中最 ...
XXE外部实体注入
介绍 XXE 之前,先来说一下普通的 XML 注入,这个的利用面比较狭窄,如果有的话应该也是逻辑漏洞
XML基础XML 指可扩展标记语言(Extensible Markup Language),是一种用于标记电子文件使其具有结构性的标记语言,被设计用来传输和存储数据。XML文档结构包括XML声明、DTD文档类型定义(可选)、文档元素。目前,XML文件作为配置文件(Spring、Struts2等)、文档结构说明文件(PDF、RSS等)、图片格式文件(SVG header)应用比较广泛
XML 的语法规范由 DTD (Document Type Definition)来进行控制
123456789101112131415<?xml version="1.0" encoding="ISO-8859-1"> //xml声明<!DOCTYPE note [<!ELEMENT note (to, from, heading, body)><!ELEMENT to (#PCDATA)> ...