目录
- 变量覆盖漏洞
- 绕过过滤空白字符
- 多重加密
- WITH ROLLUP注入
- erge截断
- strcmp比较字符串
- sha()函数比较绕过
php小编新一为您介绍phpbugs代 码审计基础详解。代码审计是指对程序代码的安全性进行评估与检测,以发现潜在的安全问题或漏洞。phpbugs是一套优秀的安全审计工具,具备强大的漏洞扫描和识别能力,可以快速发现代码中的漏洞,从而提高系统的安全性。本文将详细介绍phpbugs的使用方法和相关技巧,帮助读者更好地进行代码审计工作。
变量覆盖漏洞
<?PHP $flag='xxx'; extract($_GET); if(isset($shiyan)) { $content=trim(file_get_contents($flag));//将读取$flag内容并去除左右空白后保存到$content if($shiyan==$content) { echo'ctf{xxx}'; } else { echo'Oh.no'; } } ?>
重要点为$shiyan==$content
只要满足这个条件就可以获取flag。
首先extract()
函数的作用为从数组将变量导入到当前符号表,也就是说我们如果构造
xxx.com/index.<strong class="keylink">php</strong>?$shiyan=1
则会生成一个名字为$shiyan
的变量,值为1。
然后通过isset
函数来判断刚生成的$shiyan
变量是否为null,如果为null就进入判断。
$content
变量则是通过file_get_contents
函数和trim
函数来读取文件,但是此时它所读取的文件$flag
值为xxx,此时这个目录是不存在的,所以它的值为空。
所以我们此时要做的就是将$shiyan
的值变为空即可。
所以构造链接xxx.com/index.php?$shiyan=&flag=1
即可获得ctf{xxx}
php小编新一为您介绍phpbugs代 码审计基础详解。代码审计是指对程序代码的安全性进行评估与检测,以发现潜在的安全问题或漏洞。phpbugs是一套优秀的安全审计工具,具备强大的漏洞扫描和识别能力,可以快速发现代码中的漏洞,从而提高系统的安全性。本文将详细介绍phpbugs的使用方法和相关技巧,帮助读者更好地进行代码审计工作。
绕过过滤空白字符
<?php $info = ""; $req = []; $flag="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; ini_set("display_error", false); //为一个配置选项设置值 error_reporting(0); //关闭所有PHP错误报告 if(!isset($_GET['number'])){ header("hint:26966dc52e85af40f59b4fe73D8c323a.txt"); //Http头显示hint 26966dc52e85af40f59b4fe73d8c323a.txt die("have a fun!!"); //die — 等同于 exit() } foreach([$_GET, $_POST] as $global_var) {//foreach 语法结构提供了遍历数组的简单方式 foreach($global_var as $key => $value) { $value = trim($value);//trim — 去除字符串首尾处的空白字符(或者其他字符) is_string($value) && $req[$key] = addslashes($value); // is_string — 检测变量是否是字符串,addslashes — 使用反斜线引用字符串 } } function is_palindrome_number($number) { $number = strval($number); //strval — 获取变量的字符串值 $i = 0; $j = strlen($number) - 1; //strlen — 获取字符串长度 while($i < $j) { if($number[$i] !== $number[$j]) { return false; } $i++; $j--; } return true; } if(is_numeric($_REQUEST['number'])) //is_numeric — 检测变量是否为数字或数字字符串 { $info="sorry, you cann't input a number!"; } elseif($req['number']!=strval(intval($req['number']))) //intval — 获取变量的整数值 { $info = "number must be equal to it's integer!! "; } else { $value1 = intval($req["number"]); $value2 = intval(strrev($req["number"])); if($value1!=$value2){ $info="no, this is not a palindrome number!"; } else { if(is_palindrome_number($req["number"])){ $info = "nice! {$value1} is a palindrome number!"; } else { $info=$flag; } } } echo $info;
根据代码判断,它需要满足多个条件才可以执行$info=$flag;
之后echo出来的才是flag。
if(is_numeric($_REQUEST['number'])) //is_numeric — 检测变量是否为数字或数字字符串 { $info="sorry, you cann't input a number!"; }
先来看看第一个条件,它要求number参数传入的内容不能为数字,否则返回sorry, you cann't input a number!
但是它的第二个要求为数字必须为整数,否则输出number must be equal to it's integer!!
elseif($req['number']!=strval(intval($req['number']))) //intval — 获取变量的整数值 { $info = "number must be equal to it's integer!! "; }
导致我们输入字符串也会报错
这里我们用到%00来绕过is_numeric
函数的判断。
根据报错,再来看看$value1
,它是$req["number"]
的整数值,$value2
则为反转之后的$req["number"]
的整数值。
$value1 = intval($req["number"]); $value2 = intval(strrev($req["number"])); if($value1!=$value2){ $info="no, this is not a palindrome number!"; }
所以第三步要满足的条件为,它必须为回文数即从左往右和从右往左读取都要相同的数值,所以我们构造如下
以上就是phpbugs代码审计基础详解的详细内容,更多请关注php中文网其它相关文章!
-
2024-04-03 14:15:01
-
2024-04-03 14:12:02
-
2024-04-03 14:10:30
-
2024-04-03 14:10:19
-
2024-04-03 14:10:13
-
2024-04-03 14:09:01
-
2024-04-03 14:04:02
-
2024-04-03 14:02:02
-
2024-04-03 13:58:22
-
2024-04-03 13:58:04
-
jquery 基础视频教程90560次学习
-
最新ThinkPHP 5.1全球首发视频教程(60天成就PHP大牛线上培训班课)1373141次学习 -
独孤九贱(4)_PHP视频教程1188821次学习 -
PHP实战天龙八部之仿爱奇艺电影网站736965次学习 -
PHP入门视频教程之一周学会PHP1439983次学习 -
ThinkPHP5实战之[教学管理系统]696170次学习
-
-
微信小程序开发之API篇1455次学习 -
Webpack4.x—十天技能课堂1978次学习 -
Bootstrap4.x—十天精品课堂2293次学习 -
ECMAScript6 / ES6—十天技能课堂2502次学习