笔记(一)"/>
CTF训练笔记(一)
CTF训练笔记系列 - 快速导航
目录
- 一、环境搭建
- 1.攻击机
- 2.靶机
- 3.网络配置
- 二、信息收集
- 三、信息探测
- 1.挖掘开放服务信息
- 2.寻找隐藏起来的后台文件
- 3.获取服务器登录密码
- 4.提权与获取flag
- 四、总结
一、环境搭建
1.攻击机
VMware环境下的kali linux虚拟机(本次渗透测试使用kali-linux-2020.4-vmware-amd64版本,初始用户名、密码均为:kali)
2.靶机
VirtualBox环境下的SSH-私钥泄露.ova虚拟机(链接: 提取码: c8f4)
3.网络配置
攻击机与靶机桥接于同一网卡上,便于查找靶机ip地址
①VMware(攻击机)网络配置:
②VirtualBox(靶机)网络配置:
二、信息收集
获取靶机ip:
在攻击机的终端中使用“ifconfig”指令获取攻击机的网络地址(此时靶机也在同一网段,因为刚才桥接在了同一网卡上),
ifconfig
利用得到的ip地址与子网掩码可构造网段:192.168.2.0/24作为参数,使用netdiscover工具搜索同一网段内所有主机(若主机较多则等待时间可能较长),
netdiscover -r 192.168.2.0/24
结果如下,其中"PCS Systemtechnik GmbH"一行即为靶机信息,靶机ip为192.168.2.192。
三、信息探测
1.挖掘开放服务信息
使用nmap工具扫描靶机所有开放端口,发现特殊端口31337开放并提供http服务(警觉.jpg)
nmap -sV 192.168.2.192
2.寻找隐藏起来的后台文件
直接访问192.168.2.192:31337无有效信息,源码也无有效信息。故使用dirb工具探测此服务的隐藏文件。
dirb http://192.168.2.192:31337/
发现服务器后台有5个文件,进一步查看发现前三个没什么有价值的信息。
但发现第5个文件robots.txt中规定禁止爬虫访问三个文件,其中两个文件已查看过,但taxes文件首次出现,遂查看该文件(访问http://192.168.2.192:31337/taxes/),
得到第一个flag。
发现第4个文件“.ssh”中可能包含私钥(id_rsa)、认证关键字(authorized_keys)、公钥(id_rsa.pub)三个文件,分别尝试访问:
http://192.168.2.192:31337/.ssh/id_rsa
http://192.168.2.192:31337/.ssh/authorized_keys
并下载文件。
3.获取服务器登录密码
①
打开authorized_keys文件,发现一个用户simon,
于是尝试使用私钥文件直接访问ssh,在id_rsa所在目录中执行ssh指令:
ssh -i id_rsa simon@192.168.2.192
被要求输入密码,可目前不知道密码,卡住,于是另开一个终端想办法搞到密码。
②
想到使用ssh2john工具将id_rsa秘钥信息转换为John the Ripper工具可以识别的信息并保存在rsacrack文件中,进而利用john自带的字典解密其中的信息。
ssh2john id_rsa > rsacrack
但出现了异常,提示无法找到ssh2john工具,
于是先确定ssh2john工具位置,再直接使用python命令执行,于是当前文件夹下成功生成rsacrack文件。
locate ssh2john
python /usr/share/john/ssh2john.py id_rsa > rsacrack
③
使用zcat指令加载john自带的rockyou.txt字典(zcat可以不真正解压缩文件,就能显示压缩包中文件的内容),
并将结果用管道传递给john工具(“ | ”符号叫做管道符号,可以把前一个命令原本要输出到屏幕的数据当作是后一个命令的标准输入),
最后使用john工具在已知密文的情况下尝试破解出明文。
zcat /usr/share/wordlists/rockyou.txt.gz | john --pipe --rules rsacrack
得到密码:starwars,返回上一个终端输入密码即可远程登录到这台主机上。
4.提权与获取flag
①一些linux基础知识:
使用pwd指令可立刻得知目前所在的工作目录的绝对路径名称,
使用ls指令可列出目前工作目录所含之文件及子目录,
使用cd指令可打开指定文件夹,
使用cat指令可用于连接文件并打印到标准输出设备上(打开文件),
/root是系统管理员(也叫超级用户)的主目录。
②
进入/root目录后,发现特殊文件flag.txt,但访问被拒绝,于是想要提权以便打开该文件。
③
从根目录“/”开始查找整个系统所有文件中拥有suid特殊权限的文件,并忽略错误以防打断查找。
find / -perm -4000 2>/dev/null
发现同名文件read_message,于是尝试访问。其中read_message文件中无有效信息,故仔细阅读read_message.c文件。
④审计read_message.c中代码:
结论:
Ⅰ.得到第二个flag。
Ⅱ.发现固定大小的数组,想能否制造内存溢出。
Ⅲ.若要正确执行程序,则输入的前五个字符应为“Simon”。
⑤执行read_message.c文件:
Ⅰ.尝试输入Simon
Ⅱ.尝试输入SimonAAA
我们惊奇的发现输入Simon与SimonAAA竟然有同样的输出!这说明read_message代码只关注前五个字符而不关注buf数组中其他字符。
Ⅲ.尝试输入Simon111111111111111/bin/sh
成功通过Simon111111111111111占满了buf数组的20个空位,并通过内存溢出部分的“/bin/sh”指令get到此服务器shell同时拿到了root权限。
此时再次尝试访问刚刚无权访问的flag.txt文件,发现可以访问了。
得到第三个flag。
四、总结
细节非常重要,flag往往会藏在意想不到的地方,不要放过任何可疑文件,根据提示逐步挖掘所需信息。
更多推荐
CTF训练笔记(一)
发布评论