这两天,公司的一个客户平台突然发现里面的所产品都不能发布了。
偶立刻对他们的平台进行了测试。最终把目标锁定在几行图形缩略的代码上面。由于改公司的平台用户发布的产品图片都要进行检测和裁剪,以便能够让产品页更好的显示,所以这类代码出现问题直接影像到系统的正常运行。
错误如下:
1 Exception information:
2 Exception type: DllNotFoundException
3 Exception message: Unable to load DLL 'gdiplus.dll': 拒绝访问。 (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))
4
5 Request information:
6 Request URL: http://www.*********.com/g/api.aspx?action=code&c4c5b1f446078a76=
7 Request path: /g/api.aspx
8 User host address: 58.82.225.131
9 User:
10 Is authenticated: False
11 Authentication Type:
12 Thread account name: NT AUTHORITY\NETWORK SERVICE
13
14 Thread information:
15 Thread ID: 7
16 Thread account name: NT AUTHORITY\NETWORK SERVICE
17 Is impersonating: False
18 Stack trace: at System.Drawing.SafeNativeMethods.Gdip.GdipCreateBitmapFromScan0(Int32 width, Int32 height, Int32 stride, Int32 format, HandleRef scan0, IntPtr& bitmap)
19 at System.Drawing.Bitmap..ctor(Int32 width, Int32 height, PixelFormat format)
20 at System.Drawing.Bitmap..ctor(Int32 width, Int32 height)
21 at Web.Lang.WebCode.CreateImage(String checkCode)
22 at Web.Lang.WebCode.ShowImages()
23 at IruoFloor.g.API.ShowCodeIMG()
24 at IruoFloor.g.API.Page_Load(Object sender, EventArgs e)
25 at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
26 at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
27 at System.Web.UI.Control.OnLoad(EventArgs e)
28 at System.Web.UI.Control.LoadRecursive()
29 at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
30
因为该平台的程序除了一些小的更新外,程序一直运行的很稳定。。。
突然出现此类故障,也算是难得。。。
首先远程到服务器,进行检查,发现原有的权限配置没有更改过。把Gdiplus.dll加上Everyone权限.重启服务器(MS的系统不明原因重启下解决故障效率很高)
发现故障依旧。。。郁闷中。。
打开百度输入错误提示,考,尽然没有发现一篇文章介绍。
在GG下把,很好有两篇是在少的可怜,打开也就是说一些权限配置上的问题....
查下Gdiplus.dll,哦,原来这个DLL这两天暴出一个严重的漏洞,BMP文件可以直接挂马运行。。。是不小。。
服务器上面开启了自动更新,应该是自动更新程序造成的。。
难道不成要重装系统...
继续不放弃,不断的改变权限,把这个该死的GDI+漏洞补丁在打一次,就这样反复折腾了一个上午。。
把System.Drawing反汇编看看,其实里面就是直接DllImport调用Gdiplus.dll
无奈中已经做好的重装的准备
反正要重装了,在试下把原来.net 2.0(2.0已经卸到重装了)升级到.NET 3.0
结果咋样,搞定了。
对MS真是无语