问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

部分sql注入总结

发布网友 发布时间:2022-10-02 02:49

我来回答

2个回答

懂视网 时间:2023-02-14 20:56

sql注入语句是怎样的呢?下面就让我们一起来了解一下吧:

sql注入语句其实可以分为三种的,即数字型注入点,语句一般是“select * from表名where id=1 and 1=1”;字符型注入点,语句一般是“select * from表名where name...”;搜索型注入点。

而sql注入也就是通过将SQL命令插入到Web表单提交或是输入域名、页面请求的查询字符串,最终可以达到欺骗服务器执行恶意的SQL命令。

sql注入类型通常是可以按照不同方式进行分类的,比如若是按照注入点类型来进行分类可以分为数字型注入点、字符型注入点、搜索型注入点,若是按照数据提交的方式来分类,可以分为GET 注入、POST 注入、Cookie 注入、HTTP 头部注入。

当然也可以按照执行效果来分类,可以分为基于布尔的盲注、基于时间的盲注、基于报错注入、联合查询注入。

其中常用的语句有:

1、判断有无注入点

; and 1=1 and 1=2

2、猜表 通常表的名称基本上是admin adminuser user pass password 等..

and 0<>(select count(*) from *)

and 0<>(select count(*) from admin) ---判断是否存在admin这张表

3、猜帐号数目 若是遇到0< 返回正确页面 1<返回错误页面那么就说明帐号数目就是1个

and 0<(select count(*) from admin)

and 1<(select count(*) from admin)

4、猜解字段名称 在len()括号里面可以加上所想到的字段名称。

and 1=(select count(*) from admin where len(*)>0)--

and 1=(select count(*) from admin where len(用户字段名称name)>0)

and 1=(select count(*) from admin where len(_blank>密码字段名称password)>0)

以上就是小编的分享了,希望能够帮助到大家。

热心网友 时间:2023-02-14 18:04

本人ctf选手一名,在最近做练习时遇到了一些sql注入的题目,但是sql注入一直是我的弱项之一,所以写一篇总结记录一下最近学到的一些sql注入漏洞的利用。

在可以联合查询的题目中,一般会将数据库查询的数据回显到首页面中,这是联合注入的前提。

适用于有回显同时数据库软件版本是5.0以上的MYSQL数据库,因为MYSQL会有一个系统数据库information_schema, information_schema 用于存储数据库元数据(关于数据的数据),例如数据库名、表名、列的数据类型、访问权限等

联合注入的过程:

判断注入点可以用and 1=1/and 1=2用于判断注入点

当注入类型为数字型时返回页面会不同,但都能正常执行。

sql注入通常为数字型注入和字符型注入:

1、数字型注入

数字型语句:

在这种情况下直接使用and 1=1/and 1=2是都可以正常执行的但是返回的界面是不一样的

2、字符型注入

字符型语句:

字符型语句输入我们的输入会被一对单引号或这双引号闭合起来。

所以如果我们同样输入and 1=1/and 1=2会发现回显画面是并无不同的。

在我们传入and 1=1/and 1=2时语句变为

传入的东西变成了字符串并不会被当做命令。

所以字符型的测试方法最简单的就是加上单引号 ' ,出现报错。

加上注释符--后正常回显界面。

这里还有的点就是sql语句的闭合也是有时候不同的,下面是一些常见的

这一步可以用到order by函数,order by 函数是对MySQL中查询结果按照指定字段名进行排序,除了指定字 段名还可以指定字段的栏位进行排序,第一个查询字段为1,第二个为2,依次类推,所以可以利用order by就可以判断列数。

以字符型注入为例:

在列数存在时会正常回显

但是列数不存在时就会报错

这步就说明了为什么是联合注入了,用到了UNION,UNION的作用是将两个select查询结果合并

但是程序在展示数据的时候通常只会取结果集的第一行数据,这就让联合注入有了利用的点。

当我们查询的第一行是不存在的时候就会回显第二行给我们。

讲查询的数据置为-1,那第一行的数据为空,第二行自然就变为了第一行

在这个基础上进行注入

可以发现2,3都为可以利用的显示点。

和前面一样利用union select,加上group_concat()一次性显示。

