0x01 前言
上周我用Modsecurity替换掉naxsi作为nginx的waf。但在实际应用中发现POST请求一直出现500错误,导致我无法正常登入后台与留言。
因为是刚接触Modsecurity,在问题排查上走了不少弯路。经过好几天的测试,我发现只需要将Modsecurity升级到3.0系列就好了。
0x02 BUG
因为我的日志已经删除,在这里引用GitHub上的一段日志,以下是引用地址:
以下是引用的日志内容:
#Modsecurity log --398c3027-A-- [20/Feb/2014:12:11:56 +0100] AcAcxcAcAcAcAcYcAcACAcAc 11.22.33.44 54093 127.0.0.1 80 --398c3027-B-- POST /_layouts/login.aspx?ReturnUrl=%2f HTTP/1.1 Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */* Referer: http://pippo.pluto.it/_layouts/login.aspx?ReturnUrl=%2f Accept-Language: it User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E) Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate Host: pippo.pluto.it Content-Length: 569 Connection: Keep-Alive Cache-Control: no-cache --398c3027-C-- __LASTFOCUS=&__VIEWSTATE=%2FwEPDwUKMTc0NDQ2ODg4OQ9kFgJmD2QWAmYPZBYCAgMPZBYCAjUPZBYCAgEPZBYCZg9kFgICDQ8QDxYCHgdDaGVja2VkaGRkZGQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgEFJmN0bDAwJFBsYWNlSG9sZGVyTWFpbiRsb2dpbiRSZW1lbWJlck1l1qeKl1MHLq6QY7t46OHWkizdEl8%3D&__EVENTTARGET=&__EVENTARGUMENT=&__EVENTVALIDATION=%2FwEWBQKh1oXMDwLE96mtBQLLtsPBAgLkkP7MCgK%2FlZyyB7GYj%2B2NXtzlE%2BKZXCcgMOT2hSGC&ctl00%24PlaceHolderMain%24login%24UserName=admin&ctl00%24PlaceHolderMain%24login%24password=xxxxxxxx&ctl00%24PlaceHolderMain%24login%24login=Accesso&__spDummyText1=&__spDummyText2= --398c3027-F-- HTTP/1.1 500 Internal Server Error --398c3027-H-- Apache-Handler: IIS Stopwatch: 1392894716000050 257181 (- - -) Stopwatch2: 1392894716000050 257181; combined=73343, p1=1583, p2=70903, p3=0, p4=0, p5=701, sr=88, sw=156, l=0, gc=0 Producer: ModSecurity for nginx (STABLE)/2.7.7 (http://www.modsecurity.org/); OWASP_CRS/2.2.9. Server: ModSecurity Standalone Engine-Mode: "ENABLED" --398c3027-Z--
我的网站使用Google的PageSpeed对网站内容进行优化,同时启用了pagespeed_beacon用于检查网站的健康度。使用浏览器的控制台可以看到POST的内容:
这个POST动作是自动在后台完成的,在前端看不到任何内容,所以不会对访客造成影响。可是当我需要登入后台和撰写文章时也出现同样的错误:
HTTP/1.1 500 Internal Server Error
这使得我无法正常使用wordpress的功能,其实是所有POST的请求都会出现500 error。
0x03 DEBUG
因为这个问题早在2015年就出现了,所以我可以很轻易地找到解决办法:
- 使用ModSecurity 3.0;目前从GitHub上clone的版本是ModSecurity v3.0.0rc1 (Linux)。虽然是RC1,但在使用上几乎没有很严重的问题。
- 需要使用modsecurity connector;目前的版本是ModSecurity-nginx v0.1.1-beta。
而我使用以上版本与openresty 1.11.2.5进行编译,经过近一周的测试并未发现异常。
0x04 结语
使用新版本进行编译的过程与我前些天发布的文章( nginx编译安装ModSecurity作为高性能WAF )的过程有一些区别,这周末我再撰写一篇相关的文章。
请参考以下文章: