基础问题回答:
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安装
- 下载
-
输入
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 地址,攻击成功
- 选择 Injection Flaws -> Command Injection 右键页面中复选框,选择inspect Element审查网页元素对源代码进行修改,在末尾添加
3.Numeric SQL Injection
-
- 选择 Injection Flaws -> Numeric SQL Injection 右键页面中复选框,选择inspect Element审查网页元素对源代码
value="101"
进行修改,在城市编号101后面添加or 1=1
- 点击 Go,可以看到攻击成功
- 选择 Injection Flaws -> Numeric SQL Injection 右键页面中复选框,选择inspect Element审查网页元素对源代码
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中输入
-
点击 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参数。
实验总结:
终于结束啦!开心!