SQL注入与libinjection分析(5)源码分析之指纹函数fingerprint和查找函数lookup_word剖析

SQL注入与libinjection分析(5)源码分析之指纹函数fingerprint和查找函数lookup_word剖析


SQL注入与libinjection分析系列:
MYSQL命令大全
https://blog.csdn.net/lqy971966/article/details/104922862
SQL注入与libinjection分析(1)SQL注入
https://blog.csdn.net/lqy971966/article/details/105269658
SQL注入与libinjection分析(2)Libinjection
https://blog.csdn.net/lqy971966/article/details/105273753
SQL注入与libinjection分析(3)源码分析之一些重要的结构体说明
https://blog.csdn.net/lqy971966/article/details/106195224
SQL注入与libinjection分析(4)源码分析之整体框架解读
https://blog.csdn.net/lqy971966/article/details/106857168
SQL注入与libinjection分析(5)源码分析之指纹函数fingerprint和查找函数lookup_word剖析
https://blog.csdn.net/lqy971966/article/details/106902216

1. libinjection_sqli_fingerprint

	/* 重新置位 sql_state 因为,sql注入三种形式都调用此接口,每次调用都重新置位 */
	libinjection_sqli_reset
	
	/* 
		libinjection_sqli_fold
		这个函数就是计算字符的指纹/令牌
		返回值: left 是已经折叠或处理的token数量
		
		1. 跳过最初的注释|左括号|一元运算符
		2. 如果全是注释|左括号|一元运算符 则返回0 否则 执行下一个字符
		3. 循环 while(1)
			3.1 如果处理的指纹超过 MAX_TOKENS >= 5个,则特殊处理
				pos>5 令tokenvec[5]覆盖tokenvec[1] 再使得pos=2;left=0 //就是假设未指纹化 并且pos从2开始
				pos=5 只令pos=1;left=0	//就是假设未指纹化 并且pos从1开始
			3.2 如果 left >= 5 ,那么重头开始 , left = pos
			3.3 处理两个指纹的情况 
				上一个token.type不等于TYPE_NONE;并且pos<=5;并且pos - left < 2,则依次往后计算指纹
				3.3.1 去除重复字符,如 ss->s 
				3.3.2 语法合并 如 "UNION" + "ALL" -> "UNION ALL" 
				3.3.3 处理 TSQL 相关, IN/NOT IN 操作
			3.4 如果两个指纹未匹配,则处理三个指纹的情况
				按照各个情况进行处理
		4. 如果有4个或更多指纹+注释再处理
	*/
	libinjection_sqli_fold
	
		/* 
			libinjection_sqli_tokenize
			这个函数就是计算具体每个字符的指纹/令牌
			返回值: 是否转化成功
			1. 如果是字符串开始,并且是单引号或者双引号模式,则假定以引号开头
			2. 依次取输入sql字符串的每个字符,
			   然后通过 char_parse_map 查找对应的解析函数,进行解析,得到指纹/令牌
			注意:  这里面的有些函数处理还是很复杂的 
				   比如 parse_number 需要明白sql注入的业务才好看懂代码
		*/
		libinjection_sqli_tokenize

2. libinjection_sqli_lookup_word

	/*
		判断黑名单和非白名单
	*/
	libinjection_sqli_check_fingerprint 
		/* 依次取指纹字符,进行拼接,然后 进行二分查找 is_keyword */
		libinjection_sqli_blacklist
			
		/* 
			减少误报的处理:
			处理2个指纹的情况:注释是否包含sp_password;1 union;#注释;1c…/x;
			处理3,4,5个指纹的情况
		*/
		libinjection_sqli_not_whitelist
	
	/*
		判断str是否命中指纹库sql_keywords 中的指纹
		这里使用二分查找 bsearch_keyword_type
	*/
	bsearch_keyword_type
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值