CTF bugku web

Posted on 2020-09-10 22:45  卢比扬卡前进观察员  阅读(240)  评论(0)    收藏  举报

1、文件包含漏洞:

include()函数和php://filter可以用与读取文件源代码:
?hello=get_file_contents('flag.php')
?hello=file('flag.php')    ##file() 函数把整个文件读入一个数组中,并将文件作为一个数组返回

 <?php
    include "flag.php";
    $a = @$_REQUEST['hello'];
    eval( "var_dump($a);");
    show_source(__FILE__);
?> 

<?php
include "flag.php"; ——include()函数和php://input,php://filter结合很好用,php://filter可以用与读取文件源代码,结果是源代码base64编码后的结果
$a = @$_REQUEST['hello']; ——@$_REQUEST 的意思是获得参数,能得到@$_GET与@$_POST的参数。所以构造hello的get参数
eval( "var_dump($a);"); ——eval() 函数会把字符串参数当做代码来执行、var_dump() 函数可以输出任何内容:输出变量的容,类型或字符串的内容,类型,长度
show_source(__FILE__);
?>

print_r() 函数只用于输出数组。
hello=file(“flag.php”),最终会得到var_dump(file(“flag.php”)),以数组形式输出文件内容。

3、全局变量
preg_match("/^\w+$/",$args)
^xxx以什么开头 \w表示字母 xxx$表示以什么结尾 表示agrs是:以一个或多个字母开头和结尾
eval("var_dump($$args);"); //可以看到eval的参数字符串最后已经加上了分号 $$容易引起变量覆盖,$GLOBALS 引用全局作用域中可用的全部变量

/index1.php?args=GLOBALS   ##$args 之后解析 $GLOBALS直接到了flag1.php中的全局变量

flag In the variable ! <?php  

error_reporting(0);
include "flag1.php";
highlight_file(__file__);
if(isset($_GET['args'])){
    $args = $_GET['args'];
    if(!preg_match("/^w+$/",$args)){
        die("args error!");
    }
    eval("var_dump($$args);");
}
?> 

flag In the variable ! <?php

error_reporting(0);
include "flag1.php";
highlight_file(__file__); ——__FILE__ : highlight_file() 函数对文件进行 PHP 语法高亮显示highlight_file(filename,return) //规定要显示的文件, //return,为TRUE,该函数将以字符串形式返回高亮显示的代码;默认FALSE当前内容写在哪个文件就显示这个文件目录+文件名 绝对路径
if(isset($_GET['args'])){
$args = $_GET['args'];
if(!preg_match("/^w+$/",$args)){ ——正则表达式匹配: int preg_match( string pattern, string subject [, array matches ] )//正则表达式,需要匹配检索的对象,$matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推preg_match() 第一次匹配成功后就会停止匹配,如果要实现全部结果的匹配,即搜索到subject结尾处,则需使用 preg_match_all() 函数。
die("args error!"); ——die() 函数输出一条消息,并退出当前脚本
}
eval("var_dump($$args);"); ——eval() 函数把字符串按照 PHP 代码来计算,该字符串必须是合法的 PHP 代码,且必须以分号结尾。如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false。
}
?>

getcwd() :显示是 在哪个文件里调用此文件 的目录 绝对路径
__DIR__ :当前内容写在哪个文件就显示这个文件目录 绝对路径

error_reporting() 设置 PHP 的报错级别并返回当前级别
error_reporting(0); //禁用错误报告
error_reporting(E_ERROR | E_WARNING | E_PARSE); //报告运行时错误
error_reporting(E_ALL); //报告所有错误