php挖洞基礎(chǔ)知識(shí)篇以及防范方法
發(fā)布時(shí)間:2012-10-23 09:54:30 作者:佚名
我要評(píng)論

下面我們來(lái)介紹一下php挖洞的基礎(chǔ)知識(shí)
命令注入攻擊 PHP中可以使用下列5個(gè)函數(shù)來(lái)執(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í)行的命令漏洞實(shí)例例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程序代碼來(lái)執(zhí)行函數(shù)原型:復(fù)制代碼
代碼如下: mixed eval(string code_str) //eval注入一般發(fā)生在攻擊者能控制輸入的字符串的時(shí)候 //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)生了動(dòng)態(tài)函數(shù)復(fù)制代碼
代碼如下: <!--p
func A()
{
dosomething();
}
func B()
{
dosomething();
}
if (isset($_GET["func"]))
{
$myfunc = $_GET["func"];
echo $myfunc();
}
-->
程序員原意是想動(dòng)態(tài)調(diào)用A和B函數(shù),那我們提交http://www.sectop.com/ex.php?func=phpinfo 漏洞產(chǎn)生防范方法 1、盡量不要執(zhí)行外部命令 2、使用自定義函數(shù)或函數(shù)庫(kù)來(lái)替代外部命令的功能 3、使用escapeshellarg函數(shù)來(lái)處理命令參數(shù) 4、使用safe_mode_exec_dir指定可執(zhí)行文件的路徑 esacpeshellarg函數(shù)會(huì)將任何引起參數(shù)或命令結(jié)束的字符轉(zhuǎn)義,單引號(hào)“’”,替換成“\’”,雙引號(hào)“””,替換成“\””,分號(hào)“;”替換成“\;” 用safe_mode_exec_dir指定可執(zhí)行文件的路徑,可以把會(huì)使用的命令提前放入此路徑內(nèi) safe_mode = On safe_mode_exec_di r= /usr/local/php/bin/ PHP漏洞全解(五)-SQL注入攻擊 // 執(zhí)行mysql查詢語(yǔ)句 $query = “select * from postmessage where id = “.$_GET["id"]; $result = mysql_query($query) or die(“執(zhí)行ySQL查詢語(yǔ)句失敗:” . mysql_error()); 參數(shù)id傳遞進(jìn)來(lái)后,和前面的字符串結(jié)合的sql語(yǔ)句放入數(shù)據(jù)庫(kù)執(zhí)行 查詢提交 and 1=1,語(yǔ)句變成select * from postmessage where id = 71 and 1=1 這語(yǔ)句前值后值都為真,and以后也為真,返回查詢到的數(shù)據(jù)提交 and 1=2,語(yǔ)句變成select * from postmessage where id = 71 and 1=2 這語(yǔ)句前值為真,后值為假,and以后為假,查詢不到任何數(shù)據(jù)正常的SQL查詢,經(jīng)過(guò)我們構(gòu)造的語(yǔ)句之后,形成了SQL注入攻擊。通過(guò)這個(gè)注入點(diǎn),我們還可以進(jìn)一步拿到權(quán)限,比如說(shuō)運(yùn)用 union讀取管理密碼,讀取數(shù)據(jù)庫(kù)信息,或者用mysql的load_file,into outfile等函數(shù)進(jìn)一步滲透。防范方法整型參數(shù): 運(yùn)用 intval函數(shù)將數(shù)據(jù)轉(zhuǎn)換成整數(shù)函數(shù)原型 int intval(mixed var, int base) var是要轉(zhuǎn)換成整形的變量 base,可選,是基礎(chǔ)數(shù),默認(rèn)是10 浮點(diǎn)型參數(shù): 運(yùn)用 floatval或doubleval函數(shù)分別轉(zhuǎn)換單精度和雙精度浮點(diǎn)型參數(shù)函數(shù)原型 int floatval(mixed var) var是要轉(zhuǎn)換的變量 int doubleval(mixed var) var是要轉(zhuǎn)換的變量字符型參數(shù): 運(yùn)用 addslashes函數(shù)來(lái)將單引號(hào)“’”轉(zhuǎn)換成“\’”,雙引號(hào)“””轉(zhuǎn)換成“\””,反斜杠“\”轉(zhuǎn)換成“\\”,NULL字符加上反斜杠“\” 函數(shù)原型 string addslashes (string str) str是要檢查的字符串那么剛才出現(xiàn)的代碼漏洞,我們可以這樣修補(bǔ) // 執(zhí)行mysql查詢語(yǔ)句 $query = “select * from postmessage where id = “.intval($_GET["id"]); $result = mysql_query($query) or die(“執(zhí)行ySQL查詢語(yǔ)句失敗:” . mysql_error()); 如果是字符型,先判斷magic_quotes_gpc能無(wú)法 為On,當(dāng)不為On的時(shí)候運(yùn)用 addslashes轉(zhuǎn)義特殊字符復(fù)制代碼
代碼如下: if(get_magic_quotes_gpc()) { $var = $_GET["var"]; } else { $var = addslashes($_GET["var"]); }
再次測(cè)試,漏洞已經(jīng)修補(bǔ) PHP漏洞全解(九)-文件上傳漏洞一套web應(yīng)用程序,一般都會(huì)提供文件上傳的功能,方便來(lái)訪者上傳一些文件。下面是一個(gè)簡(jiǎn)單的文件上傳表單復(fù)制代碼
代碼如下:<form action="”upload.php”" name="”form1″">
<input name="”file1″" />
<input value="”上傳文件”" /> <input name="”MAX_FILE_SIZE”" value="”1024″" /> </form>
php的配置文件php.ini,其中選項(xiàng)upload_max_filesize指定允許上傳的文件大小,默認(rèn)是2M $_FILES數(shù)組變量 PHP使用變量$_FILES來(lái)上傳文件,$_FILES是一個(gè)數(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 //臨時(shí)文件 [error] => 0 //錯(cuò)誤信息 [size] => 536 //文件大小,單位字節(jié) } }
如果上傳文件按鈕的name屬性值為file 那么使用$_FILES['file']['name']來(lái)獲得客戶端上傳文件名稱,不包含路徑。使用$_FILES['file']['tmp_name']來(lái)獲得服務(wù)端保存上傳文件的臨時(shí)文件路徑存放上傳文件的文件夾 PHP不會(huì)直接將上傳文件放到網(wǎng)站根目錄中,而是保存為一個(gè)臨時(shí)文件,名稱就是$_FILES['file']['tmp_name']的值,開(kāi)發(fā)者必須把這個(gè)臨時(shí)文件復(fù)制到存放的網(wǎng)站文件夾中。 $_FILES['file']['tmp_name']的值是由PHP設(shè)置的,與文件原始名稱不一樣,開(kāi)發(fā)者必須使用$_FILES['file']['name']來(lái)取得上傳文件的原始名稱。上傳文件時(shí)的錯(cuò)誤信息 $_FILES['file']['error']變量用來(lái)保存上傳文件時(shí)的錯(cuò)誤信息,它的值如下:文件上傳漏洞如果提供給網(wǎng)站訪問(wèn)者上傳圖片的功能,那必須小心訪問(wèn)者上傳的實(shí)際可能不是圖片,而是可以指定的PHP程序。如果存放圖片的目錄是一個(gè)開(kāi)放的文件夾,則入侵者就可以遠(yuǎn)程執(zhí)行上傳的PHP文件來(lái)進(jìn)行攻擊。下面是一個(gè)簡(jiǎn)單的文件上傳例子:復(fù)制代碼
代碼如下: <!--p
// 設(shè)置上傳文件的目錄
$uploaddir = “D:/www/images/”;
// 檢查file是否存在
if (isset($_FILES['file1']))
{
// 要放在網(wǎng)站目錄中的完整路徑,包含文件名
$uploadfile = $uploaddir . $_FILES['file1']['name'];
// 將服務(wù)器存放的路徑,移動(dòng)到真實(shí)文件名
move_uploaded_file($_FILES['file1']['tmp_name'], $uploadfile);
}
-->……
<form name="”form1″">
<input name="”file1″" />
<input value="”上傳文件”" /> <input name="”MAX_FILE_SIZE”" value="”1024″" /> </form>
這個(gè)例子沒(méi)有檢驗(yàn)文件后綴,可以上傳任意文件,很明顯的上傳漏洞
<input value="”上傳文件”" /> <input name="”MAX_FILE_SIZE”" value="”1024″" /> </form>
相關(guān)文章
2019最新RDP遠(yuǎn)程桌面漏洞官方補(bǔ)丁(針對(duì)win2003、win2008)
Windows系列服務(wù)器于2019年5月15號(hào),被爆出高危漏洞,windows2003、windows2008、windows2008 R2、windows xp系統(tǒng)都會(huì)遭到攻擊,該服務(wù)器漏洞利用方式是通過(guò)遠(yuǎn)程桌面端口332021-07-25寶塔面板 phpmyadmin 未授權(quán)訪問(wèn)漏洞 BUG ip:888/pma的問(wèn)題分析
這篇文章主要介紹了寶塔面板 phpmyadmin 未授權(quán)訪問(wèn)漏洞 BUG ip:888/pma,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-24CPU幽靈和熔斷漏洞是什么?Intel為大家簡(jiǎn)單易懂的科普了一番
不久前讓整全行業(yè)緊張、全球用戶恐慌的Spectre幽靈、Meltdown熔斷兩大漏洞事件剛剛告一段落了,那么這兩個(gè)漏洞到底是什么?可能還有很多人不是很清楚,想了解的朋友跟著小2018-03-21- 2017年5月12日,WannaCry蠕蟲(chóng)通過(guò)MS17-010漏洞在全球范圍大爆發(fā),感染了大量的計(jì)算機(jī),該蠕蟲(chóng)感染計(jì)算機(jī)后會(huì)向計(jì)算機(jī)中植入敲詐者病毒,導(dǎo)致電腦大量文件被加密,本文對(duì)其2017-05-17
- 大部分的用戶可能不要了解文件上傳漏洞,下面小編就為大家具體的講解什么事文件上傳漏洞以及文件上傳漏洞的幾種方式2016-11-02
WEB常見(jiàn)漏洞問(wèn)題危害及修復(fù)建議
漏洞檢測(cè)工具用語(yǔ)有高危漏洞,中危漏洞,低危漏洞以及漏洞的危害介紹,本文介紹的非常詳細(xì),具有參考解決價(jià)值,感興趣的朋友一起看看吧2016-10-11漏洞 自動(dòng)化腳本 論漏洞和自動(dòng)化腳本的區(qū)別
漏洞無(wú)處不在,它是在硬件、軟件、協(xié)議的具體實(shí)現(xiàn)或系統(tǒng)安全策略上存在的缺陷,從而可以使攻擊者能夠在未授權(quán)的情況下訪問(wèn)或破壞系統(tǒng)2016-09-29手把手教你如何構(gòu)造Office漏洞POC(以CVE-2012-0158為例)
近年來(lái)APT追蹤盛行,最常見(jiàn)的就是各種以釣魚(yú)開(kāi)始的攻擊,不僅僅有網(wǎng)站掛馬式釣魚(yú),也有魚(yú)叉式郵件釣魚(yú),下面小編就為大家介紹office漏洞CVE-2012-0158,一起來(lái)看看吧2016-09-28簡(jiǎn)單七步教你如何解決關(guān)鍵SSL安全問(wèn)題和漏洞
SSL(安全套接字層)逐漸被大家所重視,但是最不能忽視的也是SSL得漏洞,隨著SSL技術(shù)的發(fā)展,新的漏洞也就出現(xiàn)了,下面小編就為大家介紹簡(jiǎn)單七步教你如何解決關(guān)鍵SSL安全問(wèn)題2016-09-23Python 爬蟲(chóng)修養(yǎng)-處理動(dòng)態(tài)網(wǎng)頁(yè)
在爬蟲(chóng)開(kāi)發(fā)中,大家可以很輕易地 bypass 所謂的 UA 限制,甚至用 scrapy 框架輕易實(shí)現(xiàn)按照深度進(jìn)行爬行。但是實(shí)際上,這些并不夠。關(guān)于爬蟲(chóng)的基礎(chǔ)知識(shí)比如數(shù)據(jù)處理與數(shù)據(jù)存2016-09-12