mysql语义分析_简单分析SQL注入语义分析库

本文介绍了开源SQL注入语义分析库libinjection的工作原理,包括其初始化过程、核心函数libinjection_is_sqli()的逻辑,以及如何通过特征码匹配进行SQL注入检测。libinjection的优势在于速度快、误报率低,适合用于SQL注入防护。
摘要由CSDN通过智能技术生成

一、前言

这次主要讲开源SQL注入语义分析库libinjection,如果有发现其他开源SQL语义分析库的欢迎告知。libinjection的程序分析由Simon友情提供,需要看完整报告的可以加群看。

二、libinjection程序分析

67de9ece72e9db6ad97cae34df679fe8.png从流程图上看,libinjection首先是初始化issqlii变量,接着设置数据结构并初始化变量state,libinjection_sqli_init()函数将初始化SQL检测所需的结构体,之后通过libinjection_is_sqli()函数进行具体分析,如果存在issqli,则将SQL注入识别特征复制进fingerprint变量并返回,如果不存在则将fingerprint变量设置为空并返回。

cb868b0fb985b77df293d838de012ab7.png上图是总的函数关系图,libinjection_sqli_init()函数的主要工作是将SQL注入识别特征码(指纹)加载进结构体,并完成各种内置变量的初始化。libinjection_is_sqli()的处理代码如下,根据代码来分析int libinjection_is_sqli(struct libinjection_sqli_state * sql_state)

{

const char *s = sql_state->s;

size_t slen = sql_state->slen;

if (slen == 0) {

return FALSE;

}

libinjection_sqli_fingerprint(sql_state, FLAG_QUOTE_NONE | FLAG_SQL_ANSI);

if (sql_state->lookup(sql_state, LOOKUP_FINGERPRINT,

sql_state->fingerprint, strlen(sql_state->fingerprint))) {

return TRUE;

} else if (reparse_as_mysql(sql_state)) {

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值