ctfshow

发布于:2024-11-28 ⋅ 阅读:(12) ⋅ 点赞:(0)

1,web153

大小写绕过失败

使用.user.ini 来构造后⻔

php.ini是php的⼀个全局配置⽂件,对整个web服务起作⽤;⽽.user.ini和.htaccess⼀样是⽬录的配置⽂件,.user.ini就是⽤户⾃定义的⼀个php.ini,我们可以利⽤这个⽂件来构造后⻔和隐藏后⻔。.htaccess是Apache的,.user.ini是Nginx的

php 配置项中有两个配置可以起到一些作用

auto_prepend_file = <filename>         //包含在文件头
auto_append_file = <filename>          //包含在文件尾

这两个配置项的作用相当于一个文件包含,比如

// .user.ini
auto_prepend_file = 1.jpg
// 1.jpg
<?php phpinfo();?>
// 1.php(任意php文件)

利用.user.ini的前提是服务器开启了CGI或者FastCGI,并且上传文件的存储路径下有index.php可执行文件。

另一条配置包含在文件尾,如果遇到了 exit 语句的话就会失效。

.user.ini使用范围很广,不仅限于 Apache 服务器,同样适用于 Nginx 服务器,只要服务器启用了 fastcgi 模式 (通常非线程安全模式使用的就是 fastcgi 模式)。 局限

在.user.ini中使用这条配置也说了是在同目录下的其他.php 文件中包含配置中所指定的文件,也就是说需要该目录下存在.php 文件,通常在文件上传中,一般是专门有一个目录用来存在图片,可能小概率会存在.php 文件。

user. ini 文件 是PHP的配置文件,用于自定义PHP的配置选项。

在文件上传中,.user.ini和.htaccess作用差不多,都是一种 配置文件 指定对于文件的解析方式。

先上传.user.ini文件里面的auto_prepend_file=要写入恶意代码的文件,然后上传恶意文件,之后访问upload

先上传木马图片,再上传ini文件

先改成png,绕过前端

2,web154

前端校验

无法使用<=eval($_POST[1]);?>,使用<?system("tac ../flag.*");?>

3,web155

和上面的一样使用.user.ini绕过,还是过滤了php

4,web156

有过滤,通过测试发现是[]括号

试了一下编码进行绕过,发现不行

不过可以使用前面的命令执行语句

<?=system("tac ../flag.*");?>

5,web157

还是可以上传ini

做过滤了

试了一下发现是分号

短标签没有;号也可以

6,web158

和上面的一样

7,web159

有过滤找过滤

通过测试发现过滤了()号

使用反引号绕过

在权限足够的情况下,PHP中的反引号可以直接执行系统命令,这被称为内敛执行。

使用反引号会将里面的命令当成系统命令执行

反引号(相当于shell_exec() )

shell_exec() 是 PHP 中的一个函数,它允许你执行外部程序,并且可能返回最后一行的输出。

8,web160

有过滤测试过滤,过滤了空格和反引号,还要括号()

看了一下wp,发现是用php伪协议读取文件

<?=include"ph"."p://filter/convert.base64-encode/resource=../flag.p"."hp"?>

include:这是PHP中的一个函数,用于包含并运行指定文件的内容。如果文件包含成功,其内容将被输出到当前位置。

除了包含文件还可以通过包含日志写入一句话木马找到flag

没成功

9,web161

一开始以为是过滤了ini文件,结果是类型

看了一下wp发现是文件头的校验

.JPEG;.JPE;.JPG,”JPGGraphic File”

.gif,”GIF 89A”

.zip,”Zip Compressed”

.doc;.xls;.xlt;.ppt;.apr,”MS Compound Document v1 or Lotus Approach

之后就好办了,用上一题的文件包含

10,web166

进行上传发现职业zip文件可以上传

在里面写入一句话木马进行上传

点击下载,更改请求,它默认包含了传的zip文件

11,web167

让上传jpg的文件

看一下中间件

通过传入没有后缀的文件,可以看出是黑名单

对类型做判断

看了一下提示,搜索了一下

apche试一下解析漏洞

改一下前端

12,web168

经过测试发现过滤了eval和POST还要get,system也给过滤了

不过我想到了160题的用反引号做出来的

发现不行,看了一下wp,发现要免杀

额发现是名字不对,不过看了一下这个加一些正常特征也可以绕过

看wp还可以REQUEST绕过,没测

13,web169

看一下让上传什么

先随便上传一个看看,把内容全删还是不行,试试改变类型

发现可以了

通过测试发现过滤了php和<>

试了一下发现对文件后缀没做限制,这时候试试前面的ini配置文件绕过,直接包含是不行了,试试日志包含

在ua头里面放入一句话

phpinfo() 可作为瞄点

14,web170

直接抓包开测

类型是image/png

对文件后缀没做限制

试一下上一关的日志包含

成功获取到flag

15,web78

利用php伪协议的data协议和input协议都能解。

传参 file=data://text/plain,<?php system("ls");?>,查看目录,然后传参 file=data://text/plain,<?php system("tac flag.php");?>,拿到flag。

或者传参 file=php://input 同时内容为 ?php system("ls");?>,查看目录

不知道为什么cat用不了,只能yongtac

16,web351

error_reporting(0);

  • 这行代码用于关闭PHP的错误报告。

使用 curl_init() 函数初始化一个新的cURL会话,并传入之前从POST请求中获取的URL。

使用 curl_setopt() 函数设置cURL会话的选项。这里设置的选项是 CURLOPT_HEADER,其值被设置为0,意味着在返回的结果中不包含HTTP头部信息。

再次使用 curl_setopt() 函数设置选项。这次设置的选项是 CURLOPT_RETURNTRANSFER,其值被设置为1,意味着cURL执行结果(即访问指定URL后得到的内容)将作为字符串返回,而不是直接输出。

使用 curl_exec() 函数执行之前初始化的cURL会话。这个函数返回的是访问指定URL后得到的内容(基于之前设置的 CURLOPT_RETURNTRANSFER 选项)

curl_close($ch);

  • 使用 curl_close() 函数关闭cURL会话,释放相关资源。

echo ($result);

  • 输出cURL执行结果,即访问指定URL后得到的内容。

传入127.0.0.1,进行本地访问

17,web352

代码中虽然是有过滤但是去没有用。。

18,web353

使用ip转数字

19,web354

过滤了1和0

方法一:域名指向127

在自己的域名中添加一条A记录指向 127.0.0.1

或者使用 http://sudo.cc这个域名就是指向127.0.0.1

方法二:302跳转

在自己的网站页面添加

<?php
header("Location:http://127.0.0.1/flag.php");

重定向到127

20,web355

要满足(strlen($host)<=5)

本机ip、127.0.0.1和0.0.0.0区别 - 小窝蜗 - 博客园

一个非常特殊的IP:0.0.0.0

这个IP相当于java中的this,代表当前设备的IP。

使用url=http://0/flag.php,读取flag

21,web356

((strlen($host)<=3))

用上面的payload,还是可以的