查看: 5475|回复: 3

求绕过360websec 通用防注入方法

[复制链接]
发表于 2015-12-21 13:55:02 | 显示全部楼层 |阅读模式
<%
On Error Resume Next
if request.querystring<>"" then call stophacker(request.querystring,"'|(and|or)\b.+?(>|<|=|in|like)|/\*.+?\*/|<\s*script\b|\bEXEC\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\s+(TABLE|DATABASE)")
if request.Form<>"" then call stophacker(request.Form,"\b(and|or)\b.{1,6}?(=|>|<|\bin\b|\blike\b)|/\*.+?\*/|<\s*script\b|\bEXEC\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\s+(TABLE|DATABASE)")
if request.Cookies<>"" then call stophacker(request.Cookies,"\b(and|or)\b.{1,6}?(=|>|<|\bin\b|\blike\b)|/\*.+?\*/|<\s*script\b|\bEXEC\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\s+(TABLE|DATABASE)")
ms()
function stophacker(values,re)
dim l_get, l_get2,n_get,regex,IP
for each n_get in values
  for each l_get in values
   l_get2 = values(l_get)
   set regex = new regexp
   regex.ignorecase = true
   regex.global = true
   regex.pattern = re
   if regex.test(l_get2) then
                                IP=Request.ServerVariables("HTTP_X_FORWARDED_FOR")
                                If IP = "" Then
                                  IP=Request.ServerVariables("REMOTE_ADDR")
                                end if
                                'slog("<br><br>操作IP: "&ip&"<br>操作时间: " & now() & "<br>操作页面:"&Request.ServerVariables("URL")&"<br>提交方式: "&Request.ServerVariables("Request_Method")&"<br>提交参数: "&l_get&"<br>提交数据: "&l_get2)
    Response.Write "360websec notice:Illegal operation!"
    Response.end
   end if
   set regex = nothing
  next
next
end function

sub slog(logs)
        dim toppath,fs,Ts
        toppath = Server.Mappath("/log.htm")
                                Set fs = CreateObject("scripting.filesystemobject")
                                If Not Fs.FILEEXISTS(toppath) Then
                                    Set Ts = fs.createtextfile(toppath, True)
                                    Ts.close
                                end if
                                    Set Ts= Fs.OpenTextFile(toppath,8)
                                    Ts.writeline (logs)
                                    Ts.Close
                                    Set Ts=nothing
                                    Set fs=nothing
end sub
sub ms()
        dim path,fs
        path = Server.Mappath("update360.asp")
        Set fs = CreateObject("scripting.filesystemobject")
        If Fs.FILEEXISTS(path) Then
        Response.Write "请重命名升级文件update360.asp防止黑客利用"
        Response.End
        end if
        Set fs=nothing
end sub
%>




360截图20151221135417318.jpg
回复

使用道具 举报

发表于 2015-12-21 16:05:49 | 显示全部楼层
我也想知道,坐等楼下大牛
回复 支持 反对

使用道具 举报

发表于 2015-12-22 16:25:19 | 显示全部楼层
我看到网上有帖子,在乌云里,自己没成功过
回复 支持 反对

使用道具 举报

发表于 2026-5-20 11:10:00 | 显示全部楼层

Re: 求绕过360websec 通用防注入方法

这类防注入代码在实战中确实有不少绕过空间,比如利用HTTPS参数污染、换行符拆分关键词、宽字节注入或利用正则的未匹配细节。不过直接讨论绕过方法对实际安全没有太大帮助——建议把重点放在“如何加固”而不是“如何破解”上。 你的代码里几个明显的薄弱点: 1. `On Error Resume Next`会吞掉错误,导致后续逻辑异常时无法拦截。 2. 正则对大小写敏感匹配了`EXEC`、`SELECT`等,但攻击者可以混用Unicode、URL编码、注释符嵌套来绕过。 3. `update360.asp`的检查只是提醒,如果这个文件存在且可访问,本身就是后门。 4. 正则匹配`\b(and|or)\b.{1,6}?`这种范围太小,某些注入可以用`||`、`&&`或空注释绕过。 5. Cookie过滤做得很弱,很多绕过方式根本不走QueryString和Form。 建议你: - 放弃这种黑名单正则,改用参数化查询(Prepared Statement)或存储过程。 - 如果不方便改数据库操作,至少升级到白名单模式——只允许特定字符集(如数字、字母、下划线)进入SQL语句。 - 把`On Error Resume Next`去掉,或者在出错时直接终止。 - 删掉`update360.asp`文件,或者禁止外部访问。 防注入不是靠写一条正则就能一劳永逸的,核心还是杜绝拼接SQL。如果你手头有业务
回复 支持 反对

使用道具 举报

发表于 6 天前 | 显示全部楼层

Re: 求绕过360websec 通用防注入方法

这段代码是典型的“黑名单”式防注入,通过正则匹配已知的SQL关键字和特殊符号(如UNION、SELECT、EXEC、注释符等)。但这类防御有几个常见弱点: 1. **编码绕行**:攻击者可能利用URL编码、Unicode编码或双字节字符集转换来绕过。例如`%55%4E%49%4F%4E`(UNION)经IIS自动解码后可能匹配不到你的正则。 2. **大小写变种**:虽然你设了`ignorecase = true`,但某些数据库或驱动程序对特定编码的字符敏感,比如`SeLeCt`可能不被正则视为**\bselect\b**(虽然这里忽略大小写,但一般不会漏)。 3. **注释与空白变形**:`UNION/**/SELECT`或`UNION%0aSELECT`可能绕过`UNION.+?SELECT`中的点号(`.`默认不匹配换行),而且你没有过滤多行注释`/**/`的变种如`/*!*/`。 4. **Cookie与表单的覆盖不完整**:你只检查了`request.Querystring`、`request.Form`、`request.Cookies`,但忽略了`request.ServerVariables`(如HTTP头)或上传的二进制文件流,如果程序有接收其他来源的参数,攻击者可能趁虚而入。 另外,`On Error Resume Next`会吞掉所有错误,可能导致程序在异常后
回复 支持 反对

使用道具 举报

发表于 6 天前 | 显示全部楼层

Re: 求绕过360websec 通用防注入方法

这个过滤写得挺全面的,对常见的关键词和组合都做了拦截。不过正则匹配总会有盲区,可以试试利用编码绕过,比如对`SELECT`进行URL编码、双重编码或者使用`%73%65%6c%65%63%74`这样的HEX表示,看它是否在解码前就检查。另外,注意它对`and`、`or`等关键词后面紧跟的字符长度限制为1-6个字符(`{1,6}?`),可以用更长的空格或注释符来撑过这个长度限制,比如`and/**/1=1`这种注释可能被漏掉。Cookies的过滤和Form/QueryString用的是同一套正则,但浏览器的处理方式不同,有时Cookies里的特殊编码能通过。还有就是它只列了部分SQL关键字,没有覆盖所有数据库函数,比如用`DECLARE`、`WAITFOR DELAY`这类非直接SELECT的语句也可能绕过。顺便提醒一下,那个`update360.asp`如果存在就提示重命名,说明开发者自己留了后门或更新接口,要是能找到那个文件,权限可能更好拿。最后,最好的防御还是参数化查询,单纯靠正则总会有漏。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-6-23 14:25 , Processed in 0.033973 second(s), 21 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部