渗透相关知识补充

本地提权的方法

  1. 内核漏洞利用
  2. 利用权限设置不当(suid,sgid)
  3. node权配置不当GTFOBins通过ssh登陆root用户(1,ssh秘钥盗取 2,支持公钥登陆)
  4. mysql提权
  5. 缓冲区溢出提权/漏洞提权
  6. Capabilitie提权
  7. password文件的修改
  8. RPC漏洞提权
  9. GTFOBins提权
  10. service权限漏洞利用网址:GTFOBins

相关漏洞

udf提权

  1. what? 返回

    User-Defined Function(用户自定义函数)

  2. 如何防范

    1. 限制UDF的使用权限:确保只有受信任的用户或角色可以创建和执行UDF。限制UDF的使用范围可以降低潜在攻击者利用UDF进行提权的风险。
    2. 审查UDF代码:对于由用户创建的UDF,管理员应该审查其代码以确保其安全性。检查UDF中是否存在任意代码执行、系统命令执行或其他危险操作的漏洞。
    3. 保持数据库软件更新:及时安装数据库供应商提供的补丁和安全更新,以修复已知的漏洞和提升数据库的安全性。
    4. 实施访问控制策略:使用数据库的访问控制机制,如角色、权限和访问控制列表(ACL),以确保只有授权用户能够执行敏感操作和访问关键数据。
    5. 监控和日志记录:定期监控数据库的活动,并记录和分析日志以检测潜在的异常行为和安全事件。

破壳漏洞

  1. what? 返回

    bash 父进程中的特殊变量字符串(这里指字符串内容为函数)成为环境变量后,在子进程中调用该字符串时将其理解为函数执行。以下为相关的参考资料:

  2. 相关说明

    1. 漏洞的利用条件:

      • 被攻击的bash存在漏洞(版本小于等于4.3)
      • 攻击者可以控制环境变量
      • 新的bash进程被打开触发漏洞并执行命令
    2. 漏洞的利用场景:

      1. 程序在某一时刻使用 bash 作为脚本解释器处理环境变量赋值
      2. 环境变量的赋值字符串来源于用户输入 , 且没有通过有效的过滤

      这些的条件都是可以在集成化的工具下自动的帮助判断,如 nmap的脚本判断。

  3. 具体的答疑: 返回

    1. 为什么我们将 paylaod 要放入到User-agent里面,就可以有效的执行?

      CGI脚本会继承系统的环境变量。CGI环境变量在CGI程序启动时初始化,在结束时销毁。

      当一个CGI脚本未被HTTP服务器调用时,它的环境变量几乎是系统环境变量的复制,当这个CGI脚本被HTTP服务器调用时,它的环境变量就会增加关于HTTP服务器,客户端,CGI传输过程等条目

    ​ 也就是说,每当CGI脚本接收到一次HTTP请求,它的环境变量就会新增一些条目,比如User-agentConnection等信息

    ​ 所以这里我们通过修改User-Agent来修改CGI环境变量。

    1. 在这台本机的实战中,其实是弱化了对这个漏洞的具体原理理解。你只需要使用相关的脚本对漏洞进行测试,能不能行渗透工具会自动的识别。

RPC漏洞

  1. what?

    ​ RPC(远程过程调用)漏洞是指由于不正确地实现或配置RPC协议导致的安全漏洞。RPC是一种用于不同计算机之间通信的协议,允许一个计算机上的程序调用另一个计算机上的程序,就像调用本地程序一样。然而,如果RPC协议的实现存在漏洞,攻击者可能利用这些漏洞执行恶意操作或者绕过安全措施

403绕过‘

  1. url覆盖 返回

    1. 我们将 GET更改为 /既访问网站的根目录。然后通过添加 X-Original-URL/ReFerer/来访问相关的目录。让服务端以为我们是从 根目录过来的,已经验证过了。
    Request
    GET /A/B.php HTTP/1.1
    host
    
    Request
    GET / HTTP/1.1
    X-Original-URL: /A/B.php               //该字段用于表面我们要访问的文件是什么
    
  2. 旁站绕过

    1. what?

      • 旁站是指在同一个域名下的不同主机名构成的网址叫做旁站。

      • 比如当我们通过 a.b.c:80/cchl.php来访问一个网址的时候是 403,我们可以收集 b.c域名下的其他主机名eg: 1,2等等。然后我们再通过 1.b.c:80/cchl.php来访问该网页资源,是有可能访问成功的,从而达到绕过的作用。

      • 修改的字段为 host

      • 服务端会认为你是自己域名下的 不同主机访问的,会认为你已经经过了验证。而且开发者在验证是否能访问的时候只对 a.b.c这个进行了验证,而对其他可以访问的方式没有验证

        Request
        GET a.b.c/cchl.php HTTP/1.1
        host
        
        Request
        GET 1.b.c/cchl.php HTTP/1.1
        host
        
  3. ReFerer修改

    1. what?

      Request
      GET /A/B.php HTTP/1.1
      host
      
      Request
      GET /A/B.php HTTP/1.1
      X-Original-URL: https://ip/login.php	//这个字段是表明我们从哪里请求的资源,可以让服务端误认为我们已经验证过了(前提									//是 https://ip/login.php会被服务端认为是一个已经验证过的网页)
      
  4. X打头绕过

    1. what?

      x打头的字段并非http的官方字段,但是有非常大的使用量。因为现在的很多网站会有多层的代理才能实现访问。而这些字段一般就是这个作用。

    2. 相关的头部

      X-Originating-IP:127.0.0.1 让系统误认为是自己访问自己

      X-Remote-IP:127.0.0.1 让系统误认为是自己访问自己

      X-Forwarded-For:127.0.0.1 让系统误认为是自己访问自己

