红队(攻防)
php
1.反单引号) 在PHP语言以及SQL语言中的作用分别是什么
1
2
|
在PHP中,反引号用于执行系统命令。实际上是shell_exec()函数的简写
sql中是引用标识符(表名、字段名、数据库名),避免与SQL保留字冲突。
|
2.SSRF混洞(服务端请求伪造)有什么漏洞利用思路?
1
|
原理:由于服务端提供了从其他服务器获取数据的功能,但没有对目标地址、协议等做过滤和限制,导致攻击者可以利用存在缺陷的Web应用作为代理,攻击远程和本地的服务器。
|
1
|
file_get_contents()、fsockopen()、curl_exec()、fopen()、readfile()等函数使用不当会造成SSRF漏洞。
|
思路如下
1
2
3
|
file://协议读本地文件
dict://协议探测开放的端口
gopher://发送post,get请求攻击内网,或者gopher协议写入定时任务,gopher协议写入ssh公钥等等打redis、mysql、fastcgi数据库之类的
|
注意:
1
2
3
4
5
6
7
|
注意
1.一般情况下PHP不会开启fopen的gopher wrapper
2.file_get_contents的gopher协议不能URL编码
3.file_get_contents关于Gopher的302跳转会出现bug,导致利用失败
4.curl/libcurl 7.43 上gopher协议存在bug(%00截断) 经测试7.49 可用
5.curl_exec() //默认不跟踪跳转,
6.file_get_contents() // file_get_contents支持php://input协议
|
1
2
3
4
|
防御措施:
限制协议:仅允许 http 和 https 协议,禁用 file://、gopher:// 等危险协议。
限制端口:限制请求的端口为常见的 HTTP 端口,如 80 和 443。
白名单:设置允许访问的 URL 白名单,限制访问内网 IP。
|
3.利用XSS漏洞可以达到什么效果? 有哪些防御XSS漏洞的手段/机制?
1
|
原理:嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的
|
一共反射型 ,存储型,DOM型
1
2
3
4
5
|
反射型:利用一般是攻击者通过特定手法(如电子邮件),诱使用户去访问一个包含恶意代码的 URL,当受害者点击这些专门设计的链接的时候,恶意代码会直接在受害者主机上的浏览器执行,一般出现在网站的搜索栏、用户登录口
存储型:攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。一般都是留言板
DOM型:客户端可以获得 DOM 中的数据并在本地执行,用户可以操纵 DOM 中的一些对象(恶意 JavaScript 脚本),而这些脚本没有经过适当的过滤和消毒,那么应用程序就可能受到基于 DOM 的 XSS 攻击。
|
攻击效果
1
2
3
|
信息窃取:窃取cookie,页面内容,表单数据
会话劫持与身份冒充:模拟用户操作 #2024newstar
页面篡改与钓鱼攻击
|
防御手段
1
2
3
4
|
输入过滤:设置黑白名单,过滤<、>、script、onerror等危险字符/关键词;限制输入长度。
输出编码:后端使用htmlspecialchars()等函数对输出内容进行HTML实体编码,将<转为<,>转为>。
Cookie保护:设置Cookie的HttpOnly=true,禁止JavaScript读取Cookie
内容安全策略(CSP):通过HTTP头限制脚本加载源(如Content-Security-Policy: default-src 'self'),阻止外部恶意脚本执行。
|
php-sql
1.sql注入原理
1
|
web应用传递的sql语句直接插入到数据库中执行sql语句,造成了sql注入
|
2.联合查询注入如何判断表中列的数量 (除了使用order by)
1
2
|
1.用union select 1,2,3....,通过不断尝试不同列数的SELECT直到不报错
2.用group by代替,比如'group/**/by/**/23,'
|
3.时间盲注过滤了sleep怎么打
1
2
3
|
benchmark代替:benchmark是测试表达式执行速度
笛卡尔积代替:多重笛卡尔积来制造巨大的数据量,从而产生时间延迟,例如:SELECT count(*) FROM information_schema.columns A, information_schema.columns B, information_schema.tables C;这意思就是数据库读取三张表的全部数据,生成所有可能的组合进行计数
|
4.order by注入的打法有什么
order by后既可以填列名或者是一个数字,并且据此进行排序
order by 盲注
1
2
3
4
5
6
7
8
|
1.结合union盲注:例如,我们可以在密码那列进行order by,即将字符串和密码进行比较。然后就可以根据页面返回的不同情况进行盲注
2.基于if()盲注:例如:order by if(表达式,1,(select id from information_schema.tables)),如果表达式为false时,sql语句会报错,导致查询内容为空,如果表达式为true是,则会返回正常的页面。利用ORDER BY不能处理多行结果的特性
3.基于时间的盲注:就是sleep+if,例如:order by if(表达式,1,sleep(1))
4.基于range的盲注:利用rang()为true和false时,排序结果是不同的,所以就可以使用rang()函数进行盲注了
payload: order by rand(ascii(mid((select database()),1,1))>96)
|
order by 报错注入
1
2
3
4
|
select * from ha order by updatexml(1,if(1=1,1,user()),1);#查询正常
select * from ha order by updatexml(1,if(1=2,1,user()),1);#查询报错
select * from ha order by extractvalue(1,if(1=1,1,user()));#查询正常
select * from ha order by extractvalue(1,if(1=2,1,user()));#查询报错
|
Mysql Order By注入总结 - 艾斯泽 - 博客园
sql注入之order by注入_sql注入 order by-CSDN博客
5.堆叠注入
1
|
原理:SQL语句中包含多个SQL语句(使用分号(;)来分隔),数据库服务器会依次执行这些SQL语句,从而导致多次SQL注入攻击
|
6.mysql8有什么特性
出现了两个新的关键字table(类似与select)和values(类似与row)
1
2
3
4
5
6
7
8
9
|
table与SELECT的区别:
1.TABLE始终显示表的所有列
2.TABLE不允许对行进行任意过滤,即TABLE 不支持任何WHERE子句
可以用来获取所有表名
table information_schema.schemata;
补充:values可以构造一个表,values可以接在union后面,可以判断列数
|
7.如何预防sql注入
1
2
3
|
1.设置黑名单过滤一些关键字
2.使用预编译的SQL语句和参数绑定,确保用户输入不会被解释为SQL代码的一部分。
3最小权限原则:数据库连接账户应该只拥有最小必要的权限
|
预编译作用详细如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
传统SQL执行: SQL语句 + 数据 → 一次性发送给数据库
预编译SQL: 1. 发送SQL模板 → 数据库编译
2. 发送参数 → 数据库执行
// 假设攻击者输入:admin' OR '1'='1
// 传统方式(字符串拼接)
SELECT * FROM users WHERE username='admin' OR '1'='1'
-- 数据库看到:完整的SQL语句,OR条件被解析为SQL逻辑
// 预编译方式(参数绑定)
-- SQL模板:SELECT * FROM users WHERE username=?
-- 参数值:"admin' OR '1'='1"(作为字符串整体)
SELECT * FROM users WHERE username='admin'' OR ''1''=''1'
-- 数据库看到:username等于字符串"admin' OR '1'='1",不会解析其中的SQL关键字
|
8.sql二次注入原理
1
|
原理:sql语句在后端代码中可能会被转义,但在存入数据库时还是原来的恶意数据(数据中一般带有单引号和#号),然后下次进入到 SQL 查询语句中导致sql注入(例如发生在登入注册页面)
|
python
1.Python语句’int’._class_的含义是什么, 该语句和什么漏洞有关
1
|
获取字符串 'int' 的类对象SSTI(服务器端模板注入),Python 沙箱逃逸,反序列化攻击,python代码执行
|
java
1.Java中的反射有什么作用
1
|
可以动态操作类、创建对象、调用方法和字段,类的结构而无需在编译时知道这些类的具体信息 #优点
|
缺点

2.Java反序列化的基本原理
1
|
反序列化时会自动调用对象的 readObject 方法,如果这个方法被恶意重写,可能执行任意代码
|
蓝队
1.当服务器被shiro反序列化打了,怎么根据流量包判断
拥有shiro反序列化框架的流量特征,rememberme=deleteme。