当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2014-066504

漏洞标题:PageAdmin任意文件删除+注册管理员

相关厂商:pageadmin.net

漏洞作者: what_news

提交时间:2014-06-28 11:12

修复时间:2014-09-26 11:14

公开时间:2014-09-26 11:14

漏洞类型:设计缺陷/逻辑错误

危害等级:中

自评Rank:5

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-06-28: 细节已通知厂商并且等待厂商处理中
2014-06-28: 厂商已经确认,细节仅向厂商公开
2014-07-01: 细节向第三方安全合作伙伴开放
2014-08-22: 细节向核心白帽子及相关领域专家公开
2014-09-01: 细节向普通白帽子公开
2014-09-11: 细节向实习白帽子公开
2014-09-26: 细节向公众公开

简要描述:

最新版任意文件删除

详细说明:

漏洞一 任意文件删除 可导致系统重装 不过需要管理员权限
看下这个文件

e/aspx/delete_file.aspx


<% @ Page language="c#"%>
<% @ Import NameSpace="System.Data"%>
<% @ Import NameSpace="System.Data.OleDb"%>
<% @ Import NameSpace="System.IO"%>
<% @ Import NameSpace="PageAdmin"%>
<script Language="C#" Runat="server">
override protected void OnInit(EventArgs e)
{
Check_Post();
string Table=Request.Form["table"];
string Field=Request.Form["field"];
string Id=Request.Form["id"];
string D_File=Request.Form["path"];
string UserName="";
int IsMaster=0;
int CanDel=1;
if(IsStr(Table) && IsStr(Field) && IsNum(Id))
{
Conn theconn=new Conn();
OleDbConnection conn=new OleDbConnection(theconn.Constr());
conn.Open();
if(Request.Cookies["Master"]!=null)
{
Master_Valicate Master=new Master_Valicate();
Master.Master_Check();
IsMaster=1;
}
else
{
Member_Valicate Member=new Member_Valicate();
Member.Member_Check();
UserName=Member._UserName;
}
string sql;
OleDbCommand comm;
OleDbDataReader dr;
sql="select id from pa_field where thetable='"+Table+"' and [field]='"+Field+"'";
comm=new OleDbCommand(sql,conn);
dr=comm.ExecuteReader();
if(!dr.Read()
{
CanDel=0;
}
dr.Close();
if(CanDel==1) //数据库要有刚才那个记录 candel的值才不会被修改为0
{
if(IsMaster==1) //需要管理员权限
{
Del_File(D_File); //跟进
}
if(Id!="0")
{
if(IsMaster==0)
{
sql="update "+Table+" set "+Field+"='' where username='"+UserName+"'' and id="+Id;
}
else
{
sql="update "+Table+" set "+Field+"='' where id="+Id;
}
comm=new OleDbCommand(sql,conn);
comm.ExecuteNonQuery();
if(IsMaster==0)
{
sql="update pa_file set detail_id=0 where username='"+UserName+"'' and thetable='"+Table+"' and [field]='"+Field+"' and detail_id="+Id;
}
else
{
sql="update pa_file set detail_id=0 where thetable='"+Table+"' and [field]='"+Field+"' and detail_id="+Id;
}
comm=new OleDbCommand(sql,conn);
comm.ExecuteNonQuery();
}
}
conn.Close();
}
}
private void Del_File(string FilePath)
{
if(FilePath!="" && FilePath.IndexOf(":")<0 && FilePath.IndexOf("/e/upload/")==0) //没过滤..可跳出目录 要以/e/upload/ 开头
{
if(FilePath.IndexOf("/zdy/")<0)
{
FilePath=Server.MapPath(FilePath);
if(File.Exists(FilePath))
{
File.Delete(FilePath);
}
}
}
}


漏洞证明
可结合大牛的漏洞进行组合攻击
PageAdmin可绕过验证伪造任意用户身份登录(前台、后台)

http://wooyun.org/bugs/wooyun-2010-061861


现在进行测试就不用上面的步骤了,默认admin/admin 登陆后台,
然后访问

http://192.168.1.104/e/aspx/delete_file.aspx


post 提交

table=pa_member&Field=pa_address&id=0&path=/e/upload/../install/install.lock


本来是这样的 install.lock没删除

912.png


按上面操作之后

914.png


系统就可以重新安装了
或者可删除任意文件了
漏洞二 系统后台是默认 不允许注册管理员的

915.png


我们看下前台注册吧
访问

http://192.168.1.104/e/member/index.aspx?s=1&type=reg


我们提交注册信息抓下包看看

916.png


多了一个用户组 1代表普通会员 8代表管理员 把他修改成提交

917.png


918.png


919.png


然后看下后台

913.png


后台虽然设置了 禁止注册管理员账号 但是我们还是注册了管理员账号
如果开启了这样的模式

813.png


很多人认为 如果禁止了管理员注册了 那么第二个选项 是否审核注册用户觉得很多余了 干脆不审核注册管理员账号 或者可以设置邮箱验证(下拉有三个选项 不要选无需验证就好) 哈哈 那就危险了

漏洞证明:

漏洞证明如上

修复方案:

对参数进行处理

版权声明:转载请注明来源 what_news@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:10

确认时间:2014-06-28 11:26

厂商回复:

非常感谢,我司将尽快发布更新文件。

最新状态:

2014-10-17:新版本已经修复此漏洞,感谢白帽子