PHP反序列化漏洞漏洞利用:反序列化漏洞(Deserialization Vulnerability)是一种安全漏洞,存在于应用程序中对数据进行反序列化操作的过程中。当应用程序接收到外部传递的恶意序列化数据并进行反序列化时,攻击者可以利用这个漏洞执行未经授权的代码或导致应用程序受到攻击。
原理:既然是反序列化的话,首先要了解什么是序列化和反序列化以及他们的区别
序列化:就是将对象转化为字符串进行存储 class S{` `public $test="pikachu";``}`` ``$s=new S(); //创建一个对象`` ``serialize($s); //把这个对象进行序列化`` ``序列化后得到的结果是这个样子的:O:1:"S":1:{s:4:"test";s:7:"pikachu";}` `O:代表object` `1:表示该对象的类名的字节数(即类名长度为1)` `S:对象的名称` `1:表示该 ...
TGCTFAAA偷渡阴平:<?php$tgctf2025=$_GET['tgctf2025'];if(!preg_match("/0|1|[3-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $tgctf2025)){ //hint:你可以对着键盘一个一个看,然后在没过滤的符号上用记号笔画一下(bushi eval($tgctf2025);}else{ die('(╯‵□′)╯炸弹!•••*~●');}highlight_file(__FILE__);
打开一看发现过滤了一些特殊符号和1和3到9(感觉有点刻意了没有2(😀))这个是eval,正常是使用system的,不过’’””``都过滤了,正好sun师傅之前让我看看无参数rce,有用场了
var_ ...
4.变量覆盖:在PHP中,符号表(Symbol Table)是一个内部数据结构,用于跟踪当前脚本中定义的变量和它们的值。在PHP脚本执行期间,符号表记录了所有已经声明的变量及其对应的值,并且可以动态地添加、修改和删除这些变量。
extract:PHP extract() 函数用于将数组中的键作为变量名,将对应的值作为变量值导入到当前程序的符号表中
extract()导入变量名和值时,如果原来已经存在相同的变量名,那么旧的值会被数组中同名的健对应的值替换掉
<?php// 用户通过表单提交了一些数据,例如:$hobby='play';// 为了方便,直接使用 extract() 函数将 $_GET 数据导入到当前符号表中,以便后续使用extract($_GET);echo "用户: ".$name." 性别: ".$sex."<br>";echo "your hobby is $hooby";?>
在小皮上面测试,可以看到,本来hobby的值为play,可以是我们 ...
PHP特性总结上1.MD5和hash无限制在php里面,如果要判断相等的话,有==和===,前面的是弱相等,只要数值相等就ok了,但是后者的话呢,就是强比较了,需要类型和数值都要相等,在弱类型比较中,如果是字符串和数字判断,会把字符串转为数字再来判断是否相等,转换规则如下:
当一个字符串当作一个数值来取值,其结果和类型如下:如果该字符串没有包含’.',‘e’,'E’并且其数值值在整形的范围之内该字符串被当作int来取值,其他所有情况下都被作为float来取值,该字符串的开始部分决定了它的值,如果该字符串以合法的数值开始,则使用该数值,否则其值为0
例:
<?phpvar_dump("admin"==0); // admin开始不为数字,转为0 truevar_dump("1admin"==1); // 1admin开始为数字1,转为1 truevar_dump("admin1"==1) //admin1开始不为数字,转为0 falsev ...
SQL注入:原理:SQL注入(SQL Injection)是一种常见的Web安全漏洞,形成的主要原因是web应用程序在接收相关数据参数时未做好过滤,将其直接带入到数据库中查询,导致攻击者可以拼接执行构造的SQL语句。那什么是SQL了?结构化查询语言(Structured Query Language,缩写:SQL),是一种关系型数据库查询的标准编程语言,用于存取数据以及查询、更新、删除和管理关系型数据库(即SQL是一种数据库查询语言)即:注入产生的原因是后台服务器在接收相关参数时未做好过滤直接带入到数据库中查询,导致可以拼接执行构造的SQL语句
mysql查询知识:sql注入常用知识1.information_schema:表示所有信息,包括库、表、列2.information_schema.tables:记录所有表名信息的表3.information_schema.columns:记录所有列名信息的表4.table_schema:数据库的名称5.table_name:表名6.column_name:列名7.group_concat():显示所有查询到的数据
分析: 我们都知 ...
应急响应:应急响应-webshell查杀:靶机账号密码 root xjwebshell1.黑客webshell里面的flag flag{xxxxx-xxxx-xxxx-xxxx-xxxx}2.黑客使用的什么工具的shell github地址的md5 flag{md5}3.黑客隐藏shell的完整路径的md5 flag{md5} 注 : /xxx/xxx/xxx/xxx/xxx.xxx4.黑客免杀马完整路径 md5 flag{md5}
当你启动环境的一瞬间(你就没了0.5元),我这里使用的是finalshell,他会给你一些数字什么的,比如:44.444.444.44 /10.10.10.10
你使用finalshell连接,名称随便填,主机:44.444.444.44 账号和密码root xjwebshell 然后连接成功。就进入了终端
首先cd进入var/www/html(记得把html这个文件给他下载了)
文件作用:
用途与作用:它是 Linux 系统中存放 Web 应用 ...
XYCTF2025ezsql(手动滑稽):(真的没有想到是宽字节注入,第一次做,没有做出来,问学长要wp,我还没有复现出来,我是傻逼,现在只能复现了)
首先看见题目是sql注入漏洞,打开是让你登录平台,然后就fuzz测试过滤了空格,转义了’(所以要宽字节注入),关键字到是没有
然后就是使用substring这个函数:
解释:SUBSTRING(str, pos, len):
str:表示要从中提取子字符串的原始字符串。
pos:指定子字符串的起始位置。若为正数,则从字符串的开头开始计数;若为负数,则从字符串的末尾开始计数。
len:指定要提取的子字符串的长度。
username=1'%09or%09substring(database()%09FROM%092%09FOR%091)='a'%23&password=1(爆库)
username=admin'%09OR%09substring((select%09table_name%09from%09information_schema.tables%09where%09table_ ...
XYCTF:EZhttp:进行dirsearch查看有没有其他东西;发现robots.txt文件,然后一步一步进行,发现账号和密码发现说不是yuanshen.com的不要;改referer;Referer:yuanshen.com发现说不是XYCTF的浏览器;改UA头;User-Agent: XYCTF发现不是本地用户不能访问;client-IP:127.0.0.1发现不是ymzx.qq.com的代理;改via; via:ymzx.qq.com发现想吃cookie的小饼干;改cookie为XYCTF;获得flag
EZMAKE:先测试一下一些命令;然后试试新学的echo $(<flag)这个命令是将flag给重定向出来然后echo出来
发现被过滤双写试试得到flag
ez?Make:然后上面的方法用不了了;可以试试pwd查看当前的目录;然后看看cd ..可以用吗,发现可以使用;
ok了,可以cd ..&&cd ..&&cd ..&&more [d-h][k-m][k-m][9-z][]e-h进行正则匹配
εZ?¿м@Kε¿?:发现 ...
SSTI漏洞服务端模板注入SSTI(Server-Side Template Injection)从名字可以看出即是服务器端模板注入。比如python中的flask、php的thinkphp、java的spring等框架一般都采用MVC的模式,用户的输入先进入Controller控制器,然后根据请求类型和请求的指令发送给对应Model业务模型进行业务逻辑判断,数据库存取,最后把结果返回给View视图层,经过模板渲染展示给用户。(这篇文章主要是记录python的)
原理:首先要知道什么是模板,模板可以被认为是一段固定好格式,等着开发人员或者用户来填充信息的文件。通过这种方法,可以做到逻辑与视图分离,更容易、清楚且相对安全地编写前后端不同的逻辑。
SSTI:服务端接收攻击者的恶意输入以后,未经任何处理就将其作为 Web 应用模板内容的一部分,模板引擎在进行目标编译渲染的过程中,执行了攻击者插入的可以破坏模板的语句,从而达到攻击者的目的。这么说可能有点抽象,我们看一下下面的python中的基于jinja2的模板渲染。
`from flask import *``from jinja2 imp ...
show_sql注入上171:这个是考察万能密码的直接:’ or 1=1–+就直接出来了
这里说一下sql的基本查看语句:一般来说正常的是:
SELECT * FROM users WHERE username = ‘$input’ AND password = ‘$password’;
然后你注入万能密码就成为了:
SELECT * FROM users WHERE username = ‘’ or 1=1–+ AND password = ‘$password’;(–+表示注释,即注释之后的都不执行)
这样原本的查询条件就被破坏,or 1=1 使得整个 WHERE 条件恒为真,并且 -- 注释掉了后面的 AND password = '$password' 部分,最终可能导致攻击者绕过认证机制,获取到数据库中 users 表的所有记录等恶意操作。当然mysql数据库也不一定是’’进行闭合的,具体问题具体分析。
172:这个也是没有过滤,先试试万能密码:’ or 1=1–+成功回显说明是’进行闭合, ...