type
status
date
slug
summary
tags
category
icon
password
看看经历了2个月的渗透经历和src挖掘思路,现在做ctf有没有什么长进。
ACTF2020 新生赛]Include

这题就是文件包含内容,就是文件包含的参数去尝试
fuzz,最后得出
接着base64解码就行

[HCTF 2018]WarmUp

抓包明显看见回显了个source.php文件,拼接上source.php可以得到
用户通过file参数,加载某个PHP文件(通过 include $_REQUEST['file']),但这个文件名必须通过类 emmm::checkFile 的白名单校验
尝试读取
hint.php
告诉我们flag不在flag中,而是在
ffffllllaaaagggg ,开始还以为它是来提示我flag位于根目录下😂
接下来试了挺多种方法的没辙了,最后看了大佬的wp才发现
这个是要在source.php下进行传参操作的(认真看一下source.php应该是知道的,我还在愚蠢的研究着怎么让它即能在
?前获取hint,又能成功获取flag,怎么试都没成功)Payload:source.php?file=hint.php?/../../../../ffffllllaaaagggg
分析一下:
- 传入hint.php后,会进行检测变量是否为空或者变量不是字符串,但凡符合一个,就不通过。
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];这里代表的是一个关联数组(键值对形式)
键(key) | 值(value) |
source | source.php |
hint | hint.php |
in_array是只检查值的,所以接下来判断变量是否在这个两个值当中,显然也是存在的- 接着判断
mb_strpos函数,mb_strpos($page . '?', '?')先把$page拼接上?,防止我们传进的参数是没有?的,导致flase。如果我们有传进?,则会返回第一个?在拼接字符串中的位置(从0开始计数)实例中?在第8个。
- 所以
mb_substr函数,则是按照字符数,从$page的第0个位置开始,截取到上面mb_strpos找到的位置(也就是8)刚好是hint.php,所以跳过
- 接着检查值,然后url解码,再检查一遍。
[ACTF2020 新生赛]Exec
|直接执行后面的语句||如果前面命令是错的那么就执行后面的语句,否则只执行前面的语句&前面和后面命令都要执行,无论前面真假&&如果前面为假,后面的命令也不执行,如果前面为真则执行;前面和后面命令都要执行,无论前面真假
几个常见的操作符先试了遍:
|、||、&、&&、; 发现:|和; 没有被过滤可以正常使用
一般CTF的题目flag都是在根目录下
构造
payload:127.0.0.1;cd ../../../../;ls
payload:127.0.0.1;cd ../../../../;cat flag
[GXYCTF2019]Ping Ping Ping
老样子,进行常规操作符进行试验:

可以查到这两个文件
接着查看flag.php提示错误

回显的意思是去你的空间 应该是过滤了空格,采取
{IFS}方式代替
回显去你的符号 也过滤了
{} 括号这些,用$IFS$1替换
过滤了
flag字符先进行index.php看看能不能获取

正常获取
接着根据获取的过滤条件进行反向思考哪些没被过滤
所有控制字符:\x00-\x1f(含%0a、\t等)所有括号(圆括号、花括号、中括号)/、\、?、&、、<、>、'、"、*空格字符串中不能含f、l、a、g(不区分顺序,任意顺序都ban)
尝试用变量进行替代
Payload:?ip=127.0.0.1;d=l;c=ag;cat$IFS$1f$d$c.php 
成功获取
除了cat,还有
1. tac
tac 命令是 cat 命令的反向,它将会逆序输出文件内容,即从最后一行开始逐行输出。
tac filename
2. more
more 命令用于显示文件内容,并按页进行分割。它允许用户逐页显示文本文件,并提供一些浏览文件的功能,比如向下翻页、向上翻页、搜索等。
more filename
3. less
less 命令也用于分页显示文件内容,类似于 more 命令,但它提供了更多的功能,比如前后搜索、移动光标等。
less filename
4. head
head 命令用于显示文件的前几行,默认情况下是显示文件的前10行。可以使用 -n 参数来指定显示的行数。
head -n 5 filename
5. tail
tail 命令用于显示文件的后几行,默认情况下是显示文件的后10行。可以使用 -n 参数来指定显示的行数。
tail -n 5 filename
6. nl
nl 命令用于给文件的行加上行号。可以使用 -n 参数来指定行号的样式,以及 -w 参数来指定行号的宽度。
nl filename
总结归纳
泪目了,忙活了一个早上,才解出这么几道,还有两道后续没看懂,还是参考了博主的wp才解出来的
📎 参考文章
- 作者:zhiles小屋
- 链接:https://tangly1024.com/article/21a22e55-9ee8-8054-a8a3-df3b6b632712
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
