导航

想开发一款SQL注入的Burpsuite插件,有更好的思路吗?

#1
目前正在开发一款SQL注入的Burpsuite插件,主要目的是检测并利用SQL注入漏洞。实现了通过响应包的返回长度和状态码来判定是否存在注入,但是我希望能够根据响应body数据进一步增强检测的准确性。因此,想请教一下,除了这两种方法之外,有其他基于响应body的算法或技术可以用来判定SQL注入吗?
2025-03-06
#2
可以看看sqlmap的源码
2025-03-06
#3
https://github.com/saoshao/DetSql   这个项目不好用么
1.报错类型判断

请求中任一参数值+报错 poc 作为新参数值,即 value+poc,其中 poc 包括:',%DF',",%DF",`,其中%DF考虑到宽字节,同时增加了 URL 编码的单双引号,在遇到 json 数据时增加了 Unicode 编码的单双引号。
生成新请求后发送,响应匹配报错规则,添加了近 100 条正则匹配规则,匹配成功任一规则,即认为存在报错类型注入,标记该参数为 errsql,同时在括号中添加对应的报错正则规则作为备注一起显示,否则认为不存在报错类型注入。
2.数字类型判断

当 value 为数字时,且该 value 不为 json 的键值,将发起以下请求判断,否则该 value 将不再判断,
原始请求表示为:value->respbody,
poc1 请求:value-0-0-0->respbody1,请求完成后使用 Levenshtein 方法判断 respbody 和 respbody1 相似度是否超过 90%,如果不满足认为不存在数字类型的注入,否则将发送下一个请求判断,
poc2 请求:value-abc->respbody2,请求完成后使用 Levenshtein 方法判断 respbody2 和 respbody 相似度是否低于 90%并且 respbody2 和 respbody1 相似度也低于 90%,如果都满足即认为存在数字类型注入,标记该参数为 numsql。
3.order 类型注入

当 value 不为空时,发起以下请求判断,否则该 value 将不再判断,
原始请求表示为:value->respbody,
poc1 请求:value,0->respbody1,
poc2 请求:value,xxxxxx->respbody2,
首先使用 Jaccard 方法判断 respbody 和 respbody1 的相似度低于 90%,若满足继续发送 poc2 请求,判断 respbody 和 respbody2 的相似度低于 90%,若满足继续后续判断,若不满足则直接停止判断,
poc3 请求:value,1->respbody3,
poc4 请求:value,2->respbody4,
先发送 poc3 请求,使用 Jaccard 方法判断 respbody 和 respbody3 的相似度高于 90%,若满足则认为存在 order 类型的注入,若不满足继续发送 poc4 请求判断 respbody 和 respbody4 的相似度是否高于 90%,若满足则认为存在 order 类型的注入,标记该参数为 ordersql,否则认为不存在 order 类型的注入。
4.字符类型注入

如果为 json 格式的数据,该键值 value 需被双引号包裹才会发起后续请求判断,否则该 value 将不再判断,
原始请求表示为:value->respbody,
poc1 请求:value'->respbody1,此处为一个单引号,
poc2 请求:value''->respbody2,此处为两个单引号,
首先使用 Levenshtein 方法判断 respbody 和 respbody1 的相似度低于 90%,若满足继续发送 poc2 请求,判断 respbody1 和 respbody2 的相似度低于 90%,注意如果原始请求不存在数据 respbody 和 respbody2 的相似度往往较高,如果原始请求存在数据 respbody 和 respbody2 的相似度往往较低,所有此处判断 respbody1 和 respbody2 的相似度。若满足低于 90%继续后续判断,若不满足则直接停止判断,
poc3 请求:value'+'->respbody3,此处为两个单引号,
poc4 请求:value'||'->respbody4,此处为两个单引号,
先发送 poc3 请求,使用 Levenshtein 方法判断 respbody 和 respbody3 的相似度高于 90%,若满足则认为存在字符类型的注入,若不满足继续发送 poc4 请求判断 respbody 和 respbody4 的相似度是否高于 90%,若满足则认为存在字符类型的注入,标记该参数为 stringsql,否则认为不存在字符类型的注入。
5.布尔类型注入

如果为 json 格式的数据,该键值 value 需被双引号包裹才会发起后续请求判断,否则该 value 将不再判断,
原始请求表示为:value->respbody,
poc1 请求:value'||EXP(710)||'->respbody1
poc2 请求:value'||EXP(290)||'->respbody2
poc3 请求:value'||1/0||'->respbody3
poc4 请求:value'||1/1||'->respbody4
发送poc1请求,使用 Levenshtein 方法判断respbody和respbody1的相似度低于90%,若满足则继续发送poc2请求,使用 Levenshtein 方法判断respbody1和respbody2的相似度低于90%,若满足则直接发送poc4请求,使用 Levenshtein 方法判断respbody2和respbody4的相似度高于90%,若满足则判断存在布尔类型注入,标记为boolsql。若respbody1和respbody2的相似度高于90%,则发送poc3请求,再使用 Levenshtein 方法判断respbody和respbody3的相似度高于90%,若满足则直接发送poc4请求,使用 Levenshtein 方法判断respbody2和respbody4的相似度高于90%,若满足则判断存在布尔类型注入。
6.附加判断

除了前述通过计算相似度作为判断规则外还添加了响应长度的变化阈值作为判断辅助,从而丰富判断依据,例如两个响应长度相同时可直接判断相似度为百分之百,两个响应长度差超过某个值此处设为100,就将辅助判断的相似度定位百分之九十,在判断时如果希望此时的相似度较大(小)时为好,则会选择用算法计算出的相似度和辅助判断的相似度两者中较大(小)者去比较;如果两个响应的长度差很小,这种情况会先将两个字符串前后缀相同部分删除,若删除后的字符串中出现明显为poc的内容,则也会删除,删除后如果两个字符串变为空则判断相似度为100%,一个为空一个不为空则相似度为0,不满足前述情况则再使用算法计算出的相似度去比较。
https://www.pa55w0rd.online
2025-03-07
#4
自带的扫描不就能做到吗
生平事,天付与,且婆娑。几人尘外相视,一笑醉颜酡
2025-03-10
#5
还有xiasql也是你的那种需求
2025-03-17
#6
这个项目误报也多,而且检测满
2025-03-17
#7
sqlmap他是批量Payload进行测试的,实际上插件不需要这么多条件判定,这样导致一个问题一个参数注入探测发送大量的包
2025-03-17
#8
自带扫描大部分扫描不出来
2025-03-17
#9
xia sql这个项目去github看下试试
2025-03-18
#10
有个xiazhu不错,不过好像很久没更新了