Python Pickle 反序列化漏洞
1. Pickle 基础1.1 什么是 Pickle?Pickle是Python内置的序列化/反序列化的模块,它能将任意Python对象转换为二进制流并还原。Pickle文档明确警告:“pickle模块不安全;只有在信任数据源时才使用。恶意构造的pickle数据可以在反序列化时执行任意代码” 。Pickle与JSON的主要区别在于:JSON只能表示基本类型(数值、字符串、列表、字典等),而Pickle能够序列化几乎任意Python对象(类实例、函数、复杂数据结构等),因此功能更强但也风险更高。
Pickle支持多种协议版本(目前Python官方支持0–5共6种协议),其中协议0为文本格式(Python 2兼容),协议1–3为历史二进制格式,协议4引入对超大对象和新类型的支持,协议5引入离带缓冲区以加速大对象传输 。不同协议产生的字节流会略有不同,但反序列化时Python自动探测版本。开发者通常只需调用pickle.dumps(obj)(或dump(obj, file))来序列化,以及pickle.loads(data)(或load(file))来反序列化。
各协议详细可见文档 ...
安卓项目基本结构
第一个安卓项目环境:
Android Studio 2024.2
Java 21.0.5
SDK:API 24
虚拟机:Pixel 9 Pro API 27 / Android 8.1
项目目录新建项目,可得到目录内容:
app├── manifests│ └── AndroidManifest.xml├── java│ ├── com.dta.first│ │ └── MainActivity.java│ ├── com.dta.first (androidTest)│ ├── com.dta.first (test)│ └── java (generated)├── res│ ├── drawable│ ├── layout│ ├── mipmap│ ├── values│ └── xml└── res (generated)Gradle Scripts
manifests目录其中manifest文件用来存放一些安卓应用程序的配置文件,通常每个安卓应用都包含AndroidManifest.xml,是一个全局配置文件, ...
跨站脚本攻击-XSS
前置基础:XSS 需要懂哪些前端知识?为了更好理解 XSS,我会先快速讲解一些基础的前端知识,哪怕你没写过网页也能跟上。
1. HTML 是什么?
HTML 是网页的“结构语言”,网页上的内容几乎都是用 HTML 描述的。
页面会由一个个标签构成,比如:
1234567<html> <head><title>网页标题</title></head> <body> <h1>主标题</h1> <p>这是正文段落</p> </body></html>
看到这种 <标签> 的东西,就是 HTML。
2. HTML 标签的结构:1<tagname attribute="value">内容</tagname>
例如:
1<a href="https://example.com">点我跳转</a>
<a> 是超链接标签,h ...
SQL注入---常见分类攻击方式总结与绕过
近期由于准备学校培训内容,对SQL注入的基础知识进行了一些总结,同步一下博客。
SQL基础一、数据库的基本概念
什么是数据库(Database)
一个存储和管理数据的容器,比如:学生信息管理系统的核心。
什么是表(Table)
数据库中用于存储数据的结构化格式,每张表有若干“行”和“列”。
行(Row)和列(Column)的区别
一行:表示一条记录(例如一个学生)
一列:表示一个字段(例如“姓名”字段)
二、SQL基础语法1. SELECT语句 - 查询数据select [列名/*] from [表名] where [限制条件]
示例:
select * from students;
假设students表:
id
name
age
1
Alice
18
2
Bob
19
查询 age = 18 的所有同学的姓名
SELECT name FROM students WHERE age = 18;
2. INSERT语句 - 插入数据insert into students(name, age) values ('Sunny& ...
让AI也懵圈:一次CTF中的对抗样本生成与应用
让AI也懵圈:一次CTF中的对抗样本生成与应用同步一下推送发的内容
题目来源:GHCTF。感谢GHCTF主办方的师傅们,特别是公开赛道的设置和提供的高质量赛题。
引言在当前人工智能的应用中,模型通常会基于大量的数据进行训练,以帮助其做出准确的预测。然而,既然是预测,就难免会出现失误。因此,如何确保模型的鲁棒性和安全性成为了一个至关重要的话题。
对抗样本(Adversarial Examples)攻击是AI安全中不可忽视的一个隐患。对抗样本是指通过精心设计,对输入数据进行微小修改,通常这些修改对人眼几乎无法察觉,但却能导致模型产生错误的分类或判断。例如,下图展示了这种情况:最左侧是原始图像,中间是添加的微小扰动,右侧则是生成的对抗样本。模型在识别原始图像时,会返回结果为猫(虽然这个数据集分辨率很低,就姑且当图里是猫吧),但是模型识别对抗样本时,则会将其识别为狗。
但是这时候就有人要问了,“学长学长,你上面讲的东西还是太抽象,太难理解了,有没有更贴近生活的例子?”
有的兄弟,有的。这样的例子还有两个。
例如新能源汽车的自动驾驶系统,我们都知道,很多新能源汽车的自动驾驶都会依赖于摄像头和 ...
RCE之无字母数字RCE
无字母数字RCE,就是在字母和数字都被过滤的情况下构造出webshell,进而达到命令执行的目的。
通常,过滤的语句大致写法:
12345678<?php $command = $_GET['w']; if (preg_match("/[A-Za-z0-9]+/", $command)){ die(); } else { eval($command); }?>
其中,正则还可以写成
1if(preg_match('/^\W+$/', $command))
/^\W+$/中的\W 是一个预定义的字符类,表示 非单词字符,相对的\w表示单词字符。
单词字符(\w):
大小写字母 (a-z, A-Z)
数字 (0-9)
下划线 (_)
非单词字符(\W)是上面以外的任何字符,例如:
标点符号(如 !, @, #)
空格、换行符
其他非字母数字的字符
用运算符实现先上一下表
1、 异或运算符^
两个字符异或操作后,会得到一个新的字符,例如:
h和[进行异或操作,得到 ...
RCE之常见绕过方式
对一些常见的绕过方式进行总结
过滤了特定关键字
通配符。使用通配符?或*绕过对一些关键字的过滤
使用引号,例如flag.php,写为fl’’ag.php, echo `cat fla’’g.php`, l’’s, l””s
利用转意符号:l\s
利用斜杠:l/s
利用${Z}, $*:l${Z}s、l$*s
过滤了cat替代命令:tac、more、less、head、tail、nl、od
过滤了system函数
使用passthru()替换system()
使用shell_exec()、exec(),不会打印结果,需配合echo
使用反引号``,但是反引号的结果不会主动输出,需要使用echo命令输出执行结果,echo `ls`
过滤空格
%09(tab)
%20(空格本身的url编码)
%0a
${IFS}(Linux),eg:cat${IFS}flag.txt
$IFS$9(Linux),eg:cat$IFS$9flag.txt
<>、<,eg:cat<>flag.txt、cat<flag.txt
{},eg: ...
CVE-2024-9047复现及成因分析
CVE-2024-9047复现及成因分析第一次从源码层面逐步分析一个cve,头秃,但好在捋出来了,写得不好,望各位师傅见谅。
CVE-2024-9047 是一个影响 WordPress 插件 wp-file-upload 的严重漏洞,允许攻击者在前台读取和删除任意文件。漏洞存在于插件版本 <= 4.24.11 中的 wfu_file_downloader.php 文件中。攻击者可以通过构造特定的请求,利用 fopen 函数读取服务器上的敏感文件。
版本:<= 4.24.11
Fofa指纹:body=”wp-content/plugins/wp-file-upload”
成因分析安装了WordPress File Upload插件的系统,在其wp-content/plugins/wp-file-upload目录下的wfu_file_downloader.php 中调用了 wfu_fopen_for_downloader 方法:
12345678910111213141516171819202122function wfu_ ...
大模型提示词---Prompt Engineering(提示工程)
大语言模型相信现在大家都是用的非常多,但为了能够更准确、更匹配的得到我们想要的,就需要我们提供一些提示词给模型,例如平常互联网上整活时给模型发的,“假设你是我对象,请你用哄对象的语气和我说话,并且每次说完之后都要说一次mua~”。
提示词工程(Prompt Engineering)是指在与人工智能模型(尤其是语言模型)交互时,通过精心设计和优化输入的提示(prompt),以引导模型生成所需的输出。其目的是通过明确、结构化的语言指令、问题或任务描述,最大程度地提高模型生成内容的准确性、相关性和有效性。输入的提示词可以是一个问题、一个描述、一组关键词或上下文信息,用来告知模型我们希望得到的输出类型和内容。
提示词是一门经验科学,通常是基于启发式的,想要写出一段好的提示词需要很多很多次的测试来发现最好的提示词,而且能生产更有效的内容 。
为什么需要Prompt当前大语言模型(LLM)本身已经具备了极高的性能与复杂性,但是通过精心设计的Prompt可以协助挖掘其中的潜力,引导模型生成特定需求的输出。调整Prompt的过程,就是在改变我们和模型交流的语言和方式,并且这一调整的过程不需要我们调整 ...
参数化查询对SQL注入的防护思考---曾经自信的误判
写在前面记得大三的时候,有一门web开发的课程,当时的大作业就是开发一个系统,并且可以自行在其中做上一些安全防护。由于需要实现用户注册、登录、查询等等一系列需要与数据库进行交互的功能,防止SQL注入是很有必要的。当时经过在网上的一顿学习,发现使用PDO参数化查询可以有效防止SQL注入的呼声最高,于是自信满满地大作业里的所有与数据库进行交互了的位置都替换成了参数化查询的方式,并且答辩的时候向老师一顿鼓吹。
直到前两日,xsheep师傅突然在群里聊到之前尝试挖洞的一个站,通过一个注入点进行报错注入,已经通过database()和user()拿到了回显的情况下,想要再进一步,爆出表名等信息时出现了问题。
拿到了师傅分享的链接后,我也尝试了半天,确实一直没办法进一步利用,一直重复出现的都是那几个报错,甚至让我一度怀疑我的payload编写的问题。后来了解到,在特定情况下,PDO的预编译,好像真没法完全阻止我们注入的SQL语句。
参数化查询参数化查询是用于数据库操作的一种方法,能够在一定程度上防止SQL注入,其核心主要是预编译和绑定参数。
预编译:SQL语句和参数分离,数据库先对SQL语句模版进 ...