什么是文件包含漏洞

  1. what? 返回

    简单理解就是你在url的参数值中传递一个文件路径,而服务器的相关代码处理你的传入的值得时候恰好会因为传入的是路径而导致程序的错误

  2. 如何使用

    1. 猜参数名的时候。

什么是php的封装器?

  1. what?

    在 PHP 中,封装器(Wrappers)是一种机制,用于处理各种类型的输入和输出流。PHP 提供了一系列内置的封装器,用于处理不同类型的资源,例如文件、网络连接、数据库等。

    以下是一些常见的 PHP 封装器:

    1. file:// 封装器:用于处理文件系统中的文件。它是默认的封装器,可以通过简单地使用文件路径访问本地文件。
    2. http://https:// 封装器:用于处理 HTTP 和 HTTPS 协议,可以通过 URL 访问远程 Web 资源。
    3. ftp:// 封装器:用于处理 FTP 协议,可以进行文件传输和操作远程 FTP 服务器。
    4. php:// 封装器:用于访问与 PHP 相关的特殊流。例如,php://stdin 用于从标准输入读取数据,php://stdout 用于向标准输出写入数据,php://memory 用于创建一个内存中的流等。
    5. data:// 封装器:用于直接在 URL 中嵌入数据。可以将数据作为 URL 的一部分进行访问,而不需要实际的文件存在。
    6. zip:// 封装器:用于处理 ZIP 压缩文件,可以读取和写入 ZIP 文件中的内容。
  2. How to use?

    使用封装器时,可以通过在文件或 URL 前添加封装器的名称来指定使用的封装器,

    $fileContents = file_get_contents('http://www.example.com');里面的http就是一个封装器

相关命令

基础

less

  1. what?

    它提供了一种方便的方式来查看大型文本文件,而无需将整个文件加载到内存中。

  2. 相关使用

    1. 浏览文件:一旦文件打开,你可以使用 less 的各种导航键来浏览文件内容。例如,使用向下箭头键向下滚动一行,使用向上箭头键向上滚动一行。
    2. 搜索文本:按 / 键后输入要搜索的文本,然后按回车键,less 将会高亮显示匹配的文本,并定位到第一个匹配的位置。按 n 键可以跳到下一个匹配项。
    3. 跳转页面:使用 Ctrl + F 快捷键向前翻页,使用 Ctrl + B 快捷键向后翻页。
    4. 退出 less:按 q 键即可退出 less

reset

用于重置对当前 shell的配置。

zip

  1. what?

    一个压缩命令

  2. 具体实例

    1. zip a.zip file:将file压缩为a.zip

fg

  1. what?

    fg 命令只能用于恢复在当前终端会话中挂起的作业。如果你关闭了终端或开启了新的终端会话,之前的挂起作业将不再存在。

  2. 具体实例

    1. fg [作业号]:如果不指定会默然的恢复第一个挂起的。

date

  1. what?

    用于返回系统当前时间的命令,可以对返回的结果进行格式化输出

  2. 具体实例

    1. date '+Today is %A, %B %d, %Y %H:%M:%S.'

      返回格式为:Today is Thursday, June 02, 2023 07:42:56

  1. what?

    head 是一个用于查看文件开头内容的命令。它默认显示文件的前几行,通常用于快速预览文件的内容。

  2. 相关参数

    • -n num:显示文件的前 num 行。例如,head -n 10 file.txt 将显示 file.txt 文件的前 10 行内容。
    • -c num:显示文件的前 num 个字节。例如,head -c 100 file.txt 将显示 file.txt 文件的前 100 个字节内容。
    • -q:静默模式,不显示文件名。通常用于处理多个文件时,只显示内容而不显示文件名。
    • -v:显示文件名。通常与 -q 选项一起使用,用于显示处理多个文件时的文件名。

env

