查看: 102|回复: 0

mysql注入,常用的信息收集语法(个人笔记)

[复制链接]

5

主题

8

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2023-1-18 18:28:28 | 显示全部楼层 |阅读模式
一、必备的语法查询语法:

1、select user()表示当前注入点的用户权限是root
2、select datebase()查看当前使用的数据库是哪个
3、select version()查看当前数据库的版本
4、select version_compile_os 查看数据库所在的操作系统
5、select load_file()
6、select Into outfile 或者 into dumpfile  导出函数  (5,6俩个需要自己去再去提权才能使用。)
例子:
1、


select user() ,database(),version(),@@version_compile_os;

查询结果:


2、

select load_file ("D:\360RecycleBin/!此文件夹为使用360清理后的垃圾备份文件.txt");

查询结果:



没有提权查询出来的都是null

具体应用:我们目的是获取网站源码内容,而selectload_file()这个方法括号内是使用的绝对路径,而我们看网站的时候只能看到相对路径,就无法使用这个方法获取信息,

我将提供获取绝对路经的几种方法:
1、报错显示 (重要)      2、遗留文件(重要)    3、漏洞报错(重要)      4、平台配置文件       5、爆破

1、报错显示:就是在一个网站url上面随便输入,让他报错,报错路径或报错信息会显示出绝对路径。


可以看到这个网站是windos系统的,它的绝对路径我们也知道了

2、遗留文件:站长的遗留的文件,忘了关闭了是,我们可以从它上面发现绝对路径例如php的phpinfo.php文件


从这行信息可以看出它是Linux系统的,绝对路径也有了:



3、漏洞报错:它是指的是cms源码上代码上的错误,比如一个网站使用得是phpmyadmin的cms源码,直接上网搜索’phpmyadmin爆路径漏洞‘ 版本高的可能修复了,使用还是得结合版本来看

4、平台配置文件:第三方软件和搭建平台软件
第三方软件:
我们知道有些软件是可以帮助我们更方便的搭建一个网站的像phpstudy,它是一个方便我们配置环境的软件,我们知道数据库mysql ,Oracle等等和搭建平台:tomcat ,Apache等等,这些东西不仅要安装,还要我们去配置运行他们的环境,耗时间又复杂,但是有了phpstudy这个软件它可以自动给你配置环境,很快就可以搭建出一个网站,而这些软件里面会存储的网站的绝对路径信息,而这些绝对路径信息会被放在这个平台的配置文件中,而这个配置文件会有个默认路径,我们可以搜索phpstudy的配置文件的默认路径,在通过上面selectload_file()方法翻阅网站的绝对路径。
搭建平台:
没有用这些第三方软件搭建的,我们也可以直接去查安装在本地的搭建平台的配置文件的默认路径,也是网上可以搜索到的 像tomcat,Apache各自都有自己的配置文件的默认路径。
但是如果网站管理员更改了这些配置文件的默认路径,这个方法算是不能用了。
操作系统的不同绝对路径就不同,window一般是盘符开头的,像c://,d:// ,linux 有可能是home/

5、爆破:顾名思义就是一个一个去猜网站的绝对路径可以用字典去爆破,
一般来说windows的绝对路径前面应该是d;/wwwroot/域名,
                  linux的绝对路径前面加的应该是/var/www/域名
3、

select 'x' into outfile 'd://w.txt';

查询结果:



没有提权,就爆出错误,说我没有这个权利

二、msyql中很重要的数据库  information_schema


在5.0之后的版本中mysql数据库中会自带一个名叫information_schema的数据库
(好像是只有root权限用户才能使用该数据库)

这个数据库中的这几张表是很重要的:tables   ,columns,    schemata
tables:整个mysql数据库的所有表。
columns:整个mysql数据库的所有字段名
schemata:整个mysql数据库中的所有数据库名
我们可以通过information_schema.tables的方式来访问这些表.
我们都知道我们在网站发现sql注入的时候,且这个sql注入点是root权限,那么我们可以通过该注入点查询旁站的数据库信息。比如:
你这个a网站使用的是a数据库,b网站使用的是b数据库,这俩个网站是在同一个服务器的,a网站有sql注入,但b网站没有,而a网站用的a数据库,跟b网站用的数据库不同,你想要查询b网站的数据库的信息,就要在from的后面   (数据库名.表名) 这样的形式进行查询,要带个数据库名进行查询,如果不加,它只会在当前数据库去找这这个表名,如果去在了数据名,它会去这个数据库中去找这个表名,直接定位的清清楚楚的。我们称它为跨库查询(高权限情况下才能实现)。  
这些都是各种表中字段名
table_name是表名(通用)
column_name是字段名(通用)
table_schema是数据库名(通用)
schema_name是数据库名(这个字段是在schema这个表中使用的)
group_concat():(这个可以使得查询几行的内容全集中在一行,这样就可以把全部数据库内容全部展示到前端。)
展示例子:

1、select group_concat(schema_name) from information_schema.schemata ;
查询结果:


这句话的意思是查询数据库中所有的数据名,并全显示在一行。

2、select group_concat(table_name) from information_schema.tables where table_schema='xxxx';
查询结果:



这句话的意思是查询information_schema这个数据库下面的tables这个表,当条件是数据库=xxxxx下面的所有表名,并全部显示在一行。‘xxxx’是你要选择的数据库名

3、select group_concat(column_name) from information_schema.columns where table_schema='xxxx' and table_name='yyyy';
查询结果:


这句话的意思是从columns表中,当条件是数据库=xxxx,表名=yyyy 时,查询这个表名下面的全部字段名,并全部显示成一行。(单引号要记得加)‘xxxx’ 是你要选择的哪个张表的表名

这里的数据库名字可以不加:
如果你数据库名不加,因为我们知道不同的数据库里面是可以存在相同的表名,如果你只是当当条件写表名,它会从所有数据库中查找所有这个名字的表,然后在把所有的表的所有字段名全部显示出来,你可能就不知道你想要哪个字段名了;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表