网站账号注册程序网站设建设表单

当前位置: 首页 > news >正文

网站账号注册程序,网站设建设表单,企业官网网页设计,徐州网站建设哪家好概念 SQL注入#xff0c;是指将特殊构造的恶意SQL语句插入Web表单的输入或页面请求的查询字符串中#xff0c;从而欺骗后端Web服务器以执行该恶意SQL语句。 成功的 SQL 注入漏洞可以从数据库中读取敏感数据、修改数据库数据#xff08;插入/更新/删除#xff09;、对数据…概念 SQL注入是指将特殊构造的恶意SQL语句插入Web表单的输入或页面请求的查询字符串中从而欺骗后端Web服务器以执行该恶意SQL语句。 成功的 SQL 注入漏洞可以从数据库中读取敏感数据、修改数据库数据插入/更新/删除、对数据库执行管理操作 例如关闭 DBMS恢复 DBMS 文件系统上存在的给定文件的内容 load_file并在某些情况下向操作系统发出命令。 SQL 注入攻击是一种注入攻击其中 SQL 命令被注入到数据平面输入中以便执行预定义的 SQL 命令。 这种攻击也可以称为“SQLi”。 目的 数据库中有 5 个用户ID 从 1 到 5。您的任务…通过SQLi窃取他们的密码。 漏洞分析 分类 参数类型数字型、字符型需要引号闭合是否回显信息回显注入和盲注注入位置GET注入、POST注入、Cookie注入和搜索注入 危害 通过SQL注入漏洞数据库中的关键数据可能会被窃取如管理员的账号和密码、用户的身份证号码和手机号等个人信息数据库中存储的数据可能会被篡改以进行挂马、钓鱼或其他攻击方式的间接利用甚至在拥有较高权限时可以直接获取Web Shell或者执行系统命令等。因此SQL注入漏洞的危害是绝对不容小觑的。 低水平 输入id在页面显示了idfirst name和surname。 只输入一个‘点击submit出现了SQL错误提示说明后台直接执行了SQL可能存在了SQL注入。数据库执行了输入的特殊构造语句可能存在SQL注入漏洞。 输入  1 or 11显示了id为1的信息 输入 1 or 11 # 显示了所有用户的“First name”和“Surname”如图 在构造语句时为了避免SELECT语句中额外增加限制子句我们经常会在最后加上符号“#”。“#”是注释符表示这个符号后面的语句不会被执行。 确认SQL注入类型后我们可以构造SQL语句来获取数据库名。但是想要用SQL语句来获取数据库名就需要在原来的SQL语句中再拼接一个SQL语句也就是需要使用联合查询语句union。union语句要求前后两个SELECT子句的字段数相同因此我们必须先来获取查询语句的字段数。 输入1 or 11 order by 1 # 发现结果按照First name排序说明First name是查询结果第一个字段1 or 11 order by 2 #发现结果按照surname排序说明是第二个字段 输入 1 or 11 order by 3 #显示报错说明SELECT子句的字段数为2。 构造union语句1 union select 1,database()# 在第二个位置会显示数据库的名 获取数据库的表名  在MySQL数据库中有一个默认自带的系统数据库information_schema。该数据库本质上是一个视图存储了数据库的元数据也就是存储了所有数据库的相关信息如数据库information_schema中的数据表TABLES中存储了数据库服务器中所有数据库的所有数据表的信息。 数据表information_schema.tables中显示的TABLE_SCHEMA字段为数据表所在的数据库名TABLE_NAME字段为数据表名。这样通过数据库的数据表information_schema.tables就能获取到dvwa数据库中存储了哪些数据表。 SELECT first_name, last_name FROM dvwa.users WHERE user_id 1 UNION SELECT 1, table_name from information_schema.TABLES where TABLE_SCHEMAdvwa  可以看到dvwa有两个表分别是guestbokk和users 找到字段名 information_schema.columns表中显示了TABLE_SCHEMA数据库名、TABLE_NAME数据表名、COLUMN_NAME字段名以及其他数据信息 SELECT first_name, last_name FROM dvwa.users WHERE user_id 1 UNION SELECT 1, column_name from information_schema.COLUMNS where TABLE_SCHEMAdvwa  1 UNION SELECT 1, column_name from information_schema.COLUMNS where TABLE_SCHEMAdvwa# 可以看到显示了表字段包含user,passwword  获取字段对应数据 找到账号密码输入如下语句可以看到输出了账号密码信息。 1 UNION SELECT user, password from dvwa.users#  密码解密 用户admin的密码是经过MD5加密后存储的数据因此想要获取明文密码必须进行MD5解密。大家可以在线进行解密比如通过在线网站CMD5进行解密  获取到了DVWA平台管理员用户的账号为admin对应的密码为password。有了管理员用户的账号和密码攻击者就可以使用管理员权限进入该平台进行后续的入侵和破坏比如在DVWA的网站上挂马、篡改网页内容 初级SQL手工注入渗透测试过程 ①判断系统是否可能存在SQL注入漏洞以及SQL注入类型是数字型注入还是字符型注入。②获取SELECT语句的字段数以使用联合查询语句union拼接想要执行的SELECT语句。基于MySQL系统数据库中的各个数据表和SQL语句语法构造用户输入形成可在MySQL数据库中正确执行的语句以依次获取数据库名→数据表名→指定数据表中的字段名→指定字段的数据。③获取管理员的用户名并破解管理员的MD5密码。 从源码可以看到从获取前端用户输入的id参数值到SQL语句的执行没有设置任何对用户输入的防护攻击者可以在查询表单的输入处实施SQL注入。 \(id \)_REQUEST[ id ];switch (\(_DVWA[SQLI_DB]) {case MYSQL:// Check database\)query SELECT first_name, last_name FROM users WHERE user_id \(id;;\)result mysqli_query(\(GLOBALS[___mysqli_ston], \)query ) or die( pre . ((is_object(\(GLOBALS[___mysqli_ston])) ? mysqli_error(\)GLOBALS[_mysqli_ston]) : (($_mysqli_res mysqli_connect_error()) ? \(___mysqli_res : false)) . /pre );// Get resultswhile( \)row mysqli_fetch_assoc( \(result ) ) {// Get values\)first \(row[first_name];\)last \(row[last_name];// Feedback for end userecho preID: {\)id}br /First name: {\(first}br /Surname: {\)last}/pre;}mysqli_close(\(GLOBALS[___mysqli_ston]);break; 中级 在中级中选项为下拉菜单且以post方式提交。无法直接在页面修改选项需要使用burpsuite拦截后修改负载再发送。 查找注入类型 使用参数 1 or 12显示了所有结果说明为数字型注入。 找到数据库名 获取的数据表名 4 union select 1group_concat(table_name)from information_schema.tables where table_schema′dvwa′# 发生错误因为引号被转义为/ 为了绕过防护可以使用Burp Suite的Decoder模块将“dvwa”直接转换为十六进制数据。在“Decoder”界面输入需要转换的字符串“dvwa”选择“Encode as”下拉列表中的“ASCII hex”选项,就可以获取到“dvwa”对应的十六进制数据“64767761十六进制数据以“0x”开头因此“dvwa”对应的十六进制数据可以使用“0x64767761”表示 获取字段名 id1 union select 1,group_concat(column_name)from information_schema.columns where table_name0x7573657273#SubmitSubmit 获取字段对应数据 id1 union select user,password from users#SubmitSubmit 中级使用SQL注入保护的一种形式具有 “mysql_real_escape_string”。 但是由于 SQL 查询的参数周围没有引号因此这不会完全保护查询不被更改。 // Get input\)id \(_POST[ id ];\)id mysqli_real_escape_string(\(GLOBALS[___mysqli_ston], \)id);switch (\(_DVWA[SQLI_DB]) {case MYSQL:\)query SELECT first_name, last_name FROM users WHERE user_id \(id;; 高水平 与初级、中级SQL手工注入渗透测试环境的源代码对比、分析可以发现①id参数是通过SESSION的方式传递到后端的。②SQL语句中增加了“LIMIT 1”的限制每次只能返回一条记录③在发生错误时不返回具体的错误信息只返回提示语句“Something went wrong.”。 ?phpif( isset( \)_SESSION [ id ] ) ) {// Get input\(id \)_SESSION[ id ];switch (\(_DVWA[SQLI_DB]) {case MYSQL:// Check database\)query SELECT first_name, last_name FROM users WHERE user_id \(id LIMIT 1;;\)result mysqli_query(\(GLOBALS[___mysqli_ston], \)query ) or die( preSomething went wrong./pre );// Get resultswhile( \(row mysqli_fetch_assoc( \)result ) ) {// Get values\(first \)row[first_name];\(last \)row[last_name];// Feedback for end userecho preID: {\(id}br /First name: {\)first}br /Surname: {\(last}/pre;}((is_null(\)_mysqli_res mysqli_close($GLOBALS[_mysqli_ston]))) ? false : \(___mysqli_res); break; 使用# 来绕过limit 1的限制 1or 11 # 说明为字符型注入 找到数据库名 1 union select 1,database()# 找到表名 1 union select 1,group_concat(table_name)from information_schema.TABLES where table_schemadvwa# 找到字段名 1union select 1,group_concat(column_name)from information_schema.COLUMNS where table_nameusers# 高级防护后端主要通过“LIMIT 1”来限制返回数据的个数这个防护措施通过“#”注释符就可以轻松绕过高级  防护方法 1、输入验证和处理 客户端或服务器端对ID进行数字类型的检验禁止字符的输入 其次对特殊字符进行转义。如对SQL注入过程中常用的单引号“′”、百分号“%”、下画线“_”等符号进行转义。PHP中的mysql_escape_string()函数就可以实现字符转义的功能。在客户端和服务器端对所有的输入数据进行长度、类型、范围、格式等的合规性检查拒绝不合法数据的接收并且对输入的特殊字符做一定的处理 2、数据库配置 数据库连接遵循“最小权限”原则。在Web应用程序访问数据库时禁止任何管理员权限账户如root、sa等的连接。由于业务需求可以单独为应用程序创建权限较低的账户进行有限访问。其次关键数据务必加密后存储。对于关键或敏感信息可以加密或哈希后再存储到数据库这样攻击者即使获取到这些数据也无法加以利用。 3、预编译和参数化语句 不可能的水平 \)data \(db-prepare( SELECT first_name, last_name FROM users WHERE user_id (:id) LIMIT 1; );\)data-bindParam( :id, \(id, PDO::PARAM_INT );\)data-execute();\(row \)data-fetch();// Make sure only 1 result is returnedif( \(data-rowCount() 1 ) {// Get values\)first \(row[ first_name ];\)last \(row[ last_name ];// Feedback for end userecho preID: {\)id}br /First name: {\(first}br /Surname: {\)last}/pre;} 对Impossible级SQL手工注入渗透测试环境的源代码进行分析可以发现主要防护措施为使用Anti-CSRF token防止CSRF攻击通过prepare()函数进行预编译绑定变量id将代码和数据分离且确保返回数据为1条对SQL注入攻击进行有效防护。 参考《web渗透测试与防护 慕课版》