午后阳光——纯粹原创空间

转载请邮件联系,谢绝盈利机构转载 音乐教育了我们...

  DonewsBlog  |  Donews首页  |  Donews社区  |  Donews邮箱  |  我的首页  |  联系作者  |  聚合   |  登录
  9篇文章 :: 0篇收藏:: 3篇评论:: 0个Trackbacks

公告


qq:828345
MSN:
tomqq2020@hotmail.com
职业生涯:
从事网络安全设备的开发,IDS,sslvpn,数据库网络审计,漏洞研究。 精通网站脚本语言以及web安全;精通wap,phs开发;主要使用语言为c/c++,java,主要开发平台为linux。
2004年毕业于四川大学计算机应用专业,硕士学历。毕业后进入某研究所从事安全设备研发;目前在某外企从事ssl-vpn的研发。

文章

收藏

相册

我得好朋友

存档


正在读取评论……


 

 

3.1.  对常用利用函数的检测

部分数据库系统函数,常用于注入攻击的综合利用,具体利用原理前面都有叙述。这些常见的函数是drop table,       truncate,  between and,  net use,   user>0,   user<0,   user_name(),  db_name(),     insert into <%|

 

 

规则设计:

drop table: 攻击者利用该命令恶意毁坏数据库。

/(\%3D|=)+(\w+)(\S|\s)+((\%64)|d|D|(\%44))((\%72)|r|R|(\%52))((\%6F)|o|O|(\%4F))((\%70)|p|P|(\%50))(\S+|\s+)((\%74)|t|T|(\%54))((\%61)|a|A|(\%61))((\%62)|b|B|(\%42))((\%6C)|l|L|(\%4C))((\%65)|e|E|(\%45)) /ix

 

 

truncate:

/(\%3D|=)+(\w+)(\S|\s)+((\%74)|t|T|(\%54))((\%72)|r|R|(\%52))((\%75)|u|U|(\%55))((\%6E)|c|C|(\%4E)) ((\%63)|c|C|(\%43))((\%61)|a|A|(\%61))((\%74)|t|T|(\%54))((\%66)|e|E|(\%45)) /ix

 

 

between and:

/(\%3D|=)+(\w+)(\S|\s)+((\%62)|b|B|(\%42))((\%65)|e|E|(\%45))((\%74)|t|T|(\%54))((\%77)|w|W|(\%57))((\%65)|e|E|(\%65))((\%65)|e|E|(\%65))((\%6E)|n|N|(\%4E))(\S|\s)+((\%61)|a|A|(\%41))((\%6E)|n|N|(\%4E))((\%64)|d|D|(\%44))/ix

 

 

net use:

/(\%3D|=)+(\w+)(\S|\s)+((\%6E)|n|N|(\%6e))((\%65)|e|E|(\%45))((\%74)|t|T|(\%54)) (\S|\s)+((\%75)|u|U|(\%55))((\%73)|s|S|(\%53))((\%65)|e|E|(\%45))/ix

 

 

exec():

/(\%3D|=)+(\w+)(\S|\s)+((\%65)|e|E|(\%45))((\%78)|x|X|(\%58))((\%65)|e|E|(\%45)) ((\%63)|c|C|(\%43)) ((\%28)|\() /ix

 

 

user>0|<0:这是专用于对SQLSERVER取得数据库用户名的有效地攻击手段。

/(\%3D|=)+(\w+)(\S|\s)+((\%75)|u|U|(\%55))((\%73)|s|S|(\%53))((\%65)|e|E|(\%45)) ((\%72)|r|R|(\%52)) ((\%3E)|>|<|(\%3C)) (0) /ix

 

 

user_name():

/(\%3D|=)+(\w+)(\S|\s)+((\%75)|u|U|(\%55))((\%73)|s|S|(\%53))((\%65)|e|E|(\%45))((\%72)|r|R|(\%52)) ((\%5F)| (_)) ((\%6E)|n|N|(\%4E)) ((\%61)|a|A|(\%41)) ((\%6D)|m|M|(\%4D)) ((\%65)|e|E|(\%45)) ((\%28)|\() /ix

 

 

db_name():

/(\%3D|=)+(\w+)(\S|\s)+((\%64)|d|D|(\%44))((\%62)|b|B|(\%42)) ((\%5F)| (_)) ((\%6E)|n|N|(\%4E)) ((\%61)|a|A|(\%41)) ((\%6D)|m|M|(\%4D)) ((\%65)|e|E|(\%45)) ((\%28)|\() /ix

 

 

insert into + <%|

/(\%3D|=)+(\w+)(\S|\s)+((\%69)|i|I|(\%49))((\%6E)|n|N|(\%4E))((\%73)|s|S|(\%53))((\%65)|e|E|(\%45))((\%72)|r|R|(\%52))((\%74)|t|T|(\%54))(\S|\s)+((\%69)|i|I|(\%49))((\%6E)|n|N|(\%4E))((\%74)|t|T|(\%54))((\%6F)|o|O|(\%4F))(\S|\s)+((\%3c)|<)+((\%25)|(%)|(\?)|(\%3f))+/ix

 

 

修正后完整的规则如下:

17 alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"检测到SQL注入攻击特征字符"; flow:to_server,established;uricontent:"?"; pcre:" /(\%3D|=)+(\w+)(\S|\s)+((\%64)|d|D|(\%44))((\%72)|r|R|(\%52))((\%6F)|o|O|(\%4F))((\%70)|p|P|(\%50))(\S+|\s+)((\%74)|t|T|(\%54))((\%61)|a|A|(\%61))((\%62)|b|B|(\%42))((\%6C)|l|L|(\%4C))((\%65)|e|E|(\%45)) /ix

 ";nocase; sid:10130; rev:1;)

 

 

18)    alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"检测到SQL注入攻击特征字符"; flow:to_server,established;uricontent:"?"; pcre:" /(\%3D|=)+(\w+)(\S|\s)+((\%74)|t|T|(\%54))((\%72)|r|R|(\%52))((\%75)|u|U|(\%55))((\%6E)|c|C|(\%4E)) ((\%63)|c|C|(\%43))((\%61)|a|A|(\%61))((\%74)|t|T|(\%54))((\%66)|e|E|(\%45)) /ix ";nocase; sid:10131; rev:1;)

 

 

19)    alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"检测到SQL注入攻击特征字符"; flow:to_server,established;uricontent:"?"; pcre:" /(\%3D|=)+(\w+)(\S|\s)+((\%62)|b|B|(\%42))((\%65)|e|E|(\%45))((\%74)|t|T|(\%54))((\%77)|w|W|(\%57))((\%65)|e|E|(\%65))((\%65)|e|E|(\%65))((\%6E)|n|N|(\%4E))(\S|\s)+((\%61)|a|A|(\%41))((\%6E)|n|N|(\%4E))((\%64)|d|D|(\%44))/ix ";nocase; sid:10132; rev:1;)

 

 

20 alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"检测到SQL注入攻击特征字符"; flow:to_server,established;uricontent:"?"; pcre:" /(\%3D|=)+(\w+)(\S|\s)+((\%6E)|n|N|(\%6e))((\%65)|e|E|(\%45))((\%74)|t|T|(\%54)) (\S|\s)+((\%75)|u|U|(\%55))((\%73)|s|S|(\%53))((\%65)|e|E|(\%45))/ix ";nocase; sid:10133; rev:1;)

 

 

21 alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"检测到SQL注入攻击特征字符"; flow:to_server,established;uricontent:"?"; pcre:" /(\%3D|=)+(\w+)(\S|\s)+((\%65)|e|E|(\%45))((\%78)|x|X|(\%58))((\%65)|e|E|(\%45)) ((\%63)|c|C|(\%43)) ((\%28)|\() /ix

";nocase; sid:10134; rev:1;)

 

 

22alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"检测到SQL注入攻击特征字符"; flow:to_server,established;uricontent:"?"; pcre:" /(\%3D|=)+(\w+)(\S|\s)+((\%75)|u|U|(\%55))((\%73)|s|S|(\%53))((\%65)|e|E|(\%45)) ((\%72)|r|R|(\%52)) ((\%3E)|>|<|(\%3C)) (0) /ix

";nocase; sid:10135; rev:1;)

 

 

23 alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"检测到SQL注入攻击特征字符"; flow:to_server,established;uricontent:"?"; pcre:" /(\%3D|=)+(\w+)(\S|\s)+((\%75)|u|U|(\%55))((\%73)|s|S|(\%53))((\%65)|e|E|(\%45))((\%72)|r|R|(\%52)) ((\%5F)| (_)) ((\%6E)|n|N|(\%4E)) ((\%61)|a|A|(\%41)) ((\%6D)|m|M|(\%4D)) ((\%65)|e|E|(\%45)) ((\%28)|\() /ix

 ";nocase; sid:10136; rev:1;)

 

 

