一、SQL注入
SQL注入就是把SQL命令插入到Web表单然后提交到所在页面请求(查询字符串),从而达到欺骗服务器执行恶意的SQL命令
1、表单类注入
登录时SQL应该是这样: select * from user where username='chengzi' and password=md5('123456');
我们现在需要构建一个比如:在用户名输入框中输入: ’ or 1=1#,密码随便输入,这时候的合成后的SQL查询语句为:
select * from user where username='' or 1=1 #' and password=md5('123456');
等价于
select * from user where username='' or 1=1;
就可以登录成功了
2、从网页传入参数注入
这是SQL注入中最常见的方法,并且根据该注入原理有跟多SQL注入工具
同样,首先应测试是否存在注入漏洞,简单的:’ 或 and 1=1 and 1=2之类的SQL语句。
如果没有检测,直接运行SQL语句,说明有机会注入。
举例:
从参数注入,简单的测试方法是:
① http://www.xxx.com/index.php?id=2
② http://www.xxx.com/index.php?id=2' and 1=1
③ http://www.xxx.com/index.php?id=2' and 1=2
可以注入的表现:
① 正常显示(这是必然的,不然程序就有错)
② 正常显示,内容基本与①相同
③ 提示BOF或EOF(程序没做任何判断时)、或提示找不到记录(判断了rs.eof时)、或显示内容为空(程序加了on error resume next)
说明未进行特殊字符过滤处理,存在SQL注入漏洞
二、代码注入
1、表单提交类,提交javascript死循环代码
三、其它
1、欺骗后端
a、设置请求断点进行请求拦截,修改相关传参,测试后端是否做了校验
如:下单100元的衣服,提交订单时,我们设置请求断点进行拦截,修改参数100元为1元时,再次提交,应该是无法提交成功的,服务端给出提示“金额不足,无法购买!”
b、并发请求测试多线程是否加锁
如:余额100元,购买50元的衣服,设置断点拦击请求,并发请求5次,实际购买成功2件,其它3件服务端会给出提示“余额不足,无法购买!”
c、每日秒杀,每人每日限购1次
如:~~~~~~~~~
2、欺骗前端
a、设置响应断点,修改响应返回数据,测试前端
如:修改密码,需要输入手机号和验证码,提交后跳转至设置新密码页面,这时我们可以对提交后响应码或响应数据修改为请求成功时的,前端可以越过验证码跳转至设置新密码页面了。
3、敏感字段暴露和加密
a、数据库中存放重要字段需要进行加密处理存放
如:登录密码、支付密码、签名等
b、接口避免返回敏感重要字段
如:身份证号、银行卡号、登录、支付密码
c、重要功能需进行验证码身份认证
如:修改密码、转账、支付
4、登录需设置失效时间
5、每日登录失败需有次数限制
~~~~~~~~~~~待续~~~~~~~~~~~~~~~~~~~~