webgoat之注入缺陷篇:
1.command injection
我也不知道怎么就做好了,就随便点了两下就好啦,想重置一下也不行,可能,是个bug…
2.Numeric SQL Injection
看下题目要求,英语不好的同学去谷歌翻译查,不要看一些教程上的,因为会撇到答案影响自己的思路:
下面的表格允许用户查看天气数据。 尝试注入一个SQL字符串,该字符串将导致显示所有天气数据。
现在,您已经成功执行了SQL注入,请对参数化查询尝试相同类型的攻击。
看到这里很明显,是需要通过注入得到所有数据,但是这里我们发现并没有输入框,抓包改参数就可以啦!
因为这里题目是数字型SQL注入,就不需要闭合字符了直接=1 or 1=1
forward
欧克啦
3.Log Spoofing
这里我就不翻译题目要求了,喜欢刷题的同学也应该一下子可以看出来这是通过日志欺骗来登入系统:
随便用用户名试着登录一下这里是hahaha,构造用户名构造用户名为hahaha%0d%0aLogin succeed for username: admin
这里%0d表示回车CR,%0a表示换行LF;
成功但是没有显示我成功过关,网上找资料将username换成Smith就过关了:
4. XPATH Injection
这里是XPath注入,这种简单类型的XPath注入思想和sql注入差不多
/employees/employee[loginID/text()=’" + username + “’ and passwd/text()=’” + password
+ “’]”
我们登入员工mike的账号成功看到个人信息,输入’ or ‘1’='1,闭合单引号,果然显示成功了:
5.String SQL Injection
题目明显是字符串注入,而且提示我们了SQL语句,直接输入语句:
怎么感觉好简单,做这个笔记像有点浪费时间了有点后悔但是已经做了一半了,还是继续吧…
6. LAB: SQL Injection
阶段1:使用字符串SQL注入绕过身份验证。 使用SQL注入以boss(“ Neville”)身份登录,而无需使用正确的密码。 确认可以查看Neville的个人资料,并且所有功能都可用(包括搜索,创建和删除)。
看来又要抓包了,这里需要在password上入手,通过Neville登入,将password参数改成:’ or ‘1’='1
forword成功:
Stage 2: Parameterized Query #1
都知道之所以存在SQL注入是因为 通过SQL拼接字符串追加命令,导致SQL的语义发生了变化。参数化查询(Parameterized Query 或 Parameterized Statement)是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) 来给值,这个方法目前已被视为最有效可预防SQL注入攻击 (SQL Injection) 的攻击手法的防御方式。
这里是做防御SQL注入漏洞的要开发者版本才能做,略过;
Stage 3: Numeric SQL Injection
这里需要我们用Larry登入(密码就是larry)并查询到老板的个人资料;
发现有view profile按钮可以查看信息,抓包改参:
把第一个参数改成如图,这里还设计到社会工程学的知识。因为老板工资最高所以把老板排到第一个;
Stage 4: Parameterized Query #2
这个也需要webgoat的开发者版本,同样使用参数化查询也可以避免SQL注入;
7.Modify Data with SQL Injection
本题题目是这样的:下面的表格允许用户查看与用户ID相关联的薪水(来自名为salaries的表)。 这种形式容易受到字符串SQL注入的攻击。 为了通过本课程,请使用SQL注入修改userid jsmith的薪水。
先使用1’试一下看一下报错结果:
根据报错结果我们判断是字符型注入,并且查询语句是select * from salaries where userid=’ ’
然后根据修改语句将工资更改:
’ or 1=1; UPDATE salaries SET salary=999999 WHERE userid='jsmith
我们直接在页面输入:
成功,再查询jsmith的工资时发现已经改变。
8.Add Data with SQL Injection
上题是修改数据,这题是添加数据,其实原理差不多只是语句不同罢了:
’ or 1=1; INSERT INTO salaries VALUES (‘rlupin’,140000); –
不知道为什么会报错,可能是前端的锅,于是我们抓包:
forward成功。
9.Database Backdoors
阶段1:使用字符串SQL注入执行多个SQL语句。 本课的第一步是教您如何使用易受攻击的字段创建两个SQL语句。 第一个是系统的,第二个完全是您的。 您的帐户ID为101。此页面可让您查看密码,ssn和薪水。 尝试注入另一个更新以将薪水更新为更高的水平;
根据之前做的可以知道只需要使用分号分隔便可以实现注入SQL多个语句;
成功啦;
使用String SQL Injection注入后门。 本课程的第二阶段是教您如何使用易受攻击的字段来注入数据库工作或后门。 现在尝试使用相同的技术来注入将用作SQL后门的触发器,该触发器的语法为:
在为每个行开始更新员工插入员工之前,创建触发器myBackDoor员工设置email='john@hackme.com’WHERE userid = NEW.userid
请注意,实际上不会执行任何操作,因为当前的基础数据库不支持触发器。
101; CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com'WHEREuserid = NEW.userid
成功;
10.Blind Numeric SQL Injection
11.Blind String SQL Injection
这两题分别是数字型盲注和字符型盲注,解题思路无非就是用二分法以及报错注入的思路:
首先101 and 1=1都为真无报错,101 and 1=2后面的条件为假所以可以构造后面的语句猜解出结果;
我另一篇笔记说遇到盲注最好还是用sqlmap跑,也有记盲注的手工注入思路,所以这里两种方法都可以就不多做笔记啦~