查看当前 shell的环境变量,

export

  1. what?

    用于自定义环境变量

  2. 具体实例

    1. export var="value":就可以创建自己的环境变量

ss

  1. what?

    于查看和分析 Linux 系统的网络连接和套接字信息。

  2. 具体实例

    1. ss -pantu:将显示所有的 TCP 和 UDP 连接信息,并附带进程信息和禁用名称解析,以 IP 地址和端口号的形式显示。

      • -p:显示进程信息,即显示与网络连接相关的进程信息。
      • -a:显示所有套接字,包括监听和非监听状态的套接字。
      • -n:禁用名称解析,以 IP 地址和端口号的形式显示连接信息。
      • -t:显示 TCP 连接。
      • -u:显示 UDP 连接。

      这条命令同 netstat -tuln:你可以获得当前系统上哪些端口正在被监听以及与哪些 IP 地址建立了连接

      • -t:表示显示 TCP 连接信息。

      • -u:表示显示 UDP 连接信息。

      • -l:表示仅显示监听(Listening)状态的连接。

      • -n:表示以数字形式显示 IP 地址和端口号,而不进行反向解析。既 ip转换为 主机名的过程。

usermod

  1. what?

    用于修改用户账户的属性和配置

  2. 具体实例

    1. usermod -a -G sudo ragnar

      • -a 参数用于向用户添加附加组。通过 -a 参数,可以将用户添加到一个或多个附加组中,而不会影响用户的主组
      • -G, --groups eg:-G group <用户名>:修改用户的附加组。
    2. 相关参数

      • -l, --login NEW_LOGIN:修改用户的登录名(用户名)。

      • -d, --home HOME_DIR:修改用户的主目录路径。

      • -s, --shell SHELL:修改用户的登录Shell。

      • -g, --gid GROUP:修改用户的主组(用户组)。

      • -u, --uid UID:修改用户的用户ID。

      • -p, --password PASSWORD:设置用户的密码(已加密)。

grep

  1. what
  2. 具体实例:
    1. -v:过滤相关的参数,不显示他。grep / -v chen。不显示chen相关的参数。

权限

getcap

  1. what?

    用于查看文件或可执行程序的能力(capabilities)设置。通常和 setcap结合使用

  2. 具体实例

    1. getcap -r /:表示通过递归的方式查看 /目录下面所有设置 capabilities权限的命令

setcap

  1. what?

    用于为文件或可执行程序设置能力(capabilities)

  2. 具体实例

    1. setcap <capability>[-<flag>] <file_path>

      setcap cap_sys_admin=eip /

信息搜集

lsb_release -a

查看具体的内核和发现版本

sudo -l

  1. sudo -l是用来列出当前用户在sudo配置文件中拥有的权限列表的命令。该命令会列出当前用户可以以管理员权限运行的命令和脚本,以及相关的权限和约束。如果当前用户在sudo配置文件中没有相应的权限,那么执行sudo -l命令将会返回一个空列表。需要注意的是,执行sudo -l命令需要当前用户已经通过了sudo的身份验证。
  2. 其中sudo的身份验证一般在登陆的时候都验证

locate

  1. what?

    ​ 定位文件用的

  2. 具体实例

    1. locate file_name

      就可以的返回file_name的文件路径。

uname

  1. what?

    是一个用于获取系统信息的命令。它用于显示有关操作系统的信息,包括内核版本、操作系统类型、计算机名称等。

  2. 具体实例

    • -a:显示所有可用的系统信息,包括内核名称、主机名称、操作系统版本等。

    • -s:显示操作系统的名称。

    • -n:显示计算机的主机名称。

    • -r:显示内核的版本号。

    • -v:显示内核的发行版本。

    • -m:显示计算机的硬件架构。

    • -p:显示处理器类型。

    • -o:显示操作系统的制造商

id

  1. what?

    显示当前用户的身份信息。它显示有关用户和组的详细信息,包括用户 ID(UID)、组 ID(GID)、附属组、用户和组的名称等。

  2. 具体实例

    • uid:当前用户的用户 ID。
    • gid:当前用户的组 ID。
    • groups:当前用户所属的附属组列表。
    • username:当前用户的用户名。

    image-20230518102721947

ps

  1. what?

    用于查看当前运行进程信息的命令

  2. 具体实例:

    1. ps -asf | grep root

      • -a:显示所有进程包括其他用户。
      • -s表示显示进程的状态(亦可以追加状态来筛选相关的进程)。
      • -f:显示完整的进程信息
    2. ps -aux | grep root

      • -x:显示没有控制终端的进程
      • -显示没有控制终端的进程u: 以用户为基础显示进程的详细信息。

      显示所有用户的所有进程

  3. 相关参数

    1. -p <PID>:指定查看进程的详细信息
    2. -U:用于指定显示该用户下面的进程

