欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)容為:
復(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)文件后綴,可以上傳任意文件,很明顯的上傳漏洞

相關(guān)文章

最新評(píng)論