24 alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"检测到SQL注入攻击特征字符"; flow:to_server,established;uricontent:"?"; pcre:" /(\%3D|=)+(\w+)(\S|\s)+((\%64)|d|D|(\%44))((\%62)|b|B|(\%42)) ((\%5F)| (_)) ((\%6E)|n|N|(\%4E)) ((\%61)|a|A|(\%41)) ((\%6D)|m|M|(\%4D)) ((\%65)|e|E|(\%45)) ((\%28)|\() /ix

 ";nocase; sid:10137; rev:1;)

 

 

25 alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"检测到SQL注入攻击特征字符"; flow:to_server,established;uricontent:"?"; pcre:" /(\%3D|=)+(\w+)(\S|\s)+((\%69)|i|I|(\%49))((\%6E)|n|N|(\%4E))((\%73)|s|S|(\%53))((\%65)|e|E|(\%45))((\%72)|r|R|(\%52))((\%74)|t|T|(\%54))(\S|\s)+((\%69)|i|I|(\%49))((\%6E)|n|N|(\%4E))((\%74)|t|T|(\%54))((\%6F)|o|O|(\%4F))(\S|\s)+((\%3c)|<)+((\%25)|(%)|(\?)|(\%3f))+/ix

";nocase; sid:10138; rev:1;)

 

 

3.2.  检测危险字符       ;    : ――

主要危害:

这些字符用于SQL注入攻击中的攻击串的构造,如:造成SQL语句闭合、添加恶意语句等等。例如在登陆权限绕过注入攻击中,相关验证代码通常为为:$exec="select * from user where usr='".$_POST['usr']."' and psw='".$_POST['psw']."'"; 攻击者通常使用‘号或者“号来闭合SQL语句,如提交类似请求:usr’admin’ psw=’ 1' or 1=1 order by id#’ 后,程序内部执行语句变为:select * from user where usr='admin' and psw='1' or 1=1 order by id#',#号为mysql忽略后续语句的标记,成功造成内部SQL语句的闭合,绕过登陆成功。对于不同的攻击情况,这些字符用于不同的数据库、脚本闭合、攻击串构造,属于通用的普遍的但是攻击又不可缺少特征。

 

 

检测要点:

1)  过滤上述的危险字符         ――  ;   

2)  由于该内容是使用表单提交或者URL提交,考察HTTP协议,故关联TCP流中的关键字 ? =

 

 

规则设计:

正则表达式为:/(\%27)|(\')|(\-\-)|(\%23)|(#)/ix,即:检测‘号或者等值的16进制编码 | 检测―― | 检测#号或者等值的16进制编码 & 忽略大小写 & 忽略输入的空白

由于“号在实际脚本程序中,无法单独引起SQL语句的闭合,故规则中忽略该项;在URL中参数提交一般为xxx.asp?a=xxx,为了提高效率和准确率,故而在规则中增加检测?和=;另外在实际应用中发现,合法的HTTP协议流中也可能含有;号,为了避免误报,增加检测条件,即在URL中,=号后再来检测分号,即:

26)    alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"检测到SQL注入攻击特征字符"; flow:to_server,established;uricontent:"?"; uricontent:”?”;pcre:" /((\%3D)|(=))[^\n]*((\%27)|(\')|(\-\-)|(\%3B)|(;) |(\%23)|())/i ";nocase; sid:10139; rev:1;)

 

 

3.3.  过滤危险字符1=1   1’=’1  1=2    1’=’2 1<>1  a=a a’=’a a<>a a’<>’a

这些明显冗余或歧意的字符用于SQL注入攻击中的攻击串的构造,主要和or/and/union联合使用来造成恶意SQL语句等。在网页脚本中,这种字符串一般用于平稳避过正常SQL语句,从而使得恶意构造的SQL语句得以执行,此类敏感字符串在常用SQL注入攻击工具中也是常见手段,属于通用的普遍的攻击特征。

 

 

检测要点:

1)  过滤上述的危险字符;

