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