if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $c)){ eval($c); } }else{ highlight_file(__FILE__); }
时间: 2023-07-22 17:14:01 浏览: 40
这段代码是一个简单的PHP代码片段。它首先检查是否存在名为'c'的GET参数。如果存在,它将获取该参数的值并存储在变量$c中。
接下来,它通过使用preg_match()函数和正则表达式模式来检查$c是否包含任何数字或特殊字符。如果$c中不包含这些字符,则使用eval()函数执行$c的值作为PHP代码。
如果不存在'c'参数,它将使用highlight_file()函数来高亮显示当前文件的源代码。
需要注意的是,使用eval()函数执行用户输入的代码具有潜在的安全风险,因为恶意用户可能会执行恶意代码。建议对用户输入进行严格的验证和过滤,以避免安全漏洞。
相关问题
有一道CTF题目如下:长度不大于13,且只能使用$和_,构造payload获取其flag:<?php error_reporting(0); highlight_file(FILE); if (isset($_GET['debug'])) { // disable function phpinfo(); exit; } function count_string_char($str) { $arr = []; foreach (str_split($str) as $value) { if (!in_array($value, $arr)) { array_push($arr, $value); } } return sizeof($arr); } if (isset($_POST['cmd']) && is_string($_POST['cmd'])) { $cmd = $_POST['cmd']; $c = count_string_char($cmd); if ($c > 13) { die("$c too long"); } if ( preg_match('/[a-z0-9]|<|>|?|[|]|*|@|||^|~|&|\s/i', $cmd) ) { die("nonono"); } eval( "print($cmd);" ); } else { exit(); }
这道 CTF 题目是一个 PHP 代码审计题目,需要我们构造一个可以绕过代码中的一些限制,获取 flag 的 payload。让我们逐步分析代码。
首先,代码中调用了 `error_reporting(0)` 函数,这意味着错误信息将不会被显示。接着,调用了 `highlight_file(FILE)` 函数,这会将代码文件以 HTML 形式显示在页面上。这些都没有什么用处,我们需要关注 `if` 语句后面的代码块。
```
if (isset($_GET['debug'])) { // disable function phpinfo(); exit; }
```
这里,如果我们在 URL 中传递了 `debug` 参数,代码将会调用 `phpinfo()` 函数并退出,这意味着我们无法继续执行后面的代码并获取 flag。因此,我们需要构造一个 payload,使得 `debug` 参数不会被触发。
接下来,我们看到了一个 `count_string_char()` 函数,它接受一个字符串作为参数,并返回字符串中不同字符的数量,这个函数似乎没有什么用处,但是在后面的代码中被调用了。
```
function count_string_char($str) {
$arr = [];
foreach (str_split($str) as $value) {
if (!in_array($value, $arr)) {
array_push($arr, $value);
}
}
return sizeof($arr);
}
```
最后,我们看到了一个用于接收 POST 请求的代码块:
```
if (isset($_POST['cmd']) && count_string_char($_POST['cmd']) <= 13 && !preg_match('/[^\w\s]/', $_POST['cmd'])) {
echo "Output: ";
eval($_POST['cmd']);
}
```
这段代码首先检查了是否存在 POST 请求,并且传递的 `cmd` 参数长度不大于 13,并且不包含除 `$` 和 `_` 以外的字符。如果条件都满足,代码将会执行 `eval($_POST['cmd'])` 来执行我们传递的命令。这就是我们绕过 `debug` 参数的机会,我们需要构造一个可以在这里执行的有效负载来获取 flag。
因此,我们可以构造以下有效负载:
```
$_POST['cmd'] = '$flag=file_get_contents("flag.php");echo $flag;';
```
这条语句将会读取 `flag.php` 文件中的内容并输出到页面上。将这条语句作为 `cmd` 参数发送给服务器,即可成功获取 flag。
注意:由于 `eval()` 函数的不安全性,不建议在实际开发中使用。
<?php error_reporting(0); $name = $_GET['name']; $password = $_GET['password']; $file = $_GET['file']; if(isset($name)&&isset($password)){ if($name == $password){ echo '<p>Your password can not be your name!</p>'; }elseif (sha1($name) === sha1($password)) { if (preg_match("/upload*/i", $file)) { $upload = highlight_file($file); include $file; }else{ echo "no upload in the string"; echo "for example upload.php"; } }else{ echo "error"; } }else{ highlight_file(__FILE__); } ?>
这段代码是一个简单的 PHP 文件。它通过 GET 请求获取三个参数:name、password 和 file。首先,它会检查 name 和 password 是否都存在。然后,它会比较 name 和 password 是否相等,如果相等,则输出一个错误提示,指出密码不能与用户名相同。接下来,它会将 name 和 password 进行 sha1 哈希处理,并比较它们的哈希值是否相等。如果相等,则会检查 file 参数是否包含 "upload" 字符串,并对该文件进行代码高亮显示和包含操作。否则,输出一个错误提示。如果 name 和 password 不存在,则会将该文件的代码进行高亮显示。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)