2)  由于该内容是使用表单提交或者URL提交,考察HTTP协议,故关联TCP流中的关键字 ? =

3)  降低误报和漏报,优化检测效率。1112,类似的也可一构造131<>4等其他串。但是前者具有普遍性,在攻击手法和实际工具中最这类写法最常见,这里综合考虑,考虑到普遍性,对这类问题检测111<>1121<>2,a=a, a<>a

 

 

规则设计:

正则表达式为:/([=]+)(1=1)|(1'='1)|(1=2)|(1<>1)|(a<>a)/ix

由于在实际脚本程序中,有需要‘号引起SQL语句的闭合的情况,故规则中增加检测‘号和数字字母的组合。修正后的表达式为:/([=]+)(1=1)|(1'='1)|(1=2)|(1<>1)|(a<>a) |(a=a) (1’=’2)|(1’<>’1)|(a’<>’a) |(a’<>’a) /ix

URL中参数提交一般为xxx.asp?a=xxx,为了提高效率和准确率,故而在规则中增加检测?和=,即:

27)    alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"检测到SQL注入攻击特征字符"; flow:to_server,established;uricontent:"?"; pcre:" /([=]+)(1=1)|(1'='1)|(1=2)|(1<>1)|(a<>a) |(a=a) (1’=’2)|(1’<>’1)|(a’<>’a) |(a’<>’a) /ix ";nocase; sid:10140; rev:1;)

 

 

3.4.  OR利用的检测

OR可以用于构造对脚本原有SQL语句的平稳规避,比如绕过登陆攻击、猜测表名字段名、和其他关键字联合使用等。考察攻击特征,如例串,http://www.www.www/xxx.xxx?id=xxx or 1<>1‘#,发现,首先具有参数的URL,具有特征一个是脚本后的?号,另一个是=号,另一个是’号,另一个是OR,这是OR利用的基本特征和检测要点。

 

 

规则设计:

首先正则表达式为:/([=]+)\w*((\%27)|(\'))((\%6F)|o|(\%4F))((\%72)|r|(\%52))/ix
解释:
\w* -
零个或多个字符或者下划线。
(\%27)|\' -
单引号或它的hex等值。
(\%6 F)|o|(\%4 F))((\%72)|r|-(\%52)
‘or’的大小写以及它的hex等值。/([=]+)(1=1)|(1'='1)|(1=2)|(1<>1)|(a<>a)/ix

由于在实际脚本程序中,有需要‘号引起SQL语句的闭合的情况,故规则中增加检测‘号和数字字母的组合。修正后的表达式为:/([=]+)(1=1)|(1'='1)|(1=2)|(1<>1)|(a<>a) |(a=a) (1’=’2)|(1’<>’1)|(a’<>’a) |(a’<>’a) /ix

URL中参数提交一般为xxx.asp?a=xxx,为了提高效率和准确率,故而在规则中增加检测?和=,即:

28)    alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"检测到SQL注入攻击特征字符"; flow:to_server,established;uricontent:"?"; pcre:" /([=]+)(1=1)|(1'='1)|(1=2)|(1<>1)|(a<>a) |(a=a) (1’=’2)|(1’<>’1)|(a’<>’a) |(a’<>’a) /ix ";nocase; sid:10141; rev:1;)

 

 

3.5.  对扩展存储过程利用的检测

EXEC()调用系统存储过程,同样可以实现注入。

 

 

规则设计:

首先正则表达式为:  /exec(\s|\+)+(s|x)p\w+/ix

解释:

exec - 请求执行储存或扩展储存过程的关键字

(\s|\+)+ - 一个或多个的空白或它们的http等值编码

(s|x) p- sp’或‘xp'字母用来辨认储存或扩展储存过程

\w+ - 一个或多个字符或下划线来匹配过程的名称解释:

URL中参数提交一般为xxx.asp?a=xxx,为了提高效率和准确率,故而在规则中增加检测?,即:

29)    alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS (msg:"检测到SQL注入攻击特征字符"; flow:to_server,established;uricontent:"?"; pcre:" /exec(\s|\+)+(s|x)p\w+/ix ";nocase; sid:10142; rev:1;)



Trackback: http://tb.donews.net/TrackBack.aspx?PostId=1184727


[点击此处收藏本文]  发表于2007年07月09日 11:41 PM




正在读取评论……

发表评论

大名:
网址:
验证码
评论