SQL注入:利用現有應用程序,攻擊者將精心構造的SQL語句注入到後臺數據庫,並使得數據庫引擎成功執行。php
SQL注入特色html
SQL注入攻擊的危害性前端
SQL注入工具mysql
手工探測SQL漏洞react
經過拼接SQL語句來判斷和驗證漏洞linux
// 測試語句 id=1' and 1=1 and 1=2 order by num union 聯合查詢 and 1=2 union select 1,2,3,4 user() database() group_coucat(table_name) from information_schema.tables where table_schema=tableName // table名十六進制 select * from downloads where id=1 and 1=2 union select 1,2,3,4,5,6,group_concat(username) from members;
?id=1 and 1=2 union select 1,2,3,4,5,6,load_file('/etc/passwd') ?id=1 and 1=2 union select 1,2,3,4,5,6,@@version ?id=1 and 1=2 union select 1,2,3,4,5,6,@@version_compile_os ?id=1 and 1=2 union select 1,2,3,4,5,6,@@basedir ?id=1 and 1=2 union select 1,2,3,4,5,6,@@datadir
SQL防護web
代碼層防護sql
編碼階段:shell
測試階段:數據庫
產品化階段:
第三方安全程序
SQL語句驗證
function CheckSql($db_string, $querytype = 'select') { global $cfg_cookie_encode; $clean = ''; $error = ''; $old_pos = 0; $pos = -1; $log_file = DEDEINC.'/../data/'.md5($cfg_cookie_encode).'_safe.txt'; $userIP = GetIP(); $getUrl = GetCurUrl(); // 若是是普通查詢語句,直接過濾一些特殊語法 if ($querytype=='select') { $notallow1 = "[^0-9a-z@\._-]{1,}(union|sleep|benchmark|load_file|outfile)[^0-9a-z@\.-]{1,}"; // $notallow2 = "--|/\*"; if (eregi($notallow1,$db_string)) { fputs(fopen($log_file,'a+'),"$userIP||$getUrl||$db_string||SelectBreak\r\n"); exit("<font size='5' color='red'>Safe Alert: Request Error step 1 !</font>"); } } // 完整的SQL檢查 while (true) { $pos = strpos($db_string, '\'', $pos + 1); if ($pos === false) { break; } $clean .= substr($db_string, $old_pos, $pos - $old_pos); while (true) { $pos1 = strpos($db_string, '\'', $pos + 1); $pos2 = strpos($db_string, '\\', $pos + 1); if ($pos1 === false) { break; } elseif ($pos2 == false || $pos2 > $pos1) { $pos = $pos1; break; } $pos = $pos2 + 1; } $clean .= '$s$'; $old_pos = $pos + 1; } $clean .= substr($db_string, $old_pos); $clean = trim(strtolower(preg_replace(array('~\s+~s' ), array(' '), $clean))); // 老版本的Mysql並不支持union,經常使用的程序裏也不使用union,可是一些黑客使用它,因此檢查它 if (strpos($clean, 'union') !== false && preg_match('~(^|[^a-z])union($|[^[a-z])~s', $clean) != 0) { $fail = true; $error="union detect"; } // 發佈版本的程序可能比較少包括--,#這樣的註釋,可是黑客常常使用它們 elseif (strpos($clean, '/*') > 2 || strpos($clean, '--') !== false || strpos($clean, '#') !== false) { $fail = true; $error="comment detect"; } // 這些函數不會被使用,可是黑客會用它來操做文件,down掉數據庫 elseif (strpos($clean, 'sleep') !== false && preg_match('~(^|[^a-z])sleep($|[^[a-z])~s', $clean) != 0) { $fail = true; $error="slown down detect"; } elseif (strpos($clean, 'benchmark') !== false && preg_match('~(^|[^a-z])benchmark($|[^[a-z])~s', $clean) != 0) { $fail = true; $error="slown down detect"; } elseif (strpos($clean, 'load_file') !== false && preg_match('~(^|[^a-z])load_file($|[^[a-z])~s', $clean) != 0) { $fail = true; $error="file fun detect"; } elseif (strpos($clean, 'into outfile') !== false && preg_match('~(^|[^a-z])into\s+outfile($|[^[a-z])~s', $clean) != 0) { $fail = true; $error="file fun detect"; } // 老版本的MYSQL不支持子查詢,程序裏可能也用得少,可是黑客可使用它來查詢數據庫敏感信息 elseif (preg_match('~\([^)]*?select~s', $clean) != 0) { $fail = true; $error="sub select detect"; } }
前端攻擊成因
網站的腳本經過最終一些手段生成HTML,若是HTML中含有一些惡意代碼。
跨站腳本攻擊(XSS)
XSS英文全稱(Cross-Site-Scripting)
,爲了區別於cascading style sheets
層疊樣式表(CSS)所以縮寫成XSS
形成結果:
XSS攻擊的危害
// 釣魚攻擊 ?id=1'<script>alert(/xss/)</script> ?id=1'<iframe src="http://www.baidu.com"></iframe> // 經過些形式(郵件,分享),來誘發用戶訪問
// 獲取cookie ?id=1'<script>alert(document.cookie)</script> // 經過一段腳本程序(包括document.cookie)將用戶的信息發送到遠程的惡意網站,惡意網站專門接收信息。(DVWA)
跨站請求僞造(CSRF)
影響關鍵處理被惡意使用
前端攻擊防護
XSS場景:web應用等
CSRF場景:內部網絡(路由器),Web應用等
代碼層防護:
第三方防護手段:
上傳web腳本,可以被服務器解析(web shell問題)
可以執行知足的條件:
合法性判斷繞過:
%00
空字符也就是null
// 編輯器的文件上傳burpsuite
代理抓包。把訪問的請求截斷而後修改頭信息或者參數,繞過合法性的繞過
文件上傳漏洞防護
經過請求的方式,將本地文件包含進去,包含進行的文件都是以PHP文件解析
if ($_GET['page']) { include $_GET['page'] } else { include 'main.php' }
文件包含漏洞防護:
php.ini
配置文件中allow_url_include = off
Apache的安全加固
// 文件類型 <Files ~ ".inc$"> Order allow,deny Deny from all </Files> // 目錄訪問控制 <Directory ~ "~/var/www/admin"> Order allow,deny Deny from all </Direactory> // 文件類型訪問控制 <FilesMatch .(txt)$> Order allow,deny Deny from all </FilesMatch>
PHP的安全加固
修改php.ini
中的配置
Mysql的安全加固
system
權限