最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php挖洞基礎知識篇以及防范方法

  發(fā)布時間:2012-10-23 09:54:30   作者:佚名   我要評論
下面我們來介紹一下php挖洞的基礎知識
命令注入攻擊 PHP中可以使用下列5個函數來執(zhí)行外部的應用程序或函數 system、exec、passthru、shell_exec、“(與shell_exec功能相同) 函數原型 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
復制代碼
代碼如下:
<!--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函數將輸入的字符串參數當作PHP程序代碼來執(zhí)行函數原型:
復制代碼
代碼如下:
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; } -->
當我們提交 http://www.sectop.com/ex2.php?arg=phpinfo();漏洞就產生了動態(tài)函數
復制代碼
代碼如下:
<!--p func A() { dosomething(); } func B() { dosomething(); } if (isset($_GET["func"])) { $myfunc = $_GET["func"]; echo $myfunc(); } -->
程序員原意是想動態(tài)調用A和B函數,那我們提交http://www.sectop.com/ex.php?func=phpinfo 漏洞產生防范方法 1、盡量不要執(zhí)行外部命令 2、使用自定義函數或函數庫來替代外部命令的功能 3、使用escapeshellarg函數來處理命令參數 4、使用safe_mode_exec_dir指定可執(zhí)行文件的路徑 esacpeshellarg函數會將任何引起參數或命令結束的字符轉義,單引號“’”,替換成“\’”,雙引號“””,替換成“\””,分號“;”替換成“\;” 用safe_mode_exec_dir指定可執(zhí)行文件的路徑,可以把會使用的命令提前放入此路徑內 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()); 參數id傳遞進來后,和前面的字符串結合的sql語句放入數據庫執(zhí)行 查詢提交 and 1=1,語句變成select * from postmessage where id = 71 and 1=1 這語句前值后值都為真,and以后也為真,返回查詢到的數據提交 and 1=2,語句變成select * from postmessage where id = 71 and 1=2 這語句前值為真,后值為假,and以后為假,查詢不到任何數據正常的SQL查詢,經過我們構造的語句之后,形成了SQL注入攻擊。通過這個注入點,我們還可以進一步拿到權限,比如說運用 union讀取管理密碼,讀取數據庫信息,或者用mysql的load_file,into outfile等函數進一步滲透。防范方法整型參數: 運用 intval函數將數據轉換成整數函數原型 int intval(mixed var, int base) var是要轉換成整形的變量 base,可選,是基礎數,默認是10 浮點型參數: 運用 floatval或doubleval函數分別轉換單精度和雙精度浮點型參數函數原型 int floatval(mixed var) var是要轉換的變量 int doubleval(mixed var) var是要轉換的變量字符型參數: 運用 addslashes函數來將單引號“’”轉換成“\’”,雙引號“””轉換成“\””,反斜杠“\”轉換成“\\”,NULL字符加上反斜杠“\” 函數原型 string addslashes (string str) str是要檢查的字符串那么剛才出現的代碼漏洞,我們可以這樣修補 // 執(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,當不為On的時候運用 addslashes轉義特殊字符
復制代碼
代碼如下:
if(get_magic_quotes_gpc()) { $var = $_GET["var"]; } else { $var = addslashes($_GET["var"]); }
再次測試,漏洞已經修補 PHP漏洞全解(九)-文件上傳漏洞一套web應用程序,一般都會提供文件上傳的功能,方便來訪者上傳一些文件。下面是一個簡單的文件上傳表單
復制代碼
代碼如下:
<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指定允許上傳的文件大小,默認是2M $_FILES數組變量 PHP使用變量$_FILES來上傳文件,$_FILES是一個數組。如果上傳test.txt,那么$_FILES數組的內容為:
復制代碼
代碼如下:
$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']來獲得服務端保存上傳文件的臨時文件路徑存放上傳文件的文件夾 PHP不會直接將上傳文件放到網站根目錄中,而是保存為一個臨時文件,名稱就是$_FILES['file']['tmp_name']的值,開發(fā)者必須把這個臨時文件復制到存放的網站文件夾中。 $_FILES['file']['tmp_name']的值是由PHP設置的,與文件原始名稱不一樣,開發(fā)者必須使用$_FILES['file']['name']來取得上傳文件的原始名稱。上傳文件時的錯誤信息 $_FILES['file']['error']變量用來保存上傳文件時的錯誤信息,它的值如下:文件上傳漏洞如果提供給網站訪問者上傳圖片的功能,那必須小心訪問者上傳的實際可能不是圖片,而是可以指定的PHP程序。如果存放圖片的目錄是一個開放的文件夾,則入侵者就可以遠程執(zhí)行上傳的PHP文件來進行攻擊。下面是一個簡單的文件上傳例子:
復制代碼
代碼如下:
<!--p // 設置上傳文件的目錄 $uploaddir = “D:/www/images/”; // 檢查file是否存在 if (isset($_FILES['file1'])) { // 要放在網站目錄中的完整路徑,包含文件名 $uploadfile = $uploaddir . $_FILES['file1']['name']; // 將服務器存放的路徑,移動到真實文件名 move_uploaded_file($_FILES['file1']['tmp_name'], $uploadfile); } -->…… <form name="”form1″"> <input name="”file1″" />
<input value="”上傳文件”" /> <input name="”MAX_FILE_SIZE”" value="”1024″" /> </form>
這個例子沒有檢驗文件后綴,可以上傳任意文件,很明顯的上傳漏洞

相關文章

最新評論

江达县| 八宿县| 比如县| 德格县| 抚远县| 汪清县| 东宁县| 达拉特旗| 凤凰县| 会东县| 沾化县| 淮南市| 图木舒克市| 昌吉市| 成都市| 铁力市| 西安市| 宁津县| 汾阳市| 丰顺县| 卢氏县| 广河县| 常宁市| 香港 | 松阳县| 黑山县| 萨嘎县| 额济纳旗| 应城市| 平山县| 利辛县| 宁明县| 枣强县| 宁波市| 漳州市| 华蓥市| 定日县| 双城市| 集贤县| 北宁市| 屏南县|