php挖洞基礎(chǔ)知識篇以及防范方法
發(fā)布時間:2012-10-23 09:54:30 作者:佚名
我要評論
下面我們來介紹一下php挖洞的基礎(chǔ)知識
命令注入攻擊 PHP中可以使用下列5個函數(shù)來執(zhí)行外部的應(yīng)用程序或函數(shù) system、exec、passthru、shell_exec、“(與shell_exec功能相同) 函數(shù)原型 string system(string command, int &return_var) command 要執(zhí)行的命令 return_var 存放執(zhí)行命令的執(zhí)行后的狀態(tài)值 string exec (string command, array &output, int &return_var) command 要執(zhí)行的命令 output 獲得執(zhí)行命令輸出的每一行字符串 return_var 存放執(zhí)行命令后的狀態(tài)值 void passthru (string command, int &return_var) command 要執(zhí)行的命令 return_var 存放執(zhí)行命令后的狀態(tài)值 string shell_exec (string command) command 要執(zhí)行的命令漏洞實例例1: //ex1.php
復(fù)制代碼
代碼如下: <!--p
$dir = $_GET["dir"];
if (isset($dir))
{
echo “
<p-->”; system(“ls -al “.$dir); echo “
<pre></pre>
”; } ?>
我們提交http:// /ex1.php?dir=| cat /etc/passwd 提交以后,命令變成了 system(“ls -al | cat /etc/passwd”); eval注入攻擊 eval函數(shù)將輸入的字符串參數(shù)當(dāng)作PHP程序代碼來執(zhí)行函數(shù)原型:復(fù)制代碼
代碼如下: mixed eval(string code_str) //eval注入一般發(fā)生在攻擊者能控制輸入的字符串的時候 //ex2.php <!--p
$var = “var”;
if (isset($_GET["arg"]))
{
$arg = $_GET["arg"];
eval(“\$var = $arg;”);
echo “\$var =”.$var;
}
-->
當(dāng)我們提交 http://www.sectop.com/ex2.php?arg=phpinfo();漏洞就產(chǎn)生了動態(tài)函數(shù)復(fù)制代碼
代碼如下: <!--p
func A()
{
dosomething();
}
func B()
{
dosomething();
}
if (isset($_GET["func"]))
{
$myfunc = $_GET["func"];
echo $myfunc();
}
-->
程序員原意是想動態(tài)調(diào)用A和B函數(shù),那我們提交http://www.sectop.com/ex.php?func=phpinfo 漏洞產(chǎn)生防范方法 1、盡量不要執(zhí)行外部命令 2、使用自定義函數(shù)或函數(shù)庫來替代外部命令的功能 3、使用escapeshellarg函數(shù)來處理命令參數(shù) 4、使用safe_mode_exec_dir指定可執(zhí)行文件的路徑 esacpeshellarg函數(shù)會將任何引起參數(shù)或命令結(jié)束的字符轉(zhuǎn)義,單引號“’”,替換成“\’”,雙引號“””,替換成“\””,分號“;”替換成“\;” 用safe_mode_exec_dir指定可執(zhí)行文件的路徑,可以把會使用的命令提前放入此路徑內(nèi) safe_mode = On safe_mode_exec_di r= /usr/local/php/bin/ PHP漏洞全解(五)-SQL注入攻擊 // 執(zhí)行mysql查詢語句 $query = “select * from postmessage where id = “.$_GET["id"]; $result = mysql_query($query) or die(“執(zhí)行ySQL查詢語句失?。?rdquo; . mysql_error()); 參數(shù)id傳遞進來后,和前面的字符串結(jié)合的sql語句放入數(shù)據(jù)庫執(zhí)行 查詢提交 and 1=1,語句變成select * from postmessage where id = 71 and 1=1 這語句前值后值都為真,and以后也為真,返回查詢到的數(shù)據(jù)提交 and 1=2,語句變成select * from postmessage where id = 71 and 1=2 這語句前值為真,后值為假,and以后為假,查詢不到任何數(shù)據(jù)正常的SQL查詢,經(jīng)過我們構(gòu)造的語句之后,形成了SQL注入攻擊。通過這個注入點,我們還可以進一步拿到權(quán)限,比如說運用 union讀取管理密碼,讀取數(shù)據(jù)庫信息,或者用mysql的load_file,into outfile等函數(shù)進一步滲透。防范方法整型參數(shù): 運用 intval函數(shù)將數(shù)據(jù)轉(zhuǎn)換成整數(shù)函數(shù)原型 int intval(mixed var, int base) var是要轉(zhuǎn)換成整形的變量 base,可選,是基礎(chǔ)數(shù),默認(rèn)是10 浮點型參數(shù): 運用 floatval或doubleval函數(shù)分別轉(zhuǎn)換單精度和雙精度浮點型參數(shù)函數(shù)原型 int floatval(mixed var) var是要轉(zhuǎn)換的變量 int doubleval(mixed var) var是要轉(zhuǎn)換的變量字符型參數(shù): 運用 addslashes函數(shù)來將單引號“’”轉(zhuǎn)換成“\’”,雙引號“””轉(zhuǎn)換成“\””,反斜杠“\”轉(zhuǎn)換成“\\”,NULL字符加上反斜杠“\” 函數(shù)原型 string addslashes (string str) str是要檢查的字符串那么剛才出現(xiàn)的代碼漏洞,我們可以這樣修補 // 執(zhí)行mysql查詢語句 $query = “select * from postmessage where id = “.intval($_GET["id"]); $result = mysql_query($query) or die(“執(zhí)行ySQL查詢語句失?。?rdquo; . mysql_error()); 如果是字符型,先判斷magic_quotes_gpc能無法 為On,當(dāng)不為On的時候運用 addslashes轉(zhuǎn)義特殊字符復(fù)制代碼
代碼如下: if(get_magic_quotes_gpc()) { $var = $_GET["var"]; } else { $var = addslashes($_GET["var"]); }
再次測試,漏洞已經(jīng)修補 PHP漏洞全解(九)-文件上傳漏洞一套web應(yīng)用程序,一般都會提供文件上傳的功能,方便來訪者上傳一些文件。下面是一個簡單的文件上傳表單復(fù)制代碼
代碼如下:<form action="”upload.php”" name="”form1″">
<input name="”file1″" />
<input value="”上傳文件”" /> <input name="”MAX_FILE_SIZE”" value="”1024″" /> </form>
php的配置文件php.ini,其中選項upload_max_filesize指定允許上傳的文件大小,默認(rèn)是2M $_FILES數(shù)組變量 PHP使用變量$_FILES來上傳文件,$_FILES是一個數(shù)組。如果上傳test.txt,那么$_FILES數(shù)組的內(nèi)容為:<input value="”上傳文件”" /> <input name="”MAX_FILE_SIZE”" value="”1024″" /> </form>
復(fù)制代碼
代碼如下: $FILES Array { [file] => Array { [name] => test.txt //文件名稱 [type] => text/plain //MIME類型 [tmp_name] => /tmp/php5D.tmp //臨時文件 [error] => 0 //錯誤信息 [size] => 536 //文件大小,單位字節(jié) } }
如果上傳文件按鈕的name屬性值為file 那么使用$_FILES['file']['name']來獲得客戶端上傳文件名稱,不包含路徑。使用$_FILES['file']['tmp_name']來獲得服務(wù)端保存上傳文件的臨時文件路徑存放上傳文件的文件夾 PHP不會直接將上傳文件放到網(wǎng)站根目錄中,而是保存為一個臨時文件,名稱就是$_FILES['file']['tmp_name']的值,開發(fā)者必須把這個臨時文件復(fù)制到存放的網(wǎng)站文件夾中。 $_FILES['file']['tmp_name']的值是由PHP設(shè)置的,與文件原始名稱不一樣,開發(fā)者必須使用$_FILES['file']['name']來取得上傳文件的原始名稱。上傳文件時的錯誤信息 $_FILES['file']['error']變量用來保存上傳文件時的錯誤信息,它的值如下:文件上傳漏洞如果提供給網(wǎng)站訪問者上傳圖片的功能,那必須小心訪問者上傳的實際可能不是圖片,而是可以指定的PHP程序。如果存放圖片的目錄是一個開放的文件夾,則入侵者就可以遠(yuǎn)程執(zhí)行上傳的PHP文件來進行攻擊。下面是一個簡單的文件上傳例子:復(fù)制代碼
代碼如下: <!--p
// 設(shè)置上傳文件的目錄
$uploaddir = “D:/www/images/”;
// 檢查file是否存在
if (isset($_FILES['file1']))
{
// 要放在網(wǎng)站目錄中的完整路徑,包含文件名
$uploadfile = $uploaddir . $_FILES['file1']['name'];
// 將服務(wù)器存放的路徑,移動到真實文件名
move_uploaded_file($_FILES['file1']['tmp_name'], $uploadfile);
}
-->……
<form name="”form1″">
<input name="”file1″" />
<input value="”上傳文件”" /> <input name="”MAX_FILE_SIZE”" value="”1024″" /> </form>
這個例子沒有檢驗文件后綴,可以上傳任意文件,很明顯的上傳漏洞
<input value="”上傳文件”" /> <input name="”MAX_FILE_SIZE”" value="”1024″" /> </form>
相關(guān)文章

2019最新RDP遠(yuǎn)程桌面漏洞官方補丁(針對win2003、win2008)
Windows系列服務(wù)器于2019年5月15號,被爆出高危漏洞,windows2003、windows2008、windows2008 R2、windows xp系統(tǒng)都會遭到攻擊,該服務(wù)器漏洞利用方式是通過遠(yuǎn)程桌面端口332021-07-25
寶塔面板 phpmyadmin 未授權(quán)訪問漏洞 BUG ip:888/pma的問題分析
這篇文章主要介紹了寶塔面板 phpmyadmin 未授權(quán)訪問漏洞 BUG ip:888/pma,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-24
CPU幽靈和熔斷漏洞是什么?Intel為大家簡單易懂的科普了一番
不久前讓整全行業(yè)緊張、全球用戶恐慌的Spectre幽靈、Meltdown熔斷兩大漏洞事件剛剛告一段落了,那么這兩個漏洞到底是什么?可能還有很多人不是很清楚,想了解的朋友跟著小2018-03-21
2017年5月12日,WannaCry蠕蟲通過MS17-010漏洞在全球范圍大爆發(fā),感染了大量的計算機,該蠕蟲感染計算機后會向計算機中植入敲詐者病毒,導(dǎo)致電腦大量文件被加密,本文對其2017-05-17- 大部分的用戶可能不要了解文件上傳漏洞,下面小編就為大家具體的講解什么事文件上傳漏洞以及文件上傳漏洞的幾種方式2016-11-02
- 漏洞檢測工具用語有高危漏洞,中危漏洞,低危漏洞以及漏洞的危害介紹,本文介紹的非常詳細(xì),具有參考解決價值,感興趣的朋友一起看看吧2016-10-11
- 漏洞無處不在,它是在硬件、軟件、協(xié)議的具體實現(xiàn)或系統(tǒng)安全策略上存在的缺陷,從而可以使攻擊者能夠在未授權(quán)的情況下訪問或破壞系統(tǒng)2016-09-29
手把手教你如何構(gòu)造Office漏洞POC(以CVE-2012-0158為例)
近年來APT追蹤盛行,最常見的就是各種以釣魚開始的攻擊,不僅僅有網(wǎng)站掛馬式釣魚,也有魚叉式郵件釣魚,下面小編就為大家介紹office漏洞CVE-2012-0158,一起來看看吧2016-09-28- SSL(安全套接字層)逐漸被大家所重視,但是最不能忽視的也是SSL得漏洞,隨著SSL技術(shù)的發(fā)展,新的漏洞也就出現(xiàn)了,下面小編就為大家介紹簡單七步教你如何解決關(guān)鍵SSL安全問題2016-09-23
Python 爬蟲修養(yǎng)-處理動態(tài)網(wǎng)頁
在爬蟲開發(fā)中,大家可以很輕易地 bypass 所謂的 UA 限制,甚至用 scrapy 框架輕易實現(xiàn)按照深度進行爬行。但是實際上,這些并不夠。關(guān)于爬蟲的基礎(chǔ)知識比如數(shù)據(jù)處理與數(shù)據(jù)存2016-09-12





