本实践的目标理解常用网络攻击技术的基本原理。Webgoat实践下相关实验。
1.实验后回答问题
(1)SQL注入攻击原理,如何防御
- 感觉上次做的也是sql注入,就是故意的非法输入(输入的是一些指令)让他读进去,然后在里面执行。
- 防御手段:一个是字符串检测,另一个是限制输入字符串的长度。
(2)XSS攻击的原理,如何防御 - xss攻击就是攻击网页使得其他用户查看网页时受到影响。
- 防御手段:程序员应该防止下发界面显示html标签,把</>等符号转义
(3)CSRF攻击原理,如何防御 - 通过伪装来自受信任用户的请求来利用受信任的网站,即受害用户登录受信任网站后,在本地生成了COOKIE而又在不登出该网站的情况下,访问了危险网站,而此时访问的危险网站可能就已经写入了利用你的身份进行而恶意操作的代码
- 防御手段:少登陆不知名网站,不长时间保存cookie
实验指导:http://www.cnblogs.com/20145224kevs/p/6826084.html
2.实验总结与体会 - 感觉我所做的就是站在巨人的肩膀上稍微跳了一下,因为这次课题负责人是我舍友感觉他在自己做的时候还是很累的,然而我们做的时候是可以根据他找到的答案来直接将结果做出来,是比较快,而且轻松的,这可能也就是研究性学习和普通学习之间的区别。
3.实践过程记录
这次尝试一波文字描述
启动WebGoat
- 在终端使用指令java -jar webgoat-container-7.0.1-war-exec.jar,等待其显示
信息: Starting ProtocolHandler ["http-bio-8080"] - 打开浏览器,访问localhost:8080/WebGoat,登陆即可开始答题。
Injection Flaws
-
Command Injection:命令注入,要求能够在目标主机上执行任意系统命令即可;
1.首先我们需要确定进行注入的位置,网页中并没有文本框,只有一个下拉的选项栏,所以我们只能修改这个下拉栏的值。有两种方式可以修改,可以使用BurpSuite拦截再修改,也可以直接修改页面源代码;
2.我这次试验并没有用到BurpSuite使用的是修改页面代码的方法
3.使用组合键Shift+Ctrl+C查看页面源代码,鼠标单击下拉选项栏,这时候会自动的帮你定位到相应的代码段,找到其中一个option,右键鼠标Edit HTML,这时候就可写东西了。
4.css应该是内嵌或者外嵌的框架,右键了以后发现并不能改,script里面可以在代码段里设置断点,html里面可以直接编辑。
5.直接在option后加上"&&ifconfig"即可,然后回到网页,找到并且提交刚刚修改过的选项。ifconfig是看ip和网关,用别的也行 -
Numeric SQL Injection:数字型SQL注入,要求通过注入SQL字符串的方式查看所有的数据;
1.同样是修改页面代码,先查看页面源代码。
2.然后锁定到具体的代码,点击下拉栏。
3.往里面加入代码,这里在Value后加上or 1 = 1 - -即可 -
Log Spoofing:日志欺骗,要求使用户名为“admin”的用户在日志中显示“成功登录”(实际上并没有成功);
这个实验主要是为了欺骗人眼,由于页面会将输入的用户名返回,所以我们可以在用户名上动手脚,输入用户名%0d%0aLogin Succeeded for username: admin;
其中%0a%0d是ASCII码的回车换行的意思 -
String SQL Injection:字符串注入,要求通过SQL注入将所有信用卡信息显示出来;
有文本框的题相对来说都比较轻松,输入' or 1 = 1 --即可 -
LAB SQL Injection【SQL注入实验】:
1.String SQL Injection:字符串型注入,要求使用SQL注入绕过认证,实现无密码登陆;
先把长度限定改为15,把文本框格式改为text,在密码栏输入' or 1 = 1。
2。Numeric SQL Injection:数字型注入,要求使用一个普通员工的账户,浏览其BOSS的账户信息;
首先通过Larry的账户登陆(密码为larry),我们先试着把Value的值改为Boss的对应值修改为112 or 1= 1,这次成功了输出信息,但是还是Larry的信息,看了别人的博客发现应该是将最首位的信息输出。那么这次我们可以对信息进行排序让他排在首位。用社会工程学解释老板应该是工资最高的,所以为了把老板排到第一个SQL注入排序如下112 or 1=1 order by salary desc; -
Database Backdoors:数据库后门,要求使用SQL注入修改员工工资;
如果熟悉SQL语句的话可以指定,修改信息用update语句,具体注入语句为:101 or 1=1; update employee set salary=100000 -
Blind Numeric SQL Injection:数字型盲注入,要求找到pins表中cc_number字段值为1111222233334444的记录中pin字段的数值;
感觉利用折半查找会比较快一点,但是我没有用,因为看别人的博客答案已经被确定为为2364,我试了一下,竟然2364是对的,那就说明每个人的答案都一样,这并不是随机的。 -
Blind String SQL Injection:字符串型盲注入,要求找到pins表中cc_number字段值为4321432143214321的记录中pin字段的数值。pin字段类型为varchar;
这个题目我依旧是抄的答案只不过是猜ASCII的值罢了,答案是Jill;
上面这两个题目如果要自己做的话会比较久,可能需要专门写个脚本不停的循环来试,不过计算机的优点也就在于速度快。
Cross-Site Scripting (XSS)
- Phishing with XSS:XSS钓鱼,要求创建一个表单,诱骗访问者输入用户名密码,并将表单提交到http://localhost:8080/WebGoat/capture/PROPERTY=yes&ADD_CREDENTIALS_HERE
代码:
上面那段代码竟然会直接在博客园以这种方式呈现,不过这样也好。 - Stored XSS Attacks:存储型XSS攻击,要求在信件中写入一个网页或弹窗: 具体代码应该是 - Reflected XSS Attacks:反射型XSS攻击,要求得到脚本访问信用卡表单字段 "); - Cross Site Repuest Forgery 1.这个实践是利用cookie冒名登录,用代码伪造请求 2.在message里面输入 - CSRF Prompt By-Pass 这个问题大家写的大概分为两种,一中是写两个iframe的另一种是蔡野同学的,这个攻击我并不是很懂而且通过评语来看写两个frame好像不太对,但我用两个frame确实能够做出来。