Vinnaren i pepparkakshustävlingen!
2017-04-12, 19:06
  #1
Medlem
Antag att vi har shellscript på en server som ser ut på följande vis:
Kod:
#!/bin/sh

echo "Enter your name:"
read name

cat test.txt
echo 'PORT =' $name > test.txt

Om följande curlkommando körs
Kod:
sudo curl -s http://example.com/shell.sh | sh

, så tar den varken emot user inputs eller vill skapa filen test.txt. Det enda som händer är att "Enter your name:" skrivs ut.

Vad kan man ändra i curlkommandot för att få det att fungera? Eller är det shellfilen som måste justeras? Måste jag ha med sudo i sh-filen också/istället?
Citera
2017-04-12, 20:24
  #2
Moderator
vhes avatar
Problemet är att du verkar förvänta dig att sh har två olika standard input. Den ena från curl, och den andra från din terminal. Så är det inte, processen sh har endast en standard input, i det här fallet från curl.
Jag antar att du kan lösa det genom att introducera en fildescriptor till:
Kod:
$ cat test.sh 
#!/bin/sh
echo -n "Enter your name: "
read name <&3
echo Your name is: $name
$ cat test.sh | sh 3<&1
Enter your name: vhe
Your name is: vhe

stddisclaimer: curl | sh är ondska. Sluta upp med det.
Citera
2017-04-13, 02:24
  #3
Medlem
Citat:
Ursprungligen postat av vhe
Problemet är att du verkar förvänta dig att sh har två olika standard input. Den ena från curl, och den andra från din terminal. Så är det inte, processen sh har endast en standard input, i det här fallet från curl.
Jag antar att du kan lösa det genom att introducera en fildescriptor till:
Kod:
$ cat test.sh 
#!/bin/sh
echo -n "Enter your name: "
read name <&3
echo Your name is: $name
$ cat test.sh | sh 3<&1
Enter your name: vhe
Your name is: vhe

Tack, ska kolla på det imorgon!

Citat:
Ursprungligen postat av vhe
stddisclaimer: curl | sh är ondska. Sluta upp med det.

Varför är det ondska?
Citera
2017-04-13, 08:29
  #4
Moderator
vhes avatar
Citat:
Ursprungligen postat av fyma
Varför är det ondska?

Tja, om du kontrollerar båda sidor så är det väl inte farligt, men om server och klient ägs av två olika entiteter så finns det en del säkerhetsexploits där servern kan exekvera overifierad kod på klienten.

Men oavsett så är det ett problem med att en nätverkslänk kan gå ner, och du bara kan få delar av ditt script, det kan få obehagliga konsekvenser. Tänk följande script:

Kod:
#!/bin/sh
mkdir ~/worktmp
# do various stuff in tempdir
# now clean up
rm -rf ~/worktmp

Ponera att länken går ner så att de sista teknen faller bort. Så här:
Kod:
#!/bin/sh
mkdir ~/worktmp
# do various stuff in tempdir
# now clean up
rm -rf ~/

Vilket ditt skal givetvis glatt kommer att tolka som att du vill ta bort ditt hembibliotek. Antalet permutationer av kommandon som blir dåliga när de bara får delar av sin kommandorad är stort...

Det finns sätt att skydda sig mot det genom att vara nogrann med hur man skriver sina script, men det är lätt att göra misstag.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback