php挖洞基础知识篇以及防范方法

所属分类: 网络安全 / 漏洞分析 阅读数: 129
收藏 0 赞 0 分享
命令注入攻击 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> ”; } ?>
我们提交http:// /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; } -->
当我们提交 http://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函数,那我们提交http://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>
这个例子没有检验文件后缀,可以上传任意文件,很明显的上传漏洞
更多精彩内容其他人还在看

.Net开发人员常犯的6大安全错误

  微软已经为.Net环境添加了大量的功能,帮助开发人员创建安全的应用程序,例如,身份验证已经成为开发环境集成的一个功能,另外,默认情况下调试消息被禁用掉了。微软对安全的关注程度极大地影响了开发人员,促使他们在软件开发过程中重新评估纳入安全保障的重要性。
收藏 0 赞 0 分享

科汛 KesionCMS 文件名解析漏洞

科汛cms,eshop系统建站第一品牌.专业提供开源cms项目定制服务及名片系统,在线输出,在线印刷,广告制作,在线图文下单系统提供商。
收藏 0 赞 0 分享

科讯 kesioncms 5.5以下漏洞拿shell方法原理总结(图文)

科讯做为一个强大的cms程序大多被政府和教育机构网站所使用,关于科讯的漏洞利用教程网上不是很多。由于科讯的后台登陆需要输入认证码,而认证码没有保存在数据库而是保存在asp文件中,所以在某种程度上增大了拿shell 的难度。下面就个版本拿shell 的方法做一总结。
收藏 0 赞 0 分享

DISCUZ X1.5 本地文件包含漏洞说明

DISCUZX1.5 本地文件包含,当然是有条件的,就是使用文件作为缓存。
收藏 0 赞 0 分享

织梦网官方(dedecms)爆路径最新漏洞

  首发:红科网安   作者:Amxking   漏洞程序:dedecms5.5   测试对象:织梦网CMS官方网站   提交时间:2010-03-17   漏洞类型:信息泄露   危险等级:低   漏洞描述:   dedecms 5.5程序泄露网站路径信息。     测试地址:
收藏 0 赞 0 分享

ewebeditor通杀鸡肋0day漏洞

先访问这个地址 Editor/asp/upload.asp?action=save&type=image&style=popup&cusdir=a.asp 访问这个地址可以建立个A.ASP的文件夹…… 再用这个html代码
收藏 0 赞 0 分享

PHP漏洞全解

PHP网页的安全性问题,针对PHP的网站主要存在下面几种攻击方式
收藏 0 赞 0 分享

ecshop爆绝对路径的bug

  ecshop爆绝对路径的bug   网址如下"   http://www.zzfhw.com/ECShop/includes/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/s
收藏 0 赞 0 分享

dedecms织梦 v5.5 两处跨站漏洞

  影响版本:   dedecms织梦5.5   漏洞描述:   demo1:http://www.dedecms.com/plus/search.php?keyword=%22>&searchtype=titlekeyword&channeltype=0&
收藏 0 赞 0 分享

dedecms 5.6的最新注入漏洞

  最新dedecms 5.6的注入代码:   http://www.dedecms.com/plus/rss.php?tid=1&_Cs[][1]=1&_Cs[2%29%29%20AND%20%22%27%22%20AND%20updatexml%281,%28
收藏 0 赞 0 分享
查看更多