Web安全测试常见漏洞-SQL注入和命令注入

SQL注入

原理:
程序在执行查询时,底层调用的是数据库查询语句,如我们要查一个叫Bob的人,需要前端输入Bob,再组成值

select * from user_table where name='Bob'

若此时我们前端输入aaa' or 1=1 or '1' = '1
这时候后端的查询语句就变成了

select * from user_table where name='aaa' or 1=1 or  '1' = '1'

相信熟悉SQL语句的友友们已经看出两句话的天壤之别了吧,第一句是查Bob,第二句因为有个or 1=1必成立项,是直接查所有内容出来。

正常情况下:前端提交的数据,应该是作为SQL的执行参数的,而在这种情况下,前端提交的数据直接会导致后端返回大量数据,试想若是身份证查询等场景有这种漏洞,后果会如何。

同理,delete也可如此,试想一下

delete 字段 where id='1'

规避方法参考

1.优先使用参数化查询
2.限制传参类型
3.将SQL中传入参数进行编码,而不是直接进行字符串拼接

远程命令注入

原理:
与SQL注入类似,程序在执行查询时,底层调用可能是方法+数据的模式,如我们要调用一个功能ping,我们输入的值是127.0.0.1,底层逻辑可能为

ping 127.0.0.1

很明显,调用的是ping方法,数据是127.0.0.1,试想一下,若此时我们输入的值为127.0.0.1 | ls ./
语句变成了

ping 127.0.0.1 | rm -rf ./

即在ping的同时通过管道符|删除了当前目录,后果可想而知

挖掘思路

1.能动态执行的场景
2.执行命令或者执行代码的场景

规避方法参考

对输入参数更加严格的校验

你可能感兴趣的:(安全测试,web安全,sql,数据库)