网络对抗技术 20164320 王浩 Exp 9 Web安全基础

 

基础问题回答:

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

  SQL注入就是通过修改,插入HTML表单的内容,从而实现对SQL语句的修改,通过修改过的DQL语句达到恶意访问信息的目的

  sql注入攻击是利用是利用SQL传输字符串漏洞,构造恶意语句,运行语句,对用户输入的数据进行合理化验证。

  构造方法:在用户名、密码登输入框中输入一些',--,#等特殊字符,实现引号闭合、注释部分SQL语句,利用永真式实现登录、显示信息等目的。

  防御:

    关闭或删除不必要的交互式提交表单页面

    对漏洞注入点相关代码进行关键字的过滤

    严格语句的检查

    将数据库里的内容进行加密处理

2.XSS攻击的原理,如何防御?

  原理:攻击者利用网站漏洞,输入可以显示在页面上的、对其他用户造成影响的HTML代码;由于受害者浏览器对目标服务器的信任,当其访问目标服务器上被注入恶意脚本的页面后,这段恶意脚本可以顺利执行,实现获取用户cookie并可以利用用户身份进行非法操作的目的。

  防御:

    不要轻易输入个人信息,如用户名密码

    对输入和URL参数进行过滤

    在输出数据之前对潜在的威胁的字符进行编码、转义、

3.CSRF攻击原理,如何防御?

CSRF就是冒名登录。跨站请求伪造的核心本质是窃取用户的Session,或者说Cookie,因为目前主流情况Session都是存在Cookie中.攻击者并不关心被害者具体帐号和密码,因为一旦用户进行了登录,Session就是用户的唯一凭证,只要攻击者能够得到Session,就可以伪装成被害者进入服务器.

防御:

  验证请求中的Token

  验证 Referer

  添加加随机验证

  设定cookie域

实验过程:

1.

Webgoat安装

  • 下载webgoat-container-7.0.1-war-exec.jar
  • 输入java -jar webgoat-container-7.0.1-war-exec.jar运行Webgoat,在实验过程中不要关闭。

  • 在浏览器中输入http://localhost:8080/WebGoat进入WebGoat登录界面
  • 输入用户名密码guest登录
  • 可能会出现安装失败的情况,原因是JDK版本过高,换一个就行

2.Command Injection

    • 选择 Injection Flaws -> Command Injection
      右键页面中复选框,选择inspect Element审查网页元素对源代码进行修改,在末尾添加"& netstat -an & ipconfig"
    • 点击 view,看到网络端口使用情况和 IP 地址,攻击成功

 

3.Numeric SQL Injection

    • 选择 Injection Flaws -> Numeric SQL Injection
      右键页面中复选框,选择inspect Element审查网页元素对源代码value="101"进行修改,在城市编号101后面添加or 1=1
    • 点击 Go,可以看到攻击成功
       

4.log spoofinf

  • 选择 Injection Flaws -> Log Spoofing
  • 在User Name中输入csb%0d%0aLogin Succeeded for username: admin利用0D%(回车)和%0A(换行)让其在日志中显示两行
  • 输入任意密码后点击 Login,成功将用户名追加到日志文件中。

5. String SQL Injection

基于以下查询语句构造自己的 SQL 注入字符串。   SELECT * FROM user_data WHERE last_name = 'Your Name'  

 下面的表格,允许用户查看他们的信用卡号码。尝试通过 SQL 注入将所有信用卡信息显示出来。尝试的用户名是“Smith”。

  输入Smith时只能查询到Smith的信息,当我们输入Smith' or 1=1--或者' or 1=1--时就使得条件永远为真,可以查询所有的信息。

 

6.Blind Numeric SQL Injection

下面的表单允许输入一个帐号,并检测该帐号是否合法。使用该表单的返回信息(真或假)测试检查数据库中其它条目信息。

  您的目标是找到pins表中c_number字段值为 1111222233334444 的记录中pin字段的 数值。pin字段类型为int整型,输入找到的数值并提交。

  通过AND条件来判断,当两个条件都成立的时候即都为真,输出为Valid,当有一个为假即输出Invalid。这样,我们就可以利用这个方法来查找pin值的范围。

 

首先尝试 101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 5000 );

  101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') < 2500 ); 

 

最后多次尝试为2364

7.数据库后门

原理:数据库通常作为一个 Web 应用程序的后端来使用。利用查询的脆弱性创建触发器

输入101,得到该用户的信息。我们可以看到,输入的语句没有验证,很容易进行 SQL 注入

输入注入语句101; update employee set salary=18000

输入注入语句101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='sxx@hackme.com'WHERE userid = NEW.userid

BEFORE/AFTER 参数指定了触发执行的时间,在事件之前或是之后

FOR EACH ROW 表示任何一条记录上的操作满足触发事件都会触发该触发器,也就是说触发器的触发频率是针对每一行数据触发一次

原理:数据路可以存储恶意活动,比方说创建一个触发器,在数据库管理系统上调用另 一个数据库操作,该触发器在创建新用户时,将每个新用户的 Email 地址设置为攻击者的地址。

8.Blind String SQL Injection

  • 这次查询的字段是一个字符串而不是数值
  • 输入101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) < 'H' );取得 pin 字段数值的第一个字母,判断其是否比字 母“H”小
  • 经过多次测试和页面的返回数据,最终判断出PIN字段的值为Jill

9.CSRF攻击

    • 以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件。
    • 在 XSS - > Cross Site Request Forgery(CSRF)
      页面,查看右下方 Parameters 中的 src 和 menu 值,分别为320和900。
    • 在Message框中输入<img src="http://localhost:8080/WebGoat/attack?Screen=320&menu=900&transferFunds=5000" width="1" height="1" />点击 Submit (其中语句中的&transferFunds=5000,即转走的受害人的金额;宽高设置成1像素的目的是隐藏该图片)
    • 输入任意Title,提交后在Message List中生成以Title命名的链接。点击链接,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的。
       

10.CSRF Prompt By-Pass

  • 在 XSS - > CSRF Prompt By-Pass 页面,查看右下方的Parameters中的src和menu值,我的分别为279和900。
  • 输入任意的Title,在message中输入

      <iframe src="attack?Screen=279&menu=900&transferFunds=5000"> </iframe>
      <iframe src="attack?Screen=279&menu=900&transferFunds=CONFIRM"> </iframe>
  • 点击 Submit 生成以Title命名的链接,点击链接,攻击成功

11.CSRF Token By-Pass

    • 向包含恶意转账请求的新闻组发送电子邮件。要成功完成,需要获取有效的请求令牌。显示转账表单的页面包含有效的请求令牌。转账页面的URL是“攻击”servlet,带有本课的“屏幕”和“菜单”查询参数以及额外的参数“transferFunds=main”。加载此页面,读取令牌并将令牌附加到伪造的请求中,以转移资金。
    • 在XSS - >CSRF Token By-Pass
      页面查看网页http://local host:8080/WebGoat/attack?Screen=511&menu=900&transferFunds=main生成的资金转账页面的表单内容。
    • 结合token的值构造伪造的URL,附加转账参数4000,通过frame->forme的路径可以读取并保存CSRFToken参数。

  •       <script>
          var readToken = function(){
          var doc = document.getElementById("frame1").contentDocument
          var token = doc.getElementsByName("CSRFToken")[0].getAttribute("value");
          alert(token);
          var frame2 = document.getElementById("frame2");
          frame2.src = "http://127.0.0.1:8080/WebGoat/attack?Screen=511&menu=900&transferFunds=4000&CSRFToken="+token;
          }
          </script>
          <iframe id="frame2" >
          </iframe>
          <iframe id="frame1" onload="readToken()" src="http://127.0.0.1:8080/WebGoat/attack?Screen=511&menu=900&transferFunds=main" >
          </iframe>

实验总结:

终于结束啦!开心!

posted on 2019-05-25 20:48  王某先森  阅读(167)  评论(0编辑  收藏  举报