做网站本溪,wordpress 精确搜索,网站流量盈利模式,wordpress文章链接设置目录
引言
一、安装好JAVA
二、下载并运行WebGoat
三、注册并登录WebGoat
四、模拟攻击
1. 第九题
2. 第十题
3. 第十一题
4. 第十二题
5. 第十三题
五、思考体会
1. 举例说明SQL 注入攻击发生的原因。
2. 从信息的CIA 三要素#xff08;机密性、完整性、可用性机密性、完整性、可用性出发举例说明SQL 注入攻击造成的破坏。
1机密性
2完整性
3可用性
3. 通过表单输入用户名来查询特定用户信息写出获得表格中所有用户信息的SQL语句。
4. 如果想修改“Bob”用户的salary为$100应该写怎样的SQL语句
5. 如果想破坏employees的可用性应该写怎样的SQL语句
6. 怎样预防和避免SQL 注入攻击。 引言 熟悉WebGoat平台在该平台上实现SQL注入攻击。 1下载webgoat-server-8.2.2.jar。
2搭建java环境。
3运行webgoat。
4实施SQL注入攻击。 一、安装好JAVA 二、下载并运行WebGoat 本文置顶免费下载解压即可。 三、注册并登录WebGoat 四、模拟攻击
1. 第九题
原SQL语句
SELECT * FROM user_data WHERE first_name John AND last_name lastName ; 填入如下 SELECT * FROM user_data WHERE first_name John AND last_name Smith or 11 ; 成功查到所有用户的信息。 2. 第十题
原SQL语句
SELECT * FROM user_data WHERE login_count Login_Count AND userid User_ID; 输入 SQL语句变为
SELECT * FROM user_data WHERE login_count 1 AND userid 1 or 1 1 ; 成功查到所有用户的信息。 3. 第十一题
原SQL语句
SELECT * FROM employees WHERE last_name name AND auth_tan auth_tan ; 填入 SQL语句变为
SELECT * FROM employees WHERE last_name 小煊 AND auth_tan or11 ; 成功查到用户信息 4. 第十二题
原SQL语句
SELECT * FROM employees WHERE last_name name AND auth_tan auth_tan ; 填入 Employee Name:小煊 Authentication TAN: ; update employees set salary 1000000 where first_name John and last_name Smith
在一个查询语句中注入一个修改语句从而破坏数据库中的数据从而破坏了完整性。 SQL语句变为
SELECT * FROM employees WHERE last_name 小煊 AND auth_tan ;update employees set salary 1000000 where first_name John and last_name Smith ; 成功查到并插入用户信息 5. 第十三题
原SQL语句如下
SELECT * FROM user_data WHERE login_count variable; 填入 SQL语句变为
SELECT * FROM user_data WHERE login_count ; drop table access_log; -- ;
(通过--注释把后面的’注释掉成功将数据库的资源删除) 五、思考体会
1. 举例说明SQL 注入攻击发生的原因。 假设有一个简单的用户登录功能用户输入用户名和密码然后将其传递给数据库执行查询以验证登录信息。 String username request.getParameter(username);String password request.getParameter(password);String SQL SELECT * FROM users WHERE username username AND password password ;
在上述代码中使用用户输入的数据直接拼接成SQL查询语句。然而当用户在用户名或密码中输入恶意字符就可能导致SQL注入攻击的发生。 例如用户输入的密码为 OR 11那么最终构造的SQL查询语句为 SELECT * FROM users WHERE usernameadmin AND password OR 11
这个查询会返回所有用户而不仅仅是匹配用户名和密码的用户因为11始终为真。这样攻击者就可以绕过身份验证并获得未授权的访问权限。 当我们访问动态网页时, Web 服务器会向数据访问层发起SQL查询请求如果权限验证通过就会执行SQL语句。 这种网站内部直接发送的SQL请求一般不会有危险但实际情况是很多时候需要结合用户的输入数据动态构造SQL语句如果用户输入的数据被构造成恶意SQL代码Web 应用又未对动态构造的SQL语句使用的参数进行审查则会带来意想不到的危险。 2. 从信息的CIA 三要素机密性、完整性、可用性出发举例说明SQL 注入攻击造成的破坏。
1机密性
机密性是指保证信息不被非授权访问即 使非授权用户得到信息也无法知晓信息内容因而不能使用。SQL注入攻击可能导致数据库中的敏感信息泄露例如用户账号、密码、个人资料等。攻击者可以通过构造恶意的SQL语句绕过正常的身份验证和授权机制获取到未经授权的数据。
如通过拼接字符串使得SQL语句中有条件永远为真不需要判断其他条件 这样输入之后可以看到数据库里全部人的信息。 2完整性
完整性是指维护信息的一致性即信息在生成、传输、存储和使用过程中不应该发生人为或非人为的非授权篡改。信息的完整性包括两个方面 数据完整性数据没有被(未授权)篡改或者损坏 系统完整性系统未被非法操纵按既定的目标运行。 攻击者可以利用SQL注入对数据库中的数据进行篡改包括插入虚假数据、修改现有数据甚至删除数据。这可能导致系统中存储的数据被损坏或篡改影响业务流程的正常运作。
如上面写的第十二题在SQL语句执行的时候更改了其他数据破坏了数据完整性。 3可用性
可用性是指保障信息资源随时可提供服务的能力特性即授权用户可根据需要可以随时访问所需信息。可用性是信息资源服务功能和性能可靠性的度量涉及到物理、网络、系统、数据、应用和用户等多方面的因素是对信息网络总体可靠性的要求。
SQL注入攻击还可能导致数据库系统的服务不可用包括数据库服务器崩溃、拒绝服务等情况。攻击者可以通过发送恶意的SQL查询或指令消耗数据库系统的资源导致其无法正常响应合法用户的请求从而影响系统的可用性。
如上面写的第十三题通过--注释把后面的’注释掉成功将数据库的资源删除。 3. 通过表单输入用户名来查询特定用户信息写出获得表格中所有用户信息的SQL语句。
SELECT * FROM user_data WHERE first_name John AND last_name Smith or 11 ; 4. 如果想修改“Bob”用户的salary为$100应该写怎样的SQL语句
SELECT * FROM employees WHERE last_name 小煊 AND auth_tan ;update employees set salary 100 where first_name John and last_name Smith ; 5. 如果想破坏employees的可用性应该写怎样的SQL语句
SELECT * FROM user_data WHERE login_count ; drop table access_log; -- ; 6. 怎样预防和避免SQL 注入攻击。
1严格限制 Web 应用的数据库的操作权限给连接数据库的用户提供满足需要的最低权限最大限度的减少注入攻击对数据库的危害
2校验参数的数据格式是否合法可以使用正则或特殊字符的判断对进入数据库的特殊字符进行转义处理或编码转换。
3预编译 SQLJava 中使用 PreparedStatement对特殊符号进行转义处理参数化查询方式避免 SQL 拼接发布前利用工具进行 SQL 注入检测。