Jak se připojit na existující shell?

Jak se připojit na existující shell?
« kdy: 10. 10. 2024, 00:16:10 »
Potřebuju vydolovat data z interaktivního bash shellu spuštěného vzdáleně přes ssh.  Historii a zadefinovanou promennou.  Napadly mě 2 způsoby, zkopírovat datovou strukturu historie přes gdb, ale to se mi nadařilo ,druhý způsob napojit se na stávající PID a "unést-přivlastnit" stdin a stdout. to jsem zkoušel ale nešlo mi to
(chci tam spustit příkaz - defacto vypsat proměnnou) Ještě visí bash v paměti PC, dostanu se k němu.

lrwx------ 1 64 říj  9 22:39 0 -> /dev/pts/4
lrwx------ 1 64 říj  9 23:26 1 -> /dev/pts/4
lrwx------ 1 64 říj  9 23:26 2 -> /dev/pts/4
lrwx------ 1 64 říj  9 23:26 255 -> /dev/pts/4


gdb descriptory: (jde o výplod ai, zkoušel jsem víc verzí,  s call (int)dup2 třeba, )
# Assume you want to redirect stdout to "output.txt" and stdin from "input.txt"

# Open the output file
call open("output.txt", 0x601, 0644)  # O_WRONLY | O_CREAT | O_TRUNC
set $fd_out = $rax  # Store the file descriptor returned by open

# Open the input file
call open("input.txt", 0x0, 0)  # O_RDONLY
set $fd_in = $rax  # Store the file descriptor returned by open

# Redirect stdout
call dup2($fd_out, 1)  # Redirect stdout (fd 1) to output.txt

# Redirect stdin
call dup2($fd_in, 0)  # Redirect stdin (fd 0) to input.txt

# Close the file descriptors if needed
call close($fd_out)
call close($fd_in)

Zkoušel jsem cd /proc/ID/fd. Zápis jde, ale čtení nic nevypisuje. (zkoušel jsem přímo i /dev/pts/4) 

balík bash-dbgsym nemám dostupný přes apt.
Snažil jsem se i přes gdb -p
print history_info_  ... No symbols table loaded
 info proc mappings ; find (stack a heap) ... find 0x... , 0x... , "retezec" - nenašlo


Jde to nějak? Nemá třeba ten bash ty deskriptory třeba už uzavřené, když visí v paměti dlouho? Proč nejde čtení (a asi ani zápis) z /proc/pid/fd/N ?


alex6bbc

  • *****
  • 1 666
    • Zobrazit profil
    • E-mail
Re:gdb: Jak se připojit na (stdin,stdout)existující interactive shell?
« Odpověď #1 kdy: 10. 10. 2024, 04:07:48 »
neuklada bash prikazy do .bash-history, ze by se tam nasly?

pamet procesu je dostupna nekde v procfs nebo sysfs, ale bude to prohrabovani binarniho smeti. debugger nepomuze, kdyz bash nebyl zkompilovan s debug symboly.

/proc/<pid>/mem

ve vzdalenem bash vzdycky poustim tmux at to mam kdykoliv pristupne po navratu.
« Poslední změna: 10. 10. 2024, 04:10:43 od alex6bbc »

tecka

  • ***
  • 158
    • Zobrazit profil
    • E-mail
Re:gdb: Jak se připojit na (stdin,stdout)existující interactive shell?
« Odpověď #2 kdy: 10. 10. 2024, 04:37:38 »
reptyr nebo retty umí "ukrást" stdio jiného procesu.

k3dAR

  • *****
  • 3 034
  • porad nemam telo, ale uz mam hlavu... nobody
    • Zobrazit profil
    • E-mail
Re:Jak se připojit na existující shell?
« Odpověď #3 kdy: 10. 10. 2024, 18:32:07 »
Vlezes tam pres VNC a priste si uz snad budes pamatovat ze to mas poustet pod screen/tmux/byobu ;⁠-⁠)