file

  1. what

    用于确定文件的类型。它可以根据文件的内容和特征对文件进行分类,并返回相应的描述信息。同时它是可以读取文件的具体内容的

  2. 具体描述

    1. -b:仅显示文件类型,不显示文件名。
    2. -i:显示 MIME 类型。MIME类型由两个部分组成:媒体类型(Media Type)和子类型(Subtype)PDF文件的MIME类型为 application/pdf
    3. -m:指定魔术文件(Magic File)的路径,用于识别文件类型。
    4. -z:对压缩文件进行分析。

ssh

  1. what?

    不解释

  2. 具体实例

    1. -v:显示连接的具体过程,其中几个注意点:能允许交换秘钥的方式,能允许的登陆方式(password or public_key)
    2. -i:表示指定为public_key来进行连接,同时需加上一个私钥的文件:-i private_key.txt

gunzip

  1. what?

    ​ 一个解压命令,解压gz.

  2. 具体实例

    1. gunzip file.gz

      ​ 对gz文件进行解压

unzip

  1. what?

    ​ 一个解压命令,解压zip

  2. 具体实例

    1. unzip file.zip

      ​ 对zip文件进行解压

    2. -d:指定解压后的保存目录

    3. -l:查看压缩包内部的文件结构

    4. -v:展示解压的详细内容

    5. -o:解压后用解压的文件来替代原来的压缩文件,将原来的文件删除。

find

  1. what? 返回

    用于在文件系统中搜索文件和目录。具有广泛的选项和用法,可以根据不同的条件和标准进行搜索。

    如:权限,时间戳,文件内容等

  2. 具体实例

    1. find / -perm /2000 2>/dev/null

      1. / 是指要搜索的起始路径,这里是根目录。

      2. -perm 是一个选项,用于指定要搜索的文件权限。

      3. /2000 "setgid" 位的权限,表示满足权限模式为 2000(八进制表示)的文件。

      4. 2 > /dev/null 是将标准错误输出重定向到 /dev/null,意味着将错误信息丢弃。

        2:在 Linux 中,标准错误输出的文件描述符为 2。文件描述符是一个与文件或设备相关联的整数值。

        /dev/null: 是一个特殊的设备文件,在 Linux 中被称为“黑洞”。它接收到的任何数据都会被丢弃,不会在终端上显示,也不会被记录。

    2. find / -perm /4000 2>/dev/null

      1. 4000:设置了 "setuid" 位的权限
  3. 相关参数

    • -type f:指定查找的文件类型,其中 f表示普通文件类型。

(|)管道符

  1. what?

    将一个命令的输出作为另一个命令的输入进行处理,实现两个或多个命令之间的协作。通过管道,可以将一个命令的输出传递给另一个 命令进行进一步处理,实现数据流的传递和处理。

  2. 直接放入两个命令之间即可

ll -la

-rw-r--r-- 1 root root 123456 May 11 10:30 example.txt

  1. -rw-r--r--

    1. -表示文件类型
      1. -:普通文件
      2. d:文件夹
      3. 。。。。
    2. rw-:所属用户的权限
    3. r--:所属用户的用户组的权限
    4. r--:其他的用户组的权限
  2. 1 :用户表示这个文件的硬件连接数

  3. root root :分别表示 所属用户,用户属于的用户组

  4. 123465:文件的大小

  5. May 11 10:30:表示该文件的最后修改时间

  6. example.txt表示该文件的名字

  7. 特殊权限:在---中前两位为读写,第三位为x,但同时也有另外三个权限:suid、sgid、sticky

    1. suid:让普通用户临时拥有该文件的属主的执行权限,suid权限只能应用在二进制可执行文件(命令)上,而且suid权限只能设置在属主位置上。 (可以用来提权

      增加权限u+s,移除权限u-s

    2. sgid:sgid权限一般应用在目录上,当一个目录拥有sgid权限时,任何用户在该目录下创建的文件的属组都会继承该目录的属组。

      sgid权限也使用s表示,增加权限g+s,移除权限g-s;

    3. sticky:sticky权限一般针对目录来设置,作用是只允该目录下的文件的创建者删除自己的创建的文件,不允许其他人删除文件。(root用户除外,因为root用户是超级管理员),而且sticky权限只能设置在other位置上。

      使用t表示,增加权限o+t,移除权限o-t;

信息搜集的判断

什么是node.js?

  1. what? 返回

    Node.js 是一个基于 Chrome V8 JavaScript 引擎的开源、跨平台的 JavaScript 运行时环境。它允许开发人员使用 JavaScript 来构建服务器端应用程序。传统上,JavaScript 主要运行在浏览器中,用于前端开发,但是 Node.js 将 JavaScript 的能力扩展到了服务器端。同时还可以通过node.js开发其他非 web程序。

  2. 渗透的注意事项

    1. node.js开发出来的web服务一般都会使用大量的框架,其中 express是最常见的开发框架。同时该开发框架下主目录下一般都有 package.json文件,里面定义了web大量的配置信息
    2. 如果靶机中的node程序是具有 sudo的是可以直接提权 为root

判断是否进入入docker中

cat /proc/1/cgroup

/proc 目录是一种特殊类型的文件系统,通常被称为 procfs。包含了关于操作系统进程组织方式的信息,其中的数字 1 代表 的是 init 进程,也就是系统启动时第一个运行的进程。

/proc/1/cgroup 文件中存储了关于 init 进程所在的控制组(cgroup)信息,其中每一行代表一个控制组。控制组是 Linux 内核中的一个功能,可以用来限制系统资源的使用,通过将进程分组,可以更好地对进程进行管理和资源分配。在 /proc/1/cgroup 文件中,每一行由三个字段组成,分别是控制组的名称、控制组的层级结构和进程 ID(PID)。

ls /.dockerenv

/.dockerenv 是一个标识当前进程运行在 Docker 容器内的文件。这个文件在 Docker 容器内部中始终存在,可以通过检查 这个文 件是否存在来判断当前应用程序是否运行在 Docker 容器内部。通常,一些脚本和工具会使用这个文件来判断 当前是否在 Docker 容器 中,并作出相应的处理。

linux基础目录/文件知识

./profile

  1. what?

    是用户级别的配置文件之一,用于设置用户的环境变量和执行其他初始化操作。该文件通常位于用户的主目录下。

  2. 玩法

    1. 用户还可以通过 .profile 文件加载其他的配置文件,如 .bashrc.bash_profile

    2. .profile 文件在用户登录时才会执行,如果您修改了该文件,需要重新登录或者执行 source ~/.profile 命令来使修改生效

./bashrc 文件

  1. what?

    是用户级别的 Bash Shell 配置文件,用于自定义用户的 Shell 环境和行为。

  2. 玩法

    1. 可以配置让其开机自己执行某些命令

/bin/sh

在许多系统中,/bin/sh实际上是指向其他Shell解释器的符号链接,例如Bash Shell(/bin/bash)、Dash Shell(/bin/dash)或其他兼容的Shell。这是因为在现代系统中,Bash Shell通常作为默认的Shell解释器,而/bin/sh被链接到Bash Shell的路径。

因此,当您在命令中使用/bin/sh时,它实际上是指定使用系统默认的Shell解释器来执行相应的命令。具体使用哪种Shell取决于系统配置和符号链接的设置。

/tmp/目录下执行脚本 ,why?

将代码执行限制在/tmp/目录是出于安全的考虑。/tmp/目录通常是可写的,因此攻击者可以在该目录中创建和运行恶意代码,例如将代码执行限制在/tmp/目录下,可以避免攻击者在系统的其他位置运行恶意代码,限制了其能够进行攻击的范围,提高了系统的安全性。

/bin/bash

  1. what?

    /bin/bash 是在常见的Linux系统中找到的默认shell路径。

  2. 直接调用即可。

/usr/share/wordlists

  1. what?

    该路径下包含了kali中的众多字典。

/etc/passwd

  1. what?

    用来存储用户信息的

  2. 具体解释

    image-20230517161033703

    每一行使用“:”分隔开,共有七个字段。

    1. 账号名称

      就是账号,用来对应UID的。

    2. 密码

      早期UNIX系统的密码就放在这字段上,后来将密码数据字段的数据改放到/etc/passwd 中了,所以这里你会看到一个“x”。

    3. UID

      这个是用户标识符:

      1. 0(系统管理员)当UID为0时,代表这个账号是“系统管理员”

      2. 1~499(系统用户)保留给系统使用的ID,默认500以下的数字让给系统作为保留账号只是一个习惯

      3. 1~99:由distributions自行创建的系统账号

      4. 100~499:若用户有系统账号需求时,可以使用的账号UID

      5. 500~65535(可登陆账号)给一般用户用的

    4. GID

      这个是用户组标记符

    5. 用户信息说明列

      这个字段基本上并没有什么重要用途,只是用来解释这个账号的意义而已。不过,如果你提供使用finger的功能时,这个字段可以提供很多的信息

    6. 主文件夹

      这是用户的主文件夹。如果你想修改某个账号的主文件夹只需要对这个字段进行修改。默认的用户主文件夹在/home/yourIDname中,root的主文件夹在/root中。标记了用户可以使用的文件。

    7. 命令解释器:

      就是你的shell是通过上面执行的。

Apache下的robots.txt文件

  1. what? 返回

    当 Apache 作为 Web 服务器发布网页时,robots.txt 是一个用于指示搜索引擎爬虫(web crawler)的文本文件,用于管理网站的爬行行为。

    User-agent: *
    Disallow: /private/
    Disallow: /temp/
    
    • User-agent: * 表示对所有爬虫生效,也就是适用于所有搜索引擎爬虫。
    • Disallow: /private/ 指示爬虫不应该访问位于 /private/ 目录下的任何页面或资源。这是为了防止搜索引擎爬虫访问网站的敏感或私密内容。
    • Disallow: /temp/ 指示爬虫不应该访问位于 /temp/ 目录下的任何页面或资源。这可能是临时文件或临时目录,不希望被搜索引擎爬取。

    robots.txt 文件应该位于网站的根目录下,例如 http://www.example.com/robots.txt。搜索引擎爬虫在访问网站之前会检查这个文件,以了解有关网站的爬行规则。爬虫将尊重 robots.txt 文件中的指示,遵守相应的访问限制。

    需要注意的是,robots.txt 文件只是一种建议,而不是强制规则。

  2. 这也是手工测试的时候必须访问的目录环境

ssh秘钥目录

  1. /home/mowree/.ssh/authorized_keys:客户端生成的公钥存储在服务端的目录
  2. /home/mowree/.ssh/id_rsa:客户端(登陆用户,也是在靶机上的)的私钥目录。

基础知识

cat -有什么作用

在命令"cat 1.txt - | progress"和"cat 1.txt | progress"之间,存在一个细微但重要的区别。

  1. "cat 1.txt - | progress": 返回

    • 这个命令中的 - 表示将标准输入作为文件之一处理。它使得"cat"命令能够将文件"1.txt"的内容与标准输入合并,并通过管道将数据传递给"progress"命令进行处理。
    • 这意味着你可以通过标准输入提供额外的内容,与文件"1.txt"的内容一起传递给"progress"命令进行处理。
  2. "cat 1.txt | progress":

    • 这个命令中没有使用"-"符号。"cat"命令仅将文件"1.txt"的内容通过管道传递给"progress"命令进行处理。
    • 这种情况下,没有使用标准输入的内容与文件"1.txt"的内容合并,而是仅将文件"1.txt"的内容传递给"progress"命令。

因此,区别在于是否在管道中包含标准输入的内容。如果你希望将标准输入的内容与文件"1.txt"的内容合并传递给"progress"命令,你可以使用"cat 1.txt - | progress"命令。而如果你只想将文件"1.txt"的内容传递给"progress"命令,你可以使用"cat 1.txt | progress"命令。

串联命令的符号

A 符号 B 返回

管道符(|)

​ 无论 A是否执行成功,都会执行 B命令。同时将 A的结果传递给 B。玩法丰富

双管道符(||)

​ 只有当前方的命令 A执行失败的时候才会执行后面的命令 B

&&

​ 刚好和双管道符(||)功能相反。

bash函数的定义格式

  1. 格式:function_name() {函数体}
  2. 相关教程:Shell 函数 | 菜鸟教程 (runoob.com)

sudo组的具体了解

sudo(Superuser Do)是一个权限管理工具,允许系统管理员授予普通用户临时获得超级用户(root)权限的能力。通过 sudo,管理员可以以更安全的方式管理系统,而无需将 root 密码直接分享给其他用户

sudo的本质是让命令以root的身份运行。所以普通用户如果需要定制化的修改自己用户的配置加上 sudo可能是不成功的,会变成更改 root用户的配置了。

在 sudo 的配置中,有一个特殊的用户组称为 sudo 组(也称为 wheel 组)。sudo 组中的用户被授予可以使用 sudo 命令的权限。

  1. 创建 sudo 组:在一些 Linux 发行版中,默认情况下可能没有 sudo 组。在创建 sudo 组之前,管理员需要使用 root 权限创建该组。例如,使用以下命令创建 sudo 组:groupadd sudo

  2. 添加用户到 sudo 组:一旦 sudo 组创建完成,管理员可以将其他用户添加到 sudo 组,以授予他们使用 sudo 命令的权限。

    usermod -aG sudo <用户名>

添加用户到 sudo 组后,他们就可以使用 sudo 命令以管理员权限执行特定的命令。

  1. sudo 配置文件:sudo 组的权限由 /etc/sudoers 文件中的配置定义。管理员可以通过编辑该文件来调整 sudo 组的权限。通常,该文件由 visudo 命令打开,该命令会在保存修改后进行语法验证,以确保文件的正确性。

    visudo /etc/sudoers

    在该文件中,管理员可以指定哪些用户组或用户具有使用 sudo 的权限,并定义他们可以执行的命令。

请注意以下几点:

  • sudo 组只是一种约定,可以根据需要更改组名称。在某些系统中,sudo 组可能被称为 wheel 组

  • 需要注意的是,只有具有适当权限的用户可以将其他用户添加到 sudo 组。这通常需要管理员或 root 权限。

  • 在某些 Linux 发行版中,默认配置允许 sudo 组的成员执行任意命令,而在其他发行版中可能有更严格的配置限制。

  • 使用 sudo 组时,需要小心配置 sudoers 文件,确保只授予必要的权限,并避免安全漏洞。

sudo -s 和 su root的区别

  1. sudo -s:将启动一个新的 shell,该 shell 的用户身份将变为超级用户,不需要输入 root 用户的密码,系统将要求你输入当前用户的密码,但是必须拥有sudo权限才使用该命令。在该 shell 中执行的所有命令都将具有管理员权限。

  2. su root:相当于是切换用户,需要输入 root用户的密码

Capabilitises

  1. what? 返回

    是一种安全机制,用于在进程级别上控制对特定系统操作的访问权限。它们提供了一种细粒度的权限控制,使得进程可以具有特定的权限而不必以完全特权运行

    具体的各个权限参考:http://man7.org/linux/man-pages/man7/capabilities.7.html

  2. 相关漏洞与使用

    1. setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap

      设置当前用户对 /usr/bin/dumpcap的程序拥有 cap_net_raw,cap_net_admin的权限,dumpcapwireshark进行抓包的底层命令。通过这个设置可以让linux上普通用户按照的 wireshark能够正常的抓包。

    2. 相关权限

      1. CAP_SYS_PTRACE

        这个权限就是可以调试其他系统权限的权限,他是有一定提权的可能的。

dns相关知识点

区域传输(axfr)

  1. what? 返回

    是DNS系统中用于在主DNS服务器和辅助DNS服务器之间传输完整区域数据的机制。它通过主服务器响应辅助服务器的AXFR请求,使辅助服务器能够更新自己的区域副本,以提供可靠的域名解析服务。

  2. Notice

    axfr是在安全实践中是不应该对所有的用户开发的,一般应该只允许同一个域下面的不同概念的dns服务器能够相互的axfr通过53/tcp进行dns的同步(这是需要手工配置的).当主DNS服务器上的区域数据发生变化时(例如添加、删除或修改记录),辅助DNS服务器需要更新自己的数据,以保持与主服务器的一致性。这时就需要进行区域传输。

各种解析

  1. NS (Name Server) 记录: NS 记录用于指定该域名的权威域名服务器(Name Server)。它指定负责管理该域名的 DNS 服务器,提供与该域名相关的 DNS 信息。
  2. MX (Mail Exchanger) 记录: MX 记录用于指定接收域名的电子邮件的邮件服务器。它将域名映射到一个或多个邮件服务器,以指定邮件交换的目标。

53端口

53端口是dns服务器占用,其中53/udp是用来进行dns功能。53/tcp是在同一个域下的不同dns主机进行相互通讯的端口(一般来讲)。

url中的#号

为片段标识符,是用于标识网页中特定部分或锚点的标记。当浏览器加载包含片段标识符的 URL 时,它会滚动到相应的片段或特定位置,使用户可以直接导航到该位置。

以下是一些常见的用法和作用: 返回

  1. 页面内部导航:在单个网页中,可以使用片段标识符来标识不同的部分,用户可以直接跳转到页面中的特定部分,无需手动滚动。

    例如:https://www.example.com/page.html#section2

  2. 锚点链接:在一个网页中,可以使用片段标识符来创建内部链接,使用户从一个页面跳转到同一页面的不同部分。

    例如:<a href="#section2">跳转到第二部分</a>

  3. 页面共享和书签:通过包含片段标识符的 URL,可以在网页间共享特定位置的链接。这对于在社交媒体上分享感兴趣的内容或创建书签非常有用。

    例如:https://www.example.com/article.html#summary

需要注意的是,片段标识符只在客户端(浏览器)中起作用,不会发送给服务器。因此,服务器不会根据片段标识符来提供不同的内容。片段标识符仅用于客户端的导航和定位。

渗透的底蕴

rpcbind

  1. what? 返回

    在计算机上提供远程过程调用(RPC)的绑定和映射功能。RPC是一种通信机制,允许不同的进程在网络上相互通信和交换数据。rpcbind服务使用标准的RPC绑定协议,并且是与操作系统紧密关联的。它通常在启动过程中自动启动,并在计算机上运行作为后台进程。rpcbind服务的端口号通常是 111多用于企业级网络

.so和.dll的区别

  1. what? 返回

    .so文件是Linux下的动态链接库,类似于Windows下的.dll文件。动态链接库是一种可执行文件,它在运行时才被载入内存,并被映射到进程的地址空间中。动态链接库可以被多个进程共享,从而节省内存空间。其中,.so.y表示版本号。Linux下的库必须以lib开头,用于系统识别(如:libjpeg.a libsdl.so

xmlrpc

一种远程过程调用协议,用于在网络上进行跨平台和跨语言的通信。XML-RPC使用XML格式来编码请求和响应消息,以实现不同系统之间的数据交换和方法调用。

peda

gdb的一个调试插件,当在系统中看到该插件的时候,我们应该联想到这个调试工具。

wordpress

WordPress 是一个流行的开源内容管理系统(CMS),广泛用于搭建和管理网站。虽然 WordPress 被广泛应用于博客网站,但它也可用于构建各种类型的网站,包括商业网站、社区论坛、电子商务平台等。

http-alt

  1. what? 返回

    在Web中,"http-alt" 是指用于替代HTTP(默认端口为80)的备用端口号。

URI,URN,URL是什么关系

URI 是用于标识和定位资源的字符串,包括 URL(Uniform Resource Locator)和 URN(Uniform Resource Name)两种形式。URL 是 URI 的一种常见形式,它包含了资源的位置和访问方式。

cgi开发

  1. what? 返回

    ​ 是一种用于在 Web 服务器和外部应用程序之间进行通信的标准接口。它允许 Web 服务器调用外部程序来处理客户端请求,并将处理结果返回给客户端。

    Web 开发中,CGI 被用于实现动态网页和交互式 Web 应用程序。

  2. 相关渗透思路:

    1. 一般使用 cgi开发的web网页都会存在一个:/cgi-bin/的目录,里面存放的都是后缀为: .cgi或.shcgi脚本文件。--------> 目录发现
    2. 大致的思路就是我们上载恶意数据,让服务端通过 cgi调用其他程序。利用其他程序或者其他漏洞来执行我们的恶意数据从而进行相关的渗透测试。---------> 破壳漏洞

rpyc

  1. what? 返回

    在Python中,rpyc(Remote Python Call)模块是一个用于实现远程过程调用的框架。它允许你在不同的计算机之间建立远程连接并调用远程计算机上的函数和方法。

    官方文档:Part 1: Introduction to Classic RPyC — RPyC

  2. 大致使用

    1. 服务端要开启一个服务,默认开放的端口为:18812

      $ python bin/rpyc_classic.py
      INFO:SLAVE/18812:server started on [127.0.0.1]:18812
      
    2. 客户端也要开启一个服务来连接服务端:

      import rpyc
      conn = rpyc.classic.connect("localhost")
      

      默认会连接服务端的 18812端口

    3. tleport is another interesting method that allows you to transmit functions to the other sides and execute them over there:

      >>> def square(x):
      ...    return x**2
      >>> fn = conn.teleport(square)
      >>> fn(2)
      

      This calculates the square of two as expected, but the computation takes place on the remote!

PK-->ZIP

  1. what?

    当数据流以字母 "PK" 开头时,很可能是 ZIP 文件格式。ZIP 文件的文件头部分包含标识符 "PK",这是 ZIP 文件格式的标志之一。

Elasticsearch

  1. 9200一般是Elasticsearch在使用,为一个python相关服务。有远程执行漏洞。

    what is Tornado?

    Tornado 是一个基于 Python 的开源 Web 应用程序框架和异步网络库。它由 FriendFeed(现在属于 Facebook)开发并开源,旨在提供高性能和可伸缩性的 Web 应用程序开发解决方案。

    Tornado 的主要特点包括:

    1. 异步和非阻塞:Tornado 使用基于事件循环的异步 I/O 模型,使得它能够处理大量并发连接而不会阻塞或消耗太多系统资源。这使得它非常适合构建高性能的网络应用程序,特别是在需要处理大量并发请求的场景下。
    2. 轻量级:Tornado 的核心代码库相对较小,依赖较少,因此可以轻松集成到现有的应用程序中,或作为一个独立的服务来构建 Web 服务。
    3. 支持异步请求处理:Tornado 提供了异步的请求处理机制,可以轻松处理长轮询(long polling)、WebSockets 和其他实时通信协议。
    4. 内置的 Web 服务器:Tornado 包含一个内置的非常快速的 HTTP 服务器,因此可以直接部署和运行 Tornado 应用程序,而无需额外的 Web 服务器软件。
    5. 支持模板引擎:Tornado 提供了内置的模板引擎,使得开发人员可以方便地构建动态的、可定制的 Web 页面。

    Tornado 可以用于构建各种类型的 Web 应用程序,包括实时聊天应用、实时博客平台、Web API 服务等。它在性能和可伸缩性方面的优势使其成为处理大量并发请求的理想选择

Bootstrap

  1. what?

    Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架。Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的。

posted @ 2023-05-24 16:39  C_CHL  阅读(97)  评论(0编辑  收藏  举报