现在非常多的Web程序没有正常的错误回显,这样就需要我们利用报错注入的方式来进行SQL注入了

报错注入的利用步骤和联合注入一致,只是利用函数不同。

以updatexml为例。

UpdateXML(xml_target, xpath_expr, new_xml)

xml_target: 需要操作的xml片段

xpath_expr: 需要更新的xml路径(Xpath格式)

new_xml: 更新后的内容

此函数用来更新选定XML片段的内容,将XML标记的给定片段的单个部分替换为 xml_target 新的XML片段 new_xml ,然后返回更改的XML。xml_target替换的部分 与xpath_expr 用户提供的XPath表达式匹配。

这个函数当xpath路径错误时就会报错,而且会将路径内容返回,这就能在报错内容中看到我们想要的内容。

而且以~开头的内容不是xml格式的语法,那就可以用concat函数拼接~使其报错,当然只要是不符合格式的都可以使其报错。

[极客大挑战 2019]HardSQL

登录界面尝试注入,测试后发现是单引号字符型注入,且对union和空格进行了过滤,不能用到联合注入,但是有错误信息回显,说明可以使用报错注入。

利用updatexml函数的报错原理进行注入在路径处利用concat函数拼接~和我们的注入语句

发现xpath错误并执行sql语句将错误返回。

在进行爆表这一步发现了等号也被过滤,但是可以用到like代替等号。

爆字段

爆数据

这里就出现了问题flag是不完整的,因为updatexml能查询字符串的最大长度为32,所以这里要用到left函数和right函数进行读取

报错注入有很多函数可以用不止updatexml一种,以下三种也是常用函数:

堆叠注入就是多条语句一同执行。

原理就是mysql_multi_query() 支持多条sql语句同时执行,用;分隔,成堆的执行sql语句。

比如

在权限足够的情况下甚至可以对数据库进行增删改查。但是堆叠注入的*是很大的。但是与union联合执行不同的是它可以同时执行无数条语句而且是任何sql语句。而union执行的语句是有限的。

[强网杯 2019]随便注

判断完注入类型后尝试联合注入,发现select被过滤,且正则不区分大小写过滤。

那么就用堆叠注入,使用show就可以不用select了。

接下去获取表信息和字段信息

那一串数字十分可疑大概率flag就在里面,查看一下

这里的表名要加上反单引号,是数据库的引用符。

发现flag,但是没办法直接读取。再读取words,发现里面有个id字段,猜测数据库语句为

结合1'or 1=1#可以读取全部数据可以利用改名的方法把修改1919810931114514为words,flag修改为id,就可以把flag读取了。

最终payload:

盲注需要掌握的几个函数

在网页屏蔽了错误信息时就只能通过网页返回True或者False判断,本质上是一种暴力破解,这就是布尔盲注的利用点。

首先,判断注入点和注入类型是一样的。

但是盲注没有判断列数这一步和判断显示位这两步,这是和可回显注入的不同。

判断完注入类型后就要判断数据库的长度,这里就用到了length函数。

以[WUSTCTF2020]颜值成绩查询为例

输入参数后,发现url处有个get传入的stunum

然后用到length函数测试是否有注入点。

发现页面有明显变化

将传入变为

页面回显此学生不存在

那么就可以得出数据库名长度为3

测试发现过滤了空格

然后就是要查数据库名了,这里有两种方法

一、只用substr函数,直接对比

这种方法在写脚本时可以用于直接遍历。

二、加上ascii函数

这个payload在写脚本时直接遍历同样可以,也可用于二分法查找,二分法速度更快。

接下来的步骤就和联合注入一样,只不过使用substr函数一个一个截取字符逐个判断。但是这种盲注手工一个一个注十分麻烦所以要用到脚本。

直接遍历脚本

二分法脚本

时间盲注用于代码存在sql注入漏洞,然而页面既不会回显数据,也不会回显错误信息

语句执行后也不提示真假,我们不能通过页面的内容来判断

所以有布尔盲注就必有时间盲注,但有时间盲注不一定有布尔盲注

时间盲注主要是利用sleep函数让网页的响应时间不同从而实现注入。

sql-lab-less8:

无论输入什么都只会回显一个you are in...,这就是时间盲注的特点。

