模糊查询点的注入小记录

模糊查询点的注入小记录

遇到一个注入点,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        
posted @ 2024-11-20 00:31  Expl0it  阅读(9)  评论(0)    收藏  举报  来源