主机探测
ip为192.168.31.26
端口扫描
访问80端口,有一张图片,将图片下载下来,并无可用信息
信息收集->ftp登录
查看页面源码,得知作者名字
目录遍历的时候扫到了/robots.txt
,有的目录可以访问,有的则无结果。可以访问的都是展示了一张图片
|
|
下载图片查看信息,在/dont_bother
下的图片发现信息
|
|
尝试访问y0ur_self
目录,发现有个txt文件,猜测是某处的密码
这个txt文件看上去是经过了base64的编码
之后可能会用到这个base64编码了的密码本,或者是编码前的密码,所以先准备好解码了的密码本
|
|
再来尝试登录ftp,用作者的名字作为账密,发现可以成功登录。有一个zip文件,下载下来
爆破解压密码->ssh私钥
要解压这个文件需要密码,于是想到前面的密码本了
爆破解压密码
|
|
得出密码
解压之后发现文件是ssh私钥,这下可以尝试用私钥登录了
shellshock利用->getshell
经过尝试,发现不能登录,看了别人的wp才知道,这里需要通过shellshock进行利用
payload:
payload中的() { :; };
部分创建了一个名为:
的函数,然后在函数定义后立即执行/bin/bash
,这将启动一个新的Bash shell
[!note]
-t
选项用于强制分配一个伪终端,这样可以在远程主机上执行交互式命令。这对于需要在远程主机上运行需要交互的命令非常有用,因为它模拟了一个本地终端的行为,使得远程命令可以像本地命令一样进行交互。
缓冲区溢出漏洞->提权
查找SUID权限文件,可以看到有root可疑文件,运行不同的root文件
依次查看,分别是执行重启的、打印输入内容的、输出固定内容的
exp:
|
|
不太懂二进制漏洞,这个exp的意思是:在这个命令中,./r00t
是一个可执行文件,后面跟着的是一个参数,其中包含了一段用 Python 生成的恶意代码。这段代码的作用是利用栈溢出漏洞,通过向程序提供过长的输入来覆盖程序的返回地址,从而控制程序的执行流程。
具体来说,这段代码首先输入了 268 个"A"字符,然后是一个特定的地址 \x80\xfb\xff\xbf
,接着是 16 个空指令 \x90
(通常用于填充),最后是一段 shellcode,用于执行特定的操作,比如在这里是执行一个 shell。
Got flag
关于shellshock
shellshock是bash中的一个漏洞,攻击者可以使用特制的环境变量来运行任意命令。
漏洞影响版本:bash version <= 4.3
在bash中可以自定义shell变量,但是这个变量只属于当前shell,即使是该进程fork的子进程,也没办法访问(子进程只会继承父进程的环境变量,而不会继承自定义变量)。
如果想让子进程继续使用父进程的自定义变量,就需要把自定义变量转换成环境变量,这就需要命令export
了。
在bash中还可以定义shell函数并将其导出为环境函数,参数-f
。
|
|
除了这种方法,还有一种,通过环境变量来定义函数。当某个环境变量的值以字符串() {
的格式作为开头,那么该变量就会被当前 Bash 当作一个导出函数,该函数仅会在当前 Bash 的子进程中生效。
可以看到,父进程将其作为变量,而子进程认为它是函数。
总结
1、靶机难度up,收获新知识点
2、前期都是需要比较充分的信息收集,包括ftp登录、zip密码爆破,都离不开信息收集
3、shellshock漏洞是才了解到的,比较好理解,以后遇见先尝试一手,看bash版本是不是<=4.3
4、提权部分难度较大,主要是对二进制漏洞不熟悉