php代码审计特殊漏洞

叁歲伎倆 2022-09-11 03:20 280阅读 0赞

一.变量覆盖漏洞

常见变量覆盖漏洞问题–>5个

  1. 1.$$
  2. 2.extract()变量覆盖
  3. 3.parse_str()与mb_parse_str()
  4. 原理:这两个函数会将查询到的值覆盖php的变量
  5. <?php
  6. parse_str("a=1");
  7. echo $a."<br/>"; //$a=1
  8. parse_str("b=1&c=2",$myArray);
  9. print_r($myArray); //Array ( [b] => 1 [c] => 2 )
  10. ?>
  11. 4.import_request_variables()函数导致变量覆盖
  12. 原理:这个函数在 register_global = off 时,可以把 GET/POST/Cookie 变量导入全局作用域
  13. 中。
  14. <?php
  15. import_request_variables("g", "get_");
  16. echo $get_id;
  17. ?>
  18. //提交:?id=111
  19. //结构:111
  20. 5.register_globals变量覆盖
  21. 产生原理:
  22. 当这个变量设置为On的时候,传递过来的值(传递方式:getpostcookie)会被直接注册为全局变量而直接使用
  23. 当为OFF的时候,就需要到特定的数组中去得到它。
  24. 设置地方:在php.ini去学习
  25. <?php
  26. //?id=1
  27. echo "Register_globals: ".(int)ini_get("register_globals")."<br/>";
  28. echo '$_GET["id"] :'.$_GET['id']."<br/>";
  29. echo '$id :'.$id;
  30. ?>

二.弱类型

php是弱比较语言导致的
常见的几个问题点

  1. ①== 弱比较(这个不需要类型也相同导致的漏洞)
  2. MD5弱比较
  3. 导致原理:是因为magic hash比较的时候如果遇到了 0e\d+ 这种
  4. 字符串,就会将这种字符串解析为科学计数法,进而认为两个字符串是相同的
  5. "0e132456789"=="0e7124511451155" //true
  6. "0e123456abc"=="0e1dddada" //false
  7. "0e1abc"=="0" //true
  8. ③弱比较函数这些
  9. is_numeric()
  10. in_array() 这个如果拿来做比较的话 会出问题-->导致原因:在比较之前会自动类型转换
  11. <?php
  12. if (in_array($_GET['id'],array(1,2,3,4)))
  13. {
  14. $sql="select * from admin where id ='".$_GET['id']."'";
  15. }
  16. echo $sql;
  17. ?>
  18. //提交:?id=1' union select 1,2,3,4%23
  19. //结果:select * from admin where id ='1' union select 1,2,3,4#'
  20. strcmp()或者switch()
  21. 绕过id[]=

三.字符串offset特性

即php中的字符串可以当作数组来操控导致的

  1. <?php
  2. ini_set("display_errors", "On");
  3. error_reporting(0);
  4. foreach (array('_COOKIE','_POST','_GET') as $_request)
  5. {
  6. foreach ($$_request as $_key=>$_value)
  7. {
  8. $$_key= $_value;
  9. }
  10. }
  11. $userinfo["username"] = $username; //==> $userinfo[0]=a 赋值以后 $userinfo=a33333
  12. $userinfo["password"] = $password; //==> $userinfo[0]=1 赋值以后 $userinfo=133333
  13. $_SESSION["userinfo"] = $userinfo;
  14. var_dump($_SESSION);
  15. echo "<br/>";
  16. $userinfo=$_SESSION["userinfo"]; //输出 array(1) { ["userinfo"]=> string(6) "133333" }
  17. if($userinfo["id"] == 1) {
  18. echo "flag{xxx}";
  19. die();
  20. }
  21. ?>
  22. 解题思路:
  23. 在cookie中添加一个userinfo[id]=1;就可以解决了

发表评论

表情:
评论列表 (有 0 条评论,280人围观)

还没有评论,来说两句吧...

相关阅读

    相关 php代码审计之phpcms

    这个难度比上一个要难一点,起码代码审计工具没有扫描出来特别简单的漏洞。用来是因为我下载的是修复版本的。。。。不过继续审计啊! 1.可能出现目录穿越的地方 出现了正则表达式限定

    相关 php代码审计(2)

    这个语言怎么这么没有节操。。我感觉它是什么框架都有自己的特色,然后特色多起来自成一派加入新版本里去了就。框架还好几个。大杂烩啊。不愧是脚本语言。 今天发现我太蠢了,应该跟着w