当正常输入?id=1时时间为11毫秒

判断为单引号字符型注入后,插入sleep语句

明显发现响应时间为3053毫秒。

利用时间的不同就可以利用脚本跑出数据库,后续步骤和布尔盲注一致。

爆库

爆表

爆字段

脚本

在进行SQL注入时,发现union,and,or被完全过滤掉了,就可以考虑使用异或注入

什么是异或呢

异或是一种逻辑运算,运算法则简言之就是:两个条件相同(同真或同假)即为假(0),两个条件不同即为真(1),null与任何条件做异或运算都为null,如果从数学的角度理解就是,空集与任何集合的交集都为空

即 1^1=0,0^0=0,1^0=1

利用这个原理可以在union,and,or都被过滤的情况下实现注入

[极客大挑战 2019]FinalSQL

给了五个选项但是都没什么用,在点击后都会在url处出现?id。

而且union,and,or都被过滤

测试发现?id=1^1会报错

但是?id=1^0会返回?id=1的页面,这就是前面说的原理,当1^0时是等于1的所以返回?id=1的页面。

根据原理写出payload,进而写出脚本。

爆库

爆表

爆字段

据此可以写出基于异或的布尔盲注脚本

实验推荐:课程:SQL注入初级(合天网安实验室)

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
房产证是房管局具体哪个部门在办理 电脑绿灯闪烁无法开机电脑主机绿灯一直亮但是开不开机没有反应_百度... 联想19寸显示器出现绿色一闪一闪 显示器绿灯闪烁,没图像 为什么我的联想显示器的指示灯总是闪烁??? 梦见一个小乞丐撒尿到头来的预兆 国服3.22战斗贼如何打出《高》DPS 国服3.22盗贼天赋,武器选择 魔兽世界3.22版本,战斗贼输出循环,请详细一点儿,谢谢,还有,红色宝石全部... 当老板需要具备哪些品质和能力 魅蓝note5固件怎么使用 魅蓝note5能刷吗 魅蓝note5可以刷交通卡吗? 请问一下人均gdp是什么意思 喜剧电影《东北合伙人》陈嘉男为爱上演爆笑“戏中戏”,有什么笑点... 《山炮进城》免费在线观看完整版高清,求百度网盘资源 跪求好心人分享东北喜剧人2016年上映的由小沈龙主演的免费高清百度云资 ... 《东北喜剧人》免费在线观看完整版高清,求百度网盘资源 沉香木泡水功效有哪些?给介绍介绍 微信误下载怎么恢复 微信误被卸载了怎么恢复正常 激励人心的励志说说:不为失败找借口,只为成功找方法 涡流发热原理 赤月传说攻略 赤月传说是什么 美妙天堂啦啦米蕾索菲他们组合的名字叫什么 美妙天堂6个人组合叫什么名字? 香罗帕剧情简介 excel如何设置劳动合同到期提醒? 小学一年级下册语文教学工作计划 一年级下教学工作计划 急需金希澈在YS中唱的《再次回到你身边》的韩文歌词,希望有知道的可以告... 《欣赏是一种善良》阅读及答案 出差回家老公给我一份离婚协议,小姑子为了我的钱挽留我,我应该怎么办... 六年级语文阅读及答案:欣赏是一种善良 你好我该怎么称呼你 鼻子冒火、流鼻涕吃什么药 感冒一直流鼻涕 鼻孔下面上火了 怎么弄(女,25岁) nacon 手柄如何保修? PS4有哪些值得入手的配件? 北京环球影城各个园区内有哪些特色餐厅? 为什么我(男生)冬天手很冰?但其他男的都是热的。 手机如何换电话铃声 换电话铃声的方法 ios9.1的,中指表情在哪?输入什么? 周公解梦梦见自己掉头发 梦见掉头发究竟象征什么 梦见掉头发意味着什么 兰亭序歌词 兰亭序歌词汇总 哪里能看《海上繁花》全集 适合应届毕业生创业的项目 dnf中如何换称号?谁可以给我讲讲 DNF这个是干什么的?在哪里去换称号? dnf称号咋替换动漫啊,我咋用不明白那,称号是年装套带的能替换吗,下面有...