【AWD附件】脚本学习 ------ PHP监控流量脚本 +++学习解释

流量

<?php

error_reporting(0);
define('LOG_FILEDIR','./logs');

function waf(){
    
       # it could be useful if you using nginx instead of apache
	if(!function_exists('getallheaders')){
    
    
		function getallheaders(){
    
    
			foreach ($_SERVER as $name => $value){
    
    
				if(substr($name,0,5) == 'HTTP_'){
    
     # 这些替换应该是关于 nginx 弄得。apache中没这些情况
					$headers[str_replace(' ','_',ucwords(strtolower(str_replace('_',' ',substr($name, 5)))))] = $value;
					return $headers;
				}
			}
		}
	}

	$get = $_GET;
	$post = $_POST;
	$cookie = $_COOKIE;
	$header = getallheaders();
	$files = $_FILES;
	$ip = $_SERVER['REMOTE_ADDR'];
	$method = $_SERVER['REQUEST_METHOD'];
	$filepath = $_SERVER['SCRIPT_NAME']; # 上传路径
	foreach ($_FILES as $key => $value){
    
      # 这里还是补明白啊。
		$files[$key]['content'] = file_get_contents($_FILES[$key]['tmp_name']);
		file_put_contents($_FILES[$key]['tmp_name'],"virink");
	}
	unset($header['Accept']); # 这里为什么要 unset 这个啊
	$input = array("GET"=>$get,"Post"=>$post,"Cookie"=>$cookie,"File"=>$files,"Header"=>$header);

	logging($input);
}

function logging($var){
    
    
    $filename = $_SERVER['REMOTE_ADDR']; # 获取ip
    $LOG_FILENAME = LOG_FILEDIR."/".$filename; # 用ip来当作文件名
    $time = date("Y-m-d:i:s");
    file_put_contents($LOG_FILENAME,"\r\n".$time."\r\n".print_r($var,true),FILE_APPEND);
    file_put_contents($LOG_FILENAME,"\r\n".'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'],FILE_APPEND);
    # 后面这两个$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'] 可以用 $_SERVER['REQUEST_URI']来代替吧?
    file_put_contents($LOG_FILENAME,"\r\n***************************************************************",FILE_APPEND);
}

waf();

?>

1.define

在这里插入图片描述

<?php
define("ADAM",'hello adam');
echo ADAM;
echo "\n";
echo constant('ADAM');
echo "\n";
echo constant("ADAM");
?>

这三个都行,都能输出。

2. function_exists

判断某个方法是否存在,解析php函数function_exists (),method_exists()与is_callable()的区别.。

3. getallheaders()

我比较了 getallheaders和 SERVER全局变量之间内容的关系,getallheaders()就比较全

3. waf()中的 foreach

前五位为 HTTP_。说的就应该是这些
在这里插入图片描述https://www.cnblogs.com/panxiongfei/p/3482767.html

4. substr

当只有一个参数的时候,代表从第几位之后输出。

<?php
echo (substr("123456789",5));
# output:789

在这里插入图片描述

示例 #1 使用负数 start

扫描二维码关注公众号,回复: 13126026 查看本文章
<?php
$rest = substr("abcdef", -1);    // 返回 "f"
$rest = substr("abcdef", -2);    // 返回 "ef"
$rest = substr("abcdef", -3, 1); // 返回 "d"
?>

在这里插入图片描述

5.ucwords,变大写而已

6.$_FILES

使用$_FILES获取上传文件信息 (PHP)。里面有个上传文件的功能,可以自己写网站练习PHP的时候用一用

在本地实践一下:
test.php:

传到test1.php中,然后burp抓包,同时test1.php进行 var_dump()
<form enctype="multipart/form-data" action="test1.php" method="post"> 
<input type="hidden" name="MAX_FILE_SIZE" value="1000"> 
<input name="myFile" type="file"> 
<input type="submit" value="上传文件"> 
</form> 

<?php
var_dump($_FILES['myFile']);
?>

test1.php:

<?php
var_dump($_FILES['myFile']);
?>

在这里插入图片描述

这是结果:test1.php页面显示出来的

array(5) {
    
    
  ["name"]=>
  string(6) "aa.php"
  ["type"]=>
  string(24) "application/octet-stream"
  ["tmp_name"]=>
  string(46) "C:\Users\lenovo\AppData\Local\Temp\php637E.tmp"
  ["error"]=>
  int(0)
  ["size"]=>
  int(6)
}

在这里插入图片描述

7.$header[‘Accept’]

在这里插入图片描述
还记得不,有个命令执行的就是利用getallheaders()进行rce的
利用了一些函数,等可以去看看

$header = getallheaders();
var_dump(getallheaders()['Accept']);

返回结果是这个:
在这里插入图片描述
能够接收这些类型,但是 后面的什么意思就不知道了
这个是burp抓到的同一个包。

在这里插入图片描述

8.$_SERVER[‘REMOTE_ADDR’]

这个是不可伪造的,解析url的IP地址,也就是,如果可以伪造的话,也就只能够在路由那里进行伪造了,
有个题目,请看 班长出的内部赛那里

在这里插入图片描述

9.file_put_contents(,第三个参数)

在这里插入图片描述

10.print_r的第二个参数true

<?php
$a = array("asdf"=>"qewr","asqwer"=>"hfg");
$b = print_r($a);
echo "<br>"."above is print_r ,below is b"."<br>";
var_dump($b);
?>

结果如下:
在这里插入图片描述
执行 print_r() 。 然后返回值 为true。赋值给b

然后当 带上 参数 true 的时候

<?php
$a = array("asdf"=>"qewr","asqwer"=>"hfg");
$b = print_r($a,true);
echo "<br>"."above is print_r ,below is b"."<br>";
var_dump($b);
?>

在这里插入图片描述上面空了,也就是说,print_r没有执行,但是返回值不是true了,
但而是 将 输出的值进行了返回

在这里插入图片描述
在这里插入图片描述

11. $_SERVER[‘HTTP_HOST’]

URL中网站的域名或者ip地址

了解这些就够了。

所以,在实际程序中,应尽量使用_SERVER[“HTTP_HOST”] ,比较保险和可靠。

12.$_SERVER[‘PHP_SELF’]

php $_SERVER[‘PHP_SELF’]安全漏洞
在这里插入图片描述

用于替换的这个,可以参考下面这个

13. $_SERVER[‘QUERY_STRING’]

详解 $_SERVER 函数中QUERY_STRING和REQUEST_URI区别

猜你喜欢

转载自blog.csdn.net/Zero_Adam/article/details/114271983
今日推荐