php挖洞基础知识篇以及防备办法快报 - AG环亚娱乐

php挖洞基础知识篇以及防备办法快报

2019-02-14 08:01:37 | 作者: 尔槐 | 标签: 文件,函数,指令 | 浏览: 7590

指令注入进犯 PHP中能够运用下列5个函数来履行外部的应用程序或函数 system、exec、passthru、shell_exec、“(与shell_exec功用相同) 函数原型 string system(string command, int &return_var) command 要履行的指令 return_var 寄存履行指令的履行后的状态值 string exec (string command, array &output, int &return_var) command 要履行的指令 output 获得履行指令输出的每一行字符串 return_var 寄存履行指令后的状态值 void passthru (string command, int &return_var) command 要履行的指令 return_var 寄存履行指令后的状态值 string shell_exec (string command) command 要履行的指令缝隙实例例1: //ex1.php
仿制代码代码如下: <!p $dir = $_GET["dir"]; if (isset($dir)) { echo “ <p>”; system(“ls -al “.$dir); echo “ <pre></pre> ”; } ?> 咱们提交https:// /ex1.php?dir=| cat /etc/passwd 提交今后,指令变成了 system(“ls -al | cat /etc/passwd”); eval注入进犯 eval函数将输入的字符串参数当作PHP程序代码来履行函数原型:
仿制代码代码如下: mixed eval(string code_str) //eval注入一般发生在进犯者能操控输入的字符串的时分 //ex2.php <!p $var = “var”; if (isset($_GET["arg"])) { $arg = $_GET["arg"]; eval(“\$var = $arg;”); echo “\$var =”.$var; } >当咱们提交 https://www.sectop.com/ex2.php?arg=phpinfo();缝隙就发生了动态函数
仿制代码代码如下: <!p func A() { dosomething(); } func B() { dosomething(); } if (isset($_GET["func"])) { $myfunc = $_GET["func"]; echo $myfunc(); } >程序员本意是想动态调用A和B函数,那咱们提交https://www.sectop.com/ex.php?func=phpinfo 缝隙发生防备办法 1、尽量不要履行外部指令 2、运用自定义函数或函数库来代替外部指令的功用 3、运用escapeshellarg函数来处理指令参数 4、运用safe_mode_exec_dir指定可履行文件的途径 esacpeshellarg函数会将任何引起参数或指令完毕的字符转义,单引号“’”,替换成“\’”,双引号“””,替换成“\””,分号“;”替换成“\;” 用safe_mode_exec_dir指定可履行文件的途径,能够把会运用的指令提早放入此途径内 safe_mode = On safe_mode_exec_di r= /usr/local/php/bin/ PHP缝隙全解(五)-SQL注入进犯 // 履行mysql查询句子 $query = “select * from postmessage where id = “.$_GET["id"]; $result = mysql_query($query) or die(“履行ySQL查询句子失利:” . mysql_error()); 参数id传递进来后,和前面的字符串结合的sql句子放入数据库履行 查询提交 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是要查看的字符串那么方才呈现的代码缝隙,咱们能够这样修补 // 履行mysql查询句子 $query = “select * from postmessage where id = “.intval($_GET["id"]); $result = mysql_query($query) or die(“履行ySQL查询句子失利:” . 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 //文件巨细,单位字节 } } 假如上传文件按钮的name特点值为file 那么运用$_FILES[file][name]来获得客户端上传文件称号,不包括途径。运用$_FILES[file][tmp_name]来获得服务端保存上传文件的临时文件途径寄存上传文件的文件夹 PHP不会直接将上传文件放到网站根目录中,而是保存为一个临时文件,称号就是$_FILES[file][tmp_name]的值,开发者有必要把这个临时文件仿制到寄存的网站文件夹中。 $_FILES[file][tmp_name]的值是由PHP设置的,与文件原始称号不一样,开发者有必要运用$_FILES[file][name]来获得上传文件的原始称号。上传文件时的错误信息 $_FILES[file][error]变量用来保存上传文件时的错误信息,它的值如下:文件上传缝隙假如供给给网站访问者上传图片的功用,那有必要当心访问者上传的实践或许不是图片,而是能够指定的PHP程序。假如寄存图片的目录是一个敞开的文件夹,则入侵者就能够长途履行上传的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>这个比如没有查验文件后缀,能够上传恣意文件,很明显的上传缝隙
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表AG环亚娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章