DVWA中學習PHP常見漏洞及修復方法

2021-09-11 11:25:01 字數 2884 閱讀 5948

erevus · 2013/08/14 11:46

「安全是乙個整體,保證安全不在於強大的地方有多強大 而在於真正薄弱的地方在**」--劍心

從很多的滲透大型企業內網的案例來看,入侵者大多數是從web上找到漏洞,從而利用漏洞進一步進行提權,滲透入侵。

wooyun: 時代互聯上傳漏洞多台資料庫可控

wooyun: 網易某系統未授權訪問可導致內網被滲透

wooyun: 網易某系統未授權訪問續—內網滲透

wooyun: 搜弧某分站xff注射&配置不當導致原始碼洩漏等重大漏洞

梧桐雨的大型網際網路系列

指令碼安全就像你家的防盜門,你家門都沒關,你家能安全嗎?

烏雲上最常見的指令碼漏洞莫過於sql注入和xss。

指令碼安全的本質就是指令碼接受了不安全的變數輸入,又沒得到有效的過濾,最後進入一些對敏感的函式就會對安全造成威脅。

比如出現在mysql_query()函式可能就會造成sql注入漏洞,出現在eval()以及preg_replace()中可能導致**的執行。

這裡我用dvwa演示sql,xss ,任意**執行漏洞的原理

然後用各種修復方法進行修復,附帶講解一些修復方法的弊端。

dvwa sql呼叫的檔案/vulnerabilities/sqli/目錄下,分為low,medium,high三個等級

#!php

if(isset($_get['submit']))

?>

複製**

從上面程式可以看出,$message,$name兩個變數從$_post傳入,只是經過一些特殊字元的轉換。並沒有對尖括號進行轉義,所以還是造成了xss的產生。

直接插入xss語句

複製**

#!php

<?php

if(isset($_post['btnsign']))

?>

複製**使用htmlspecialchars()在輸出時對輸出內容就行轉義。

瞌睡龍說:在輸出時進行轉義比輸入時進行轉義效果更好,因為可以確保資料在入庫時是完整的….不然丟失資料。

例:#!php

<?php

if(isset($_post['btnsign']))

?>

複製**

修補後效果,可以看到尖括號已經被轉義了,html**已經不執行

任意命令執行可謂是web裡最高危的漏洞了,有可能可以直接寫下shell或者直接新增使用者。

任意命令執行漏洞的產生大多是因為變數可以被使用者輸入控制,而沒有經過任何的判斷和過濾處理就進入了高危的函式。

#!php

<?php

if( isset( $_post[ 'submit' ] ) ) else

}?>

複製**

由於$target沒有經過處理就進入shell_exec函式,導致黑客可以構造特殊的變數執行批處理命令。

我輸入可 0 | dir

那麼執行的命令的命令就是 ping -c 0 | dir

假如黑客在利用時輸入的是

0|net user hacker/add

複製**

那麼造成的後果將不堪設想

以下是可能會造成任意命令執行的函式

system|passthru|exec|popen|proc_open|move_uploaded_file|eval|copy|shell_exec|assert

複製**

在寫程式時盡量地使變數不能被使用者所控制!且注意變數初始化的問題。

使用str_replace對「%」,」|」,「>」進行替換

進入函式前判斷變數是否合法。

這個是漏洞?算是吧…

祭上神器burp suite,burp suite執行後,burp suite,proxy 開起預設的8080 埠作為本地**介面。

使用burp suite通過置乙個web 瀏覽器使用其**伺服器,見下圖 

然後開啟你要暴力破解的後台,隨便輸入乙個賬號密碼…把抓到的包send to intruder  

start attack~~~

然後就對面返回包的大小,知道密碼

加個google驗證碼,保證沒有程式能識別出來…

檔案包含漏洞分為兩種,一種是遠端包含,一種是本地包含。

伺服器通過php的特性(函式)去包含任意檔案時,由於要包含的這個檔案**過濾不嚴,從而可去呼叫並執行乙個文(木)件(馬),而我們可以構造這個文(木)件(馬)來達到**的目的。

涉及到的危險函式,include(),require()和include_once(),require_once()

現在遠端包含的漏洞已經不多了,但是遠端包含的危害是最大,相當於乙個命令執行。

而本地包含,有時配合一下解析漏洞往往可以getshell.

例:

#!php

<?php

$file = $_get['page']; //the page we wish to display

?>

複製**

include.php內容:

#!php

<?php

echo "hello world\n";

?>

複製**

在編寫程式時,應有良好的**習慣,如使用變數前初始化。

做安全的過濾在全域性裡做,或者寫在類裡。

不要相信資料,所有輸入在得到證明之前都是不可信的,所有從使用者上輸入的資料都應該加以判斷。

不返回過多錯誤的原因,如乙個黑客進行sql注入。

多上wooyun看漏洞

常見漏洞及處理方法

1 sql注入 什麼是sql注入?就是使用者輸入特殊字元改變原有sql的語義,這就叫sql注入。我們看一下例子 首先建立乙個簡單的user表模擬一下sql注入,如圖所示 然後我們模擬一下使用者登入 username post username passwd post passwd sql selec...

PHP常見漏洞(1) SQL注入

sql注入攻擊 sql injection 是攻擊者在表單中提交精心構造的sql語句,改動原來的sql語句,如果web程式沒有對提交的資料經過檢查,那麼就會造成sql注入攻擊。sql注入攻擊的一般步驟 1 攻擊者訪問有sql注入漏洞的站點,尋找注入點 2 攻擊者構造注入語句,注入語句和程式中的sql...

開發專案中學習PHP 函式

1 判斷 物件是否為空empty 2 分割函式 explode delimiter 被分割字串 返回乙個陣列 3 日期函式 date y m d h m s 時間 date y 獲取當前年 date m 月 date d 日 4 字串轉時間 strtotime 時間串 5 中文亂碼處理 mb con...