20145319 《网络渗透》web安全基础实践

问题回答

  • Sql注入攻击原理,如何防御

    • 攻击原理:由于对于用户输入并没做出相应限制,因此可以通过构造特定的sql语句,达到自身的一些非法目的
    • 防御方法:对于输入的字符做出限制,例如长度不能太长,不能包含一些特殊字符,使其无法构造sql语句
  • XSS攻击的原理,如何防御
    • 攻击原理:跨站脚本攻击,其原因也在于对于用户的输入字符没有做出限制,一些恶意用户可以将自身的恶意代码插入在url等地方,诱惑别人访问从而达到目的
    • 防御方法:与防御sql注入类似,要检查用户的输入字符串,并做出限制,例如过滤script这类敏感词
  • CSRF攻击原理,如何防御
    • 攻击原理:通过劫持会话,伪造身份等方式来达到一些非法目的,例如转账,支付等
    • 防御方法:使用验证码,表单中附加随机值,以此来防止冒充,在对于用户的隐私数据尽量进行加密处理,加密传输

实验过程

  • 键入命令java -jar webgoat-container-7.0.1-war-exec.jar开启webgoat

  • 浏览器中输入http://127.0.0.1:8080/WebGoat使用默认用户名和密码登录即可

sql注入练习(字符串注入)

  • 在菜单栏中选择String SQL Injection

  • 第一题大意是要求我们使用sql注入来调用全部用户的银行卡信息(英文原文就不再补充了),实现sql注入的关键就是如何构造出我们想要的sql语句,我们首先来观察网站给出的示例

  • 我们可以很轻易的找出网站是如何将用户输入的字符串拼接到早已经设计好的字符串中组成sql语句的——将输入的字符串填入到最后的引号之间,而我们如何能将所有的用户信息输出——只需要将where后的条件构造成永远为真即可

  • 首先我们要使用引号闭合第一个限制条件last_name并在后面再加上我们的构造的条件,使其永远为真,例如or 1=1或者or 2=2这类均可,于是,我们填入的字符串可以如下

sql注入练习(数字型)

  • 在菜单栏中选择Numberic SQL Injection

  • 本次的注入和上次不同,该题并没有文本框让我们直接进行输入操作,我们只能通过滑动文本框选择地点,sql语句的生成代码可能是写在web页面的源码中,也可能是在后台服务中进行,但是无论是哪一种,表单都需要将搜集到的信息写进数据包中通过网络传输给后台,这就给了我们篡改的机会

  • 我们先随便选择一个地点并进行查询,根据其反馈的sql语句来看,我们需要修改的就是station部分,之后我们就需要用到另一个工具burp-suite,通过将burp-suite设置浏览器的代理服务器,作为中间服务器,这样我们就可以截获从浏览器中发送出去的所有数据包,并将其中内容修改成我们想要的样子

  • 打开burp-suite在proxy的options选项中添加新的代理(默认为8080,不过被apache2占用了)

  • 修改了浏览器的代理服务器之后,随便选择一个城市就会发现burp-suite中已经抓到了我们刚刚发送出去的数据包(我这次选择了new york,station=103)

  • 其中第一行中的station部分就是我们这次修改的目标了,将station修改成station=103 or 1=1之后点击forward将数据包发送,查看response包,结果却和想象中的又一些出入(显示505错误)

  • 这是因为我们在修改的时候并没有注意到编码问题,在url编码中,并无法直接识别空格和等于号,因此在读取http版本时候发生了错误,无法得到正确结果,在查询url编码之后(空格为%20,等于号为%3d),将station修改成station=103%20or%201%3d1,之后点击forward即可得到正确结果

sql注入练习(命令型)

  • 命令型注入就是通过我们已掌握的sql注入的方法,给目标操作系统注入dos命令(这里依然通过burp-suite修改数据包的方式来完成注入),第一步还是查看反馈的sql语句

  • 我们观察反馈的sql语句,首先就需要使用双引号封闭第一部分,再通过&&附加上我们的另一部分想要执行的命令,例如"&&echo 5319",再注意url编码的问题,在helpfile栏的最后添加"%26%26echo%205319"就可以得到结果

Log spoofing

  • 题意是要我们使用管理员admin身份完成登录,其实就只是要根本的目的是将管理员admin登录成功这一条记录写进日志中

  • 首先我们进行尝试,无论我们输入什么username,日志都显示登录失败

  • 这次我尝试对输入的username做出一些改变输入guest ok来查看反馈结果

  • 这样我们就有一个思路如果我们输入任意用户名之后,接上我们想要写进日志里的记录是不是就达到了我们的目的,于是我们在考虑换行符的编码的情况下可以这样构造这样一条语句guest%0aLogin Succeeded for username:admin最后结果显示欺骗成功

sql注入练习(盲数字注入)

  • 按照题目的意思是,我们可以验证已经输入的数字是否合法,例如101,因此我们可以构造条件1 AND 条件2,观察最终结果是否合法来判断条件2是否为真
  • 例如我们可以构造101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 5319 );来验证其设定的pin值是否大于5319,按照这个原理,我们可以不断的缩小所要搜寻的pin的值,直到找到该pin值
  • 不过我不是很理解的是,为何不通过直接输入数字观察结果为valid或者invalid来判断该数字大于还是小于pin值,通过二分法同样可以一步一步逼近设定的pin值,并不知道为何还需要注入

sql注入练习(盲字符串注入)

  • 基本思路类似于之前的盲数字注入,只是猜测的对象变成了字符所对应的ascii码,从根本上来说其实还是一种对数字的猜测
  • 构造101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), x, y) = 'h' );来测试出我们需要的字符串到底是啥
  • 因为这个测试次数较之上一个实验要多,所以完全依靠手工输入的工作量太大,建议学习蔡野同学的做法,使用burp-suite中的intruder中的payloads来进行爆破,一一测试所有可能性

xss练习(存储型)

  • 大意就是它会将你填写在文本框中的内容存储起来并发给他人,包括javascript代码

  • 所以这个我们只需要在文本框中随便填写一些代码作为实验即可,例如

      <script>
    alert(5319);
    </script>
  • 当你点开下方的链接时就会弹出内容为5319的对话框

xss练习(反射型)

  • 看了一下题目中的介绍,大概意思就是在反射型xss攻击中,攻击者可以往其他网站的url网址部分中插入script代码,来发给他人,来实现自身目的,与上一个练习的内容基本类似(一个直接写在文本中,一个写在网址里)
  • 例如:www.baidu.com/<script>alert(5319);</script>输入之后就会弹出内容为5319的对话框

xss练习(跨站脚本钓鱼攻击)

  • 在菜单栏中依次选择Cross-site scripting,phishing with xss,这个攻击类似于上一个练习的一个进阶版,不仅能插入script标签还能插入其他标签构成完整的web代码(如下)

      </form>
    <script>
    function hello(){
    alert("hello,5319");
    }
    </script>
    <form>
    <br><br><h2>please input your stu_number and pwd</h2><br><br>
    stu_number:
    <br><input type="text" name="stunumber"><br>
    password:
    <br><input type="password" name="pwd"><br>
    <input type="submit" name="submit" value="login" onclick="hello()"> </form>
  • 将如下简单的代码输入到输入框中,弹出如下界面,输入学号密码点击Login则会弹出hello,5319的弹窗,只要修改scprit标签中的函数,就可以实现更多非法功能,例如记录下用户输入的用户信息等

CSRF Prompt by-pass

  • 其实这个比较好实现,为了成功完成欺骗,您需要获得一个验证请求Token,这个就只需要通过文本框中嵌入两个标签,一个实现用户转账,一个实现确认界面,显示相关表单的外部参数为transferFunds=main,构造相应语句就可以实现我们的目的

      hello
    <img src='attack?Screen=400&menu=800&transferFunds=zk19'zk19 width='1' height='1'> <img src='attack?Screen=400&menu=800&transferFunds=CONFIRM' width='1' height='1'>

20145319 《网络渗透》web安全基础实践的更多相关文章

  1. 20145334赵文豪网络对抗Web安全基础实践

    1.SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的目的. 对于SQL注入攻击的防范,我觉 ...

  2. 20145306 网路攻防 web安全基础实践

    20145306 网络攻防 web安全基础实践 实验内容 使用webgoat进行XSS攻击.CSRF攻击.SQL注入 XSS攻击:Stored XSS Attacks.Reflected XSS At ...

  3. 20155324《网络对抗技术》web安全基础实践

    20155324<网络对抗技术>web安全基础实践 实验内容 使用webgoat进行XSS攻击.CSRF攻击.SQL注入 实验问答 SQL注入攻击原理,如何防御 ①SQL注入攻击是攻击者在 ...

  4. 20155326《网络对抗》Web安全基础实践

    20155326<网络对抗>Web安全基础实践 实验后回答的问题 SQL注入攻击原理,如何防御? 原理:SQL注入攻击指的是在Web应用对后台数据库查询语句处理存在的安全漏洞,通过构建特殊 ...

  5. 20145203盖泽双 《网络对抗技术》实践九:Web安全基础实践

    20145203盖泽双 <网络对抗技术>实践九:Web安全基础实践 1.实践目标 1.理解常用网络攻击技术的基本原理. 2.Webgoat下进行相关实验:SQL注入攻击.XSS攻击.CSR ...

  6. 20145236《网络对抗》Exp9 web安全基础实践

    20145236<网络对抗>Exp9 web安全基础实践 一.基础问题回答: SQL注入攻击原理,如何防御 SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或 ...

  7. 20145215《网络对抗》Exp9 Web安全基础实践

    20145215<网络对抗>Exp9 Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符 ...

  8. 20145208 蔡野 《网络对抗》Exp9 web安全基础实践

    20145208 蔡野 <网络对抗>Exp9 web安全基础实践 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验后回答问题 (1)SQL注入攻击原理,如何 ...

  9. 20145308 《网络对抗》Web安全基础实践 学习总结

    20145308 <网络对抗> Web安全基础实践 学习总结 实验内容 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 基础问题回答 (1)SQL注入攻击原理, ...

随机推荐

  1. MySQL事务隔离级别详解(转)

    原文: http://xm-king.iteye.com/blog/770721 SQL标准对事务定义了4种隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的.低级别的隔 ...

  2. [py]python的继承体系-源码目录结构

    python3安装目录 pip install virtualenv pip install virtualenvwrapper pip install virtualenvwrapper-win m ...

  3. 前m大的数(哈希入门)&&sort

    http://acm.hdu.edu.cn/showproblem.php?pid=1280 普通方法(625ms) #include <stdio.h> #include <str ...

  4. R中基本函数学习[转载]

    转自:https://www.douban.com/note/511740050/ 1.数据管理 numeric:数值型向量 logical:逻辑型向量 character:字符型向量list:列表 ...

  5. loadrunner 接口性能脚本编写(Get请求和Post请求)

    前段时间接触了一下loadrunner的接口性能测试,然后尝试了一下手动编写脚本,毕竟录制这种东西,不是每次都能通的,而且录制下来的脚本,通常是有很多其他杂七杂八的请求夹杂在中间,没有达到真正的压测接 ...

  6. 用户用户组管理:用户管理命令useradd

    添加玩用户后,其实改变的就是几个配置文件. 默认组一般设置成与用户名字,ID相同的.

  7. JAVA如何调用mysql写的存储过程

    存储过程是干什么的,自己百度,百度上讲的比我讲的好.为什么要用存储过程,这样可以提高效率.废话少说,直接上代码: 首先说一下语法:在mysql中写存储过程 DELIMITER $$ CREATE /* ...

  8. 借root之名,行流氓之实,劝告,root需谨慎

    20160425++++++ 今日再回头看这篇文章,貌似有点偏激了一点,不过xda论坛上有个疑似kingroot开发团队的用户说明了kingroot确实对supersu做了限制,说是supersu在替 ...

  9. c#中ref和out使用及区别

    在c#中,使用方法获得返回值时,只能获取一个返回值.当使用ref和out关键字后,可以获取多个返回值. MSDN对ref和out关键字的说明如下: ref 关键字: 使参数按引用传递.其效果是,当控制 ...

  10. VS2010/MFC编程入门之三十八(状态栏的使用详解)

    上一节中鸡啄米讲了工具栏的创建.停靠与使用,本节来讲解状态栏的知识. 状态栏简介 状态栏相信大家在很多窗口中都能见到,它总是用来显示各种状态.状态栏实际上也是一个窗口,一般分为几个窗格,每个窗格分别用 ...