模糊查询点的注入小记录
模糊查询点的注入小记录
遇到一个注入点,sqlmap跑不出来。看了下源码,确认一定是存在注入。但是后端屏蔽了数据库异常。由于我是白盒测试,可以直接搜索应用日志进行语句构造。
场景:
有个搜索框,这里是可以搜索将输入匹配给多个数据库字段进行查询搜索的。
select `id`, `name`, `utype`, `limiting`, `xstatus`
from tablea
where (`limiting` = ? )
and (`xtype` = ?)
and (
(`name` LIKE '%注入点%' )
or (`name2` LIKE '%注入点%' )
or (`name3` LIKE '%注入点%' )
)
ORDER BY `score` DESC, `id` DESC
LIMIT 30;
接口只有一个输入点,在sql语句中,用户输入被引用了多次。
而且在这个点很奇怪的是我使用的注释都无法跳过后续的语句。(感觉是orm 的问题。)
答案
这个点的关键是如何封闭 like 语句。
程序员代码中模糊匹配大概率是前后都拼接了 %
比如:
fmt.sprintf('%%%s%%', search)
这时候我们需要构造一个 Like ‘%’ 来封闭前面的like,再使用 and 拼接盲注语句 ,最后在构造一个 like来封闭这个语句。
最终的sql 语句如下
' and length(database())>3 and 'a' like 'a