安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。
目录
一百二十一、CSRF、SSRF 和重放攻击有什么区别? 一百二十二、说出至少三种业务逻辑漏洞,以及修复方式? 一百二十三、nmap,扫描的几种方式 一百二十四、sql 注入的几种类型? 一百二十五、报错注入的函数有哪些?10 个 一百二十六、延时注入如何来判断? 一百二十七、如何拿一个网站的 webshell? 一百二十八、sql 注入写文件都有哪些函数? 一百二十九、如何防止 CSRF?
一百二十一、CSRF、SSRF 和重放攻击有什么区别?
这三种攻击都属于Web安全漏洞,但针对不同层面:
- CSRF(Cross-Site Request Forgery,跨站请求伪造):攻击者利用用户已登录的身份,诱导用户执行非授权的操作(如转账或修改设置)。它依赖于用户的会话凭证。
- SSRF(Server-Side Request Forgery,服务器端请求伪造):攻击者操纵服务器向内部或外部系统发送恶意请求(如访问内网资源)。它利用服务器的信任机制。
- 重放攻击(Replay Attack):攻击者截取合法请求并进行重复提交(如重放登录凭证),以绕过身份验证。它不修改请求内容,只复制。
下表总结了主要区别(基于攻击目标、机制和防御方式):
攻击类型 攻击目标 核心机制 常见防御方式 CSRF 用户会话 诱骗用户执行恶意请求(如钓鱼邮件) 使用CSRF tokens、SameSite Cookie属性 SSRF 服务器资源 服务器被利用发送请求 输入验证过滤、限制服务器出站请求 重放攻击 网络通信安全 重复发送截获的合法数据包 时间戳机制、一次性令牌(nonce) 补充说明:
- CSRF 针对客户端用户,SSRF 针对服务器端,重放攻击针对数据传输过程。
- 实际中,三者可能结合使用(如SSRF导致CSRF),防御需多层防护。
一百二十二、说出至少三种业务逻辑漏洞,以及修复方式?
业务逻辑漏洞源于应用设计缺陷,而非技术漏洞。以下是三种常见类型及修复方式(基于OWASP建议):
- 价格篡改漏洞
- 描述:攻击者修改商品价格参数(如通过Burp Suite修改POST请求),以低价购买高价商品。
- 修复方式:服务器端验证所有价格计算;使用签名机制(如HMAC)确保数据完整性;避免将敏感数据存储在客户端。
- 权限绕过漏洞
- 描述:用户通过修改URL参数(如ID=123)访问未授权资源(如其他用户的数据)。
- 修复方式:实施严格的访问控制列表(ACL);每次操作前检查用户角色和权限;使用服务端会话管理。
- 密码重置逻辑缺陷
- 描述:攻击者利用弱验证机制(如仅验证邮箱格式)重置他人密码,或暴力破解验证码。
- 修复方式:引入多因素认证(MFA);限制密码重置尝试次数;使用时间敏感令牌(有效期短)。
补充说明:
- 业务逻辑漏洞常被忽略,但危害高(如导致金融损失),建议定期进行威胁建模和渗透测试。
一百二十三、nmap,扫描的几种方式
nmap(Network Mapper)是网络扫描工具,支持多种扫描技术。以下是常见的7种扫描方式(控制在10个以内):
- TCP SYN扫描(-sS)
- 半开放扫描,发送SYN包但不完成握手;速度快且隐蔽。
- TCP Connect扫描(-sT)
- 完成完整TCP握手;适用于无权限用户,但易被日志记录。
- UDP扫描(-sU)
- 扫描UDP端口(如DNS或SNMP服务);速度慢但必要检测无响应服务。
- ACK扫描(-sA)
- 发送ACK包探测防火墙规则;用于绕过简单过滤。
- NULL扫描(-sN)
- 发送无标志位TCP包;针对特定系统(如Windows)探测开放端口。
- Xmas扫描(-sX)
- 发送FIN、URG、PSH标志位;类似NULL扫描,用于混淆IDS。
- 操作系统探测(-O)
- 基于TCP/IP指纹识别目标系统(如Linux或Windows)。
补充说明:
- 扫描方式可根据需求组合(如
nmap -sS -O target.com
);使用时需遵守法律。
一百二十四、sql 注入的几种类型?
SQL注入通过注入恶意SQL代码,操纵数据库查询。以下是主要的6种类型(基于攻击原理):
- 基于错误的注入(Error-based)
- 利用数据库错误信息(如MySQL错误)泄露数据。常用于快速获取信息。
- 基于布尔的盲注(Boolean-based Blind)
- 通过真/假条件响应(如页面内容变化)推断数据;不依赖错误信息。
- 基于时间的盲注(Time-based Blind)
- 使用延时函数(如
sleep()
)观察响应时间判断条件真假。- 联合查询注入(Union-based)
- 注入
UNION SELECT
语句合并结果;直接获取数据库内容。- 堆叠查询注入(Stacked Queries)
- 执行多个SQL语句(如
; DROP TABLE users
);常用于高权限攻击。- 带外查询注入(Out-of-band)
- 通过DNS或HTTP请求将数据外传;用于绕过防火墙。
补充说明:
- 所有类型都源于输入未过滤,修复需使用参数化查询(如Prepared Statements)。
一百二十五、报错注入的函数有哪些?10 个
报错注入利用数据库函数触发错误信息泄露数据。以下是10个常见函数(基于MySQL示例,其他数据库类似):
extractvalue()
- 用于XML解析错误(如extractvalue(1,concat(0x7e,version()))
)。updatexml()
- 类似extractvalue,通过XML路径错误泄露数据。floor()
- 配合rand()
和group by
触发重复键错误(如select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x
)。exp()
- 数值溢出错误(如exp(~(select*from(select user())x)
)。pow()
- 类似exp,通过超大指数触发错误。geometrycollection()
- GIS函数参数错误泄露数据。polygon()
- 地理空间函数错误。multipoint()
- 类似polygon,用于特定数据库。multilinestring()
- GIS函数触发语法错误。name_const()
- 低版本MySQL错误(如name_const(version(),1)
)。补充说明:
- 这些函数需结合注入点使用(如WHERE子句);修复建议启用数据库错误日志过滤。
一百二十六、延时注入如何来判断?
延时注入(Time-based Blind SQL Injection)通过引入延时函数判断查询条件真假。判断步骤如下:
- 识别潜在注入点:在输入字段(如URL参数或表单)添加时间相关函数(如
sleep(5)
),观察响应是否延迟。- 构建条件查询:注入布尔条件语句(如
if(1=1,sleep(5),0)
),如果响应延迟5秒,则条件为真。- 逐位提取数据:通过二分法或逐字符判断(如
if(ascii(substr(database(),1,1))>100,sleep(2),0)
),根据延迟推断数据值。- 验证工具辅助:使用工具(如sqlmap)自动检测延时参数(
--technique=T
)。补充信息:
- 常见延时函数:MySQL的
sleep()
、PostgreSQL的pg_sleep()
;防御需过滤输入和限制查询执行时间。
一百二十七、如何拿一个网站的 webshell?
获取webshell(一种恶意脚本用于控制网站服务器)需利用漏洞,但仅限授权测试(如渗透测试)。过程如下:
- 漏洞利用前期
- 识别漏洞:通过扫描(如nmap或Burp Suite)发现弱点(如SQL注入或文件上传)。
- 关键步骤
- 上传webshell:利用文件上传漏洞(如绕过扩展名检查)上传PHP或ASP脚本(常见工具:AntSword或BeEF)。
- 注入写文件:通过SQL注入(如
into outfile
)写入webshell到服务器目录。- 代码执行:远程命令执行(RCE)漏洞执行脚本创建webshell。
- 后期控制
- 访问webshell URL执行命令(如文件管理或提权)。
防御建议:强化上传过滤、禁用危险函数(如
eval()
)、定期审计代码。
重要:未经授权操作属违法,请仅在合法渗透测试中实施。
一百二十八、sql 注入写文件都有哪些函数?
在SQL注入中,可利用函数写入文件(如webshell)。以下是常见的6个函数(基于MySQL):
into outfile
- 标准文件写入(如select '恶意代码' into outfile '/var/www/shell.php'
);需FILE权限。into dumpfile
- 类似outfile,但写入二进制文件;避免字符转换。load_file()
+ 外部工具 - 读取文件后结合其他漏洞写入(如通过日志文件注入)。secure_file_priv
配置绕过 - 修改MySQL配置允许写入(需高权限)。mysqldump
命令注入 - 在注入点执行系统命令写入文件(如; system echo '代码' > shell.php
)。- PostgreSQL的
COPY TO
或pg_write_file()
- 其他数据库类似函数。补充说明:
- 写入需绝对路径和权限;防御建议限制数据库FILE权限和使用WAF。
一百二十九、如何防止 CSRF?
防止CSRF(跨站请求伪造)的关键是验证请求来源。以下是5种核心防御措施:
- CSRF Tokens
- 服务器生成唯一令牌嵌入表单或Cookie,每次请求验证;令牌需随机且过期。
- SameSite Cookie属性
- 设置Cookie为
SameSite=Strict
或Lax
阻止跨域请求携带。- Referer/Origin头检查
- 验证HTTP头部
Referer
或Origin
是否来自可信域。- 关键操作添加额外认证
- 敏感操作(如转账)要求重新输入密码或2FA。
- 框架内置防护
- 使用现代框架(如Spring Security或Django CSRF中间件)自动处理。
补充信息:
- CSRF常见于GET请求,建议敏感操作用POST方法;定期安全测试可发现漏洞。