Vraag Inloggen zonder bash_profile of bashrc uit te voeren


Dus laten we zeggen dat iemand iets typeerde in zijn .bashrc die voorkomt dat hij of zij via inlogt ssh (dat wil zeggen dat de ssh-login wordt afgesloten vanwege de fout in het bestand). Is er een manier waarop die persoon kan inloggen zonder het uit te voeren (of .bashrc aangezien de een de andere uitvoert), of anders het bestand verwijderen / hernoemen / ongeldig maken?

Stel dat u geen fysieke toegang tot de machine hebt en dit is de enige gebruikersaccount met de mogelijkheid om te ssh in.

Als referentie: .bash_profile omvat .bashrc:

[[ -f ~/.bashrc ]] && . ~/.bashrc

Bewerken: dingen die ik heb geprobeerd:

ssh user@host "rm ~/.bashrc"

scp nothing user@host:/RAID/home/tom/.bashrc

ssh user@host  "/bin/bash --norc"

Allen geven de fout:

/RAID/home/tom/.bashrc: line 16: /usr/local/bin/file: No such file or directory
/RAID/home/tom/.bashrc: line 16: exec: /usr/local/bin/file: cannot execute: No such file or directory

66
2017-12-15 12:03


oorsprong


Je scp-opdracht zal niet werken omdat scp ook .bashrc zal lezen tijdens het verbinden. Om het probleem te vermijden In de toekomst kunt u iets toevoegen als: [ -z "$PS1" ] && return aan het begin van ./bashrc. Op deze manier stopt scp met het parseren van .bashrc na de eerste regel en kunt u het in geval van nood overschrijven. - dalloliogm


antwoorden:


Ik denk dat je enige opties zijn:

  • ssh in als een andere gebruiker en su naar je account;

  • gebruik zoiets als ftp of smbclient, als de relevante services op de host zijn ingeschakeld;

  • vind een open kwetsbaarheid in een open netwerkdienst en exploiteer het :).

  • krijg een admin om het probleem op te lossen.


18
2017-12-15 14:32



"Stel dat u geen fysieke toegang tot de machine hebt en dit is de enige gebruikersaccount met de mogelijkheid om SSH in te voeren." - Dennis Williamson
Ik ga deze route af. Ik zal de oplossing publiceren nadat ik hem heb gevonden. Gelukkig heb ik een paar aanvalswegen. - Tom Ritter
gebruikte Filezilla naar SFTP op mijn server en het loste me op. Heel erg bedankt, je hebt me gered. Ik had per ongeluk een "exit 1" -voorwaarde in mijn .bash_profile en het spoot me af. - djangofan


ssh -t username@hostname /bin/sh werkt voor mij.


96
2017-11-12 14:22



Dit werkt goed - eenvoudig en biedt een shell die u kunt gebruiken om het probleem op te lossen. - MT.
Je hebt zojuist mijn leven gered. Bedankt. - Leo
Dit proberen te doen met de Secure Shell-app in Google Chrome (chrome.google.com/webstore/detail/secure-shell/...) maar kan niet achterhalen hoe / waar de opdrachtregelargumenten moeten worden geplaatst. Enige tips? - Benj
Dit werkt niet voor mij (hoewel het volgens de man-pagina zou moeten). De lokale host voert ubuntu 14.04.1 uit en het is ubuntu 12.04.5 op de externe host. Ik kan niet rsynchroniseren omdat mijn inlogshell tcsh is en op de externe host rommel afdrukt (tcsh: geen bestand of map tcsh: proberen te starten met "/ u / heffing" - er is mij verteld dat dit komt omdat map is NSF gemount). Ik dacht dat ik het probleem zou oplossen door de login-shell te omzeilen, maar dat werkt niet. - Silvio Levy
Als je standaard shell csh / tcsh is, zal het dat doen altijd bron je .cshrc/.tcshrc zelfs voor niet-interactieve shells. - Brian Vandenberg


Ik heb hetzelfde probleem gehad en het op de een of andere manier opgelost. Ik heb ssh gebruikt om toegang te krijgen tot het systeem en Ctrl + c ingedrukt gehouden zodra ik me bij het systeem heb aangemeld. Dan werd ~ / .bashrc niet gelezen en kon ik het aanpassen.


27
2018-02-18 22:12



Ik was sceptisch, maar dit werkt eigenlijk ... - rmobis
Dit is geniaal! - user1747134
Werkt echt ... bedankt! De andere methoden werkten nooit voor mij. - Zzzach...
op mac met alleen een .bash_profiel, dit werkte voor mij :) - AnneTheAgile
OMG, ik dacht dat ik het hele internet had doorzocht, en ik besloot dit te proberen, en dit is de enige manier die voor mij werkt! Bedankt! - Jiahao


Ik heb een gepubliceerde CVE gebruikt om een ​​opdracht als root uit te voeren via een webinterface in een netwerkbewakingssoftware die ik had geïnstalleerd. rm /RAID/home/tom/.bashrc 

Vervolgens kan ik inloggen en de wijzigingen die ik heb aangebracht ongedaan maken.


20
2017-12-19 17:54



Dat is tegelijkertijd geweldig en feilloos. - MikeyB
@TomRitter: geef die ᴄᴠᴇ referentie op. - user2284570
Het zat in een oooold-versie van cactussen, dus tenzij je 8-jarige software gebruikt, denk ik niet dat het je zal helpen. En als u 8 jaar oude software gebruikt, kan ik u niet helpen. ;) - Tom Ritter


U moet a) starten bash zonder sourceeen van beide ~/.bashrc of ~/.bash_profile en b) omdat een dergelijke shell geen volledige login-shell is / geen tty bevestigd, kracht ssh om een ​​te bevestigen tty:

ssh -t user@host bash --norc --noprofile

11
2018-02-17 12:51



Dit werkt, maar merk op dat je niet je gebruikelijke prompt hebt, alleen een leeg scherm. probeer een ls om jezelf ervan te overtuigen dat je er bent :). Merk ook op dat dit een a zal gebruiken dumb termijn, dus voor mij werkt nano niet - Ciprian Tomoiagă


Je hebt geen geluk.

Alle ssh-opdrachten voeren uw login-shell uit. ssh $COMMAND runs $SHELL -c $COMMAND, scp runs $SHELL -c /path/to/sftp-server, duidelijk ssh draait gewoon je shell.


6
2017-12-15 13:29



Dit geldt ook voor sftp - zelfs SSH-subsystemen worden blijkbaar vanuit een shell uitgevoerd. - lxgr
In mijn ervaring heb je gelijk, hoewel de ssh man-pagina zegt: "Als de opdracht is opgegeven, wordt deze uitgevoerd op de externe host in plaats van een login-shell." Toch was de poster in staat om het probleem op te lossen met behulp van het hoogst gewaardeerde antwoord (ssh hostnaam / bin / sh). Wat geeft? - Silvio Levy
@Silvio, OP's antwoord is dat hij een exploit heeft gebruikt die niet gerelateerd is aan SSH. - Tobu
Rechts. Iemand rapporteerde succes met het hoogst gewaardeerde antwoord en ik nam haastig aan dat dit het OP was. Ik wou dat het werkte - ik heb een soortgelijke situatie, hoewel het alleen maar vervelend is en niet verlammend werkt. (Zie mijn reactie onder het hoogst beoordeelde antwoord hierboven.) - Silvio Levy


Geen van de bovenstaande antwoorden kan de login-shell van ssh omzeilen. U kunt een volledige opdrachtregel doorgeven en dus wordt de externe shell uitgevoerd om de opdracht te verwerken en de werkomgeving voor de opdracht in te stellen. Dat is waar schelpen voor zijn en het is de Unix-manier. Je zou allerlei compatibiliteitsproblemen hebben als je probeerde iets zonder shell uit te voeren. Op dezelfde manier zou het proberen van een control-C hetzelfde moeten doen als het aanroepen van exit, het gedrag dat je probeert te vermijden. Als bash zijn bug voortzet. Waarom mensen blijven zeggen dat de man-pagina iets anders zegt, moet het citeren omdat het niets van het soort zegt op mijn man-pagina.

Bovendien, op de meeste linux-systemen, geeft specificeren / bin / sh NIETS, omdat dit slechts een symlink is naar bash!

Wil je testen? Voeg "echo" -verklaringen toe aan .bashrc en .profile en zie welke wordt uitgevoerd. Ik deed. Dit zijn de resultaten.

ssh user@host voert .bash_profile uit ssh user@host /bin/bash zal .bashrc uitvoeren, maar het denkt dat het niet-interactief is (geen prompt). ssh -t user@host /bin/bash voert .bashrc tweemaal uit ... eenmaal bij het inloggen, één keer voor het doorgegeven commando, dus het opgeven van ELKE shell zal altijd de eerste uitvoeren. ssh -T user@host is hetzelfde als helemaal geen -T of -t opgeven.

Nu, als je opmerkt, MIJN systeem gebruikt niet beide bestanden, alleen de een of de ander. Maar de originele poster heeft een regel in .bash_profile met .bashrc, dus. Bashrc zal altijd worden uitgevoerd, wat er ook gebeurt. Had die rij daar niet moeten zetten! Als die regel niet bestond, had je geen probleem gehad.

U moet een andere manier vinden of een beheerder zoeken. Dit is waar admins voor zijn.


5
2017-07-25 06:52



Enkele goede punten; geen uitvoerbaar bestand dat wordt doorgegeven als een commando kan helpen, zoals je uitlegt, maar op een enigszins betwistbaar punt: als /bin/sh  deed eerst uit te voeren, het zou hulp, omdat Bash niet laden ~/.bashrc wanneer opgeroepen als sh. Dit antwoord is een superset van je andere antwoord, dus verwijder de andere. - mklement


Zoiets als:

ssh host "/bin/bash --norc"

wat lijkt te werken, maar houd er rekening mee dat PS1 niet is ingesteld, dus je zult commando's typen zonder een prompt.

Dit heeft het voordeel dat het niet-destructief is.


3
2017-12-15 12:20



Dit werkt niet, het probeerde eerst om een ​​succesvolle login, maar kan niet inloggen en kan daarom bash --norc niet uitvoeren - Tom Ritter


ssh -t user@host "bash --norc --noprofile -c '/bin/rm .bashrc'"

2
2018-04-09 17:16



Dit werkte voor mij in een zeer beperkte omgeving wanneer niets zou. Ik moest het volledige pad opgeven voor .bashrc. - zbeekman


proberen

echo ^C | ssh <hostname> ' rm .bashrc'

^ C er is controle-v dan c


1
2018-02-21 18:18



Het is ctrl-v en ctrl-c op mijn systeem. Toch bedankt! :) - mzuther