linux脚本语言
在 CTF 和红蓝对抗中,Shell 脚本不仅仅是用来简化日常运维的,更是用来在极端受限环境下实现主机探测、端口扫描、反弹 Shell 以及痕迹清理的利器。学习 Bash 脚本的终极目标是:就地取材。
1 Shell 脚本基础与变量1.1 基本结构每个标准的 Shell 脚本都应该以 shebang 开头,告诉系统用哪个解释器来执行。123#!/bin/bash# 这是一个注释echo "Hacking in progress..."
执行脚本前,通常需要赋予执行权限:chmod +x exp.sh
1.2 预定义变量 (传参利器)在写自动化 Exploit 时,经常需要从命令行传入 IP、端口或 Payload,这时候预定义变量非常重要:
$0:脚本自身的文件名。
$1 ~ $9:脚本的第 1 到第 9 个参数。
$#:传递给脚本的参数总个数。
$@ 或 $*:传递给脚本的所有参数(常用于将所有参数打包传给另一个命令)。
$?:极其重要! 上一条命令的退出状态码。0 代表成功,非 0 代表失败。(常用于判断端口是否开放、爆破是否成功)。
代码示例:简单的 Pa ...
sqlite注入
测试方法与 MySQL 类似,在发现有可控参数的地方可以使用手工测试或者 SQLMap 等自动化工具进行注入检查。
修复建议采用 SQL 语句预编译和绑定变量,依然是防御 SQLite 注入的最佳方法。
所有查询语句使用参数化查询接口,避免将用户输入直接拼接进 SQL 语句中。
对进入数据库的特殊字符进行转义过滤。
严格规定数据类型和长度。
注意: SQLite 是基于文件的数据库,因此严格限制 Web 目录的文件读写权限至关重要,防止攻击者通过附加数据库(ATTACH DATABASE)等方式写入恶意文件。
SQLite 相关知识(与 MySQL 的核心差异)SQLite 是一种轻量级的文件型数据库,不需要独立的服务器进程,整个数据库就是一个文件。这也是它在注入时与 MySQL 最大的不同点所在。
没有 information_schema 库
SQLite 没有 MySQL 那样庞大的 information_schema。它在每个数据库中默认维护了一个名为 sqlite_master 的隐藏系统表(在某些新版本中也叫 sqlite_schema,但 sqlite_maste ...
mysql注入——批量化脚本
批量化脚本编写思路在理解了联合查询、报错注入、布尔盲注和时间盲注的原理后,我们需要利用编程语言(通常为 Python)来代替人工进行繁琐的穷举和发包。
编写批量化注入脚本通常遵循以下核心流程:
确定注入点与特征:找出 URL/POST 数据包中的可控参数,明确回显成功/失败的标志(布尔特征)或延时特征(时间特征)。
构造 Payload 模板:使用字符串格式化(如 {})将需要动态替换的部分(如猜测的字符、长度等)预留出来。
自动化发包与逻辑判断:利用循环或二分查找算法,不断向目标发送包含 Payload 的请求,并根据响应内容或响应时间提取数据。
并发与优化:针对批量 URL 扫描或深度数据提取,引入多线程/协程提升速度。
核心库使用在 Python 中编写 SQL 注入脚本,以下几个标准库和第三方库是必备的:
1. requests 库(网络请求核心)用于发送 HTTP 请求,支持 GET/POST、自定义 Headers、Cookies 和代理。12345678910111213141516import requests# 推荐使用 Session 保持连 ...
python代码与命令执行漏洞
在 Python Web 开发中,如果在处理用户输入时缺乏严格的过滤和验证,且错误地使用了高危函数,就极易导致命令执行(OS Command Injection)或代码执行(Code Injection)漏洞。攻击者一旦利用成功,通常可以直接获取服务器的控制权(RCE)。
OS命令执行漏洞漏洞原理当应用程序需要调用操作系统级命令来完成某些任务(如网络连通性测试 ping、文件处理等)时,如果将未经净化的用户输入直接拼接到了系统命令字符串中并执行,攻击者就可以通过注入系统命令分隔符(如 ;、|、&&、||)来执行预期之外的恶意系统命令。
常见危险函数
os.system()
os.popen()
subprocess.Popen() / subprocess.run() / subprocess.call() (当参数 shell=True 时)
commands 模块下的函数(Python 2 环境)
假设一个 Flask Web 接口提供 ping 功能:
12345678910import osfrom flask import request@app.route ...
无题
前置知识NoSQL 数据库(意即”Not Only SQL,不仅仅是SQL”)并非表格格式,其存储数据的方式与关系表不同。NoSQL 数据库的类型因数据模型而异。主要类型包括文档、键值、宽列和图形。它们提供了灵活的模式,可以随大量数据和高用户负载而轻松扩展。NoSQL 数据库是以关系表以外的格式存储数据的数据库,是一种非关系型数据库。
随着存储成本迅速降低,存储和查询所需的数据应用程序数量也增加了。这些数据具有各种形状和大小(结构化、半结构化和多态性),因此预先定义架构几乎变得不可能。于是在二十世纪晚期出现了 NoSQL 数据库,NoSQL 数据库允许开发者存储大量非结构化数据,从而为他们提供了很高的灵活性。
另外云计算也越来越流行,开发者开始使用公有云来托管其应用程序和数据。他们希望能够在多个服务器和区域之间分布数据,以使其应用程序具有弹性,可以横向扩展而不是纵向扩展以及对数据进行智能地理定位。一些 NoSQL 数据库(如 MongoDB)提供了这些功能。
类型NOSQL主要有四种数据类型,分别是文档数据库,键值数据库,宽列存储数据库和图形数据库。
文档数据库将数据存储在类似于 J ...
内存取证基础——linux
Profile制作不同的操作系统(Windows、Linux、macOS)、不同的发行版(比如 Ubuntu 22.04 vs CentOS 7),甚至不同版本的操作系统内核,它们在内存中存储信息的方式是完全不同的。vol2使用profile进行内存信息的标记
对于 Windows 系统,微软发布的版本相对固定,Volatility 官方自带了绝大多数常见 Windows 版本的 Profile。 但 Linux 开源且碎片化严重,各个发行版(Ubuntu, Debian, CentOS 等)都会自己编译内核,更新也非常频繁。Volatility 不可能内置所有 Linux 内核的配置文件。因此:
如果你拿到一个 Linux 的内存镜像,你通常需要先查出它具体的内核版本号(比如 5.15.0-76-generic)。
然后去开源仓库找别人做好的。
如果找不到,你就得按照教程,自己搭建一个相同内核版本的 Linux 虚拟机,编译提取出 system.map 和 module.dwarf,打包成自己专属的 Profile。
扫描系统在开始制作之前,你必须知道这个内存镜像是从什么系统、什 ...
内存取证基础——macos
识别不出内存镜像版本的取证直接使用 010 手搓或者用 Strings 命令把可打印字符保存到文本文件中再手搓
需要从内存中找到 AES 解密的 key 的情况:可以使用 findaes.exe 工具辅助查找
工具dmp文件
拉入Passware Kit Forensic-Memory Analysis进行分析(用户名和密码)
使用vol分析
lsass.DMP文件直接使用mimikatz或者pypykatz分析
12sekurlsa::minidump lsass.dmpsekurlsa::logonpasswords
1pypykatz lsa minidump lsass.DMP
dump文件“dmp” 通常特指 Windows 的崩溃转储文件,而 “dump” 是一个更为通用的术语,可以用于描述各种数据转储操作或文件。
取证方法大致和dmp文件相同
mem文件1vol.py -f mem imageinfo
raw文件可以直接使用 vol2 或者 vol3 进行内存取证
系统取证——centos
网络配置位置 配置网卡参数
网卡的配置文件位于/etc/sysconfig/network-scripts/目录下,文件名通常为ifcfg-<interface_name>。
配置文件修改以下是一个典型的静态IP配置:
1234567891011121314151617TYPE="Ethernet"BOOTPROTO="none"DEFROUTE="yes"IPV4_FAILURE_FATAL="no"IPV6INIT="yes"IPV6_AUTOCONF="yes"IPV6_DEFROUTE="yes"IPV6_FAILURE_FATAL="no"NAME="ens33"UUID="some-uuid-value"DEVICE="ens33"ONBOOT="yes"IPADDR="192.168.1.100"PREF ...
linux取证——文件取证
Linux系统文件信息取证与核心操作在Linux系统的日常维护与安全取证过程中,熟练掌握文件操作与查找命令是至关重要的基础。以下内容将原有的知识体系进行了深度重构与详尽扩展。
Linux核心文件操作指令ls 命令ls(全拼为 list directory contents)是Linux中最基础也是最常用的命令,其核心作用是显示指定工作目录下的内容,精准列出目前工作目录所包含的文件及子目录。
基础语法与运行逻辑
ls [-alrtAFR] [name...]
核心参数深度剖析
-a (all):无死角显示所有文件及目录。在Linux中,以 . 开头的文件属于隐藏文件,该参数强制列出所有隐藏内容,在取证时排查隐藏的恶意文件极其重要。
-d (directory):仅针对目录本身进行列出,而不会递归深入列出目录内部的具体文件。
-l (long format):以极其详尽的长格式输出文件和目录的各项元数据信息。输出内容涵盖了文件的读写执行权限、文件所有者、文件大小以及具体的创建或修改时间等关键取证线索。
-r (reverse):打破默认的正向排序,强制将文件和目录进行倒序显示。 ...
逻辑缺陷——弱密钥
JWT安全漏洞JWT(JSON Web Token)是一种用于身份认证和授权的开放标准,它通过在网络应用间传递被加密的JSON数据来安全地传输信息使得身份验证和授权变得更加简单和安全,JWT对于渗透测试人员而言可能是一种非常吸引人的攻击途径,因为它们不仅是让你获得无限访问权限的关键而且还被视为隐藏了通往以下特权的途径,例如:特权升级、信息泄露、SQLi、XSS、SSRF、RCE、LFI等
基础概念
JWS:Signed JWT,签名过的JWT
JWK:JWT的密钥,也就是我们常说的SECRET
JWE:Encrypted JWT部分payload经过加密的JWT
JKU:JKU(JSON Web Key Set URL)是JWT Header中的一个字段,字段内容是一个URI,该URI用于指定用于验证令牌秘钥的服务器,该服务器用于回复JWK
X5U:X5U是JWT Header中的一个字段,指向一组X509公共证书的URL,与JKU功能类似
X.509标准:X.509标准是密码学里公钥证书的格式标准,包括TLS/SSL(WWW万维网安全浏览的基石)在内的众多Internet协议都应用了 ...









