Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

echo -e und Nullbytes - Escapesequenzen werden ignoriert

0 views
Skip to first unread message

Marco Moock

unread,
Aug 3, 2022, 3:24:02 AM8/3/22
to
Hallo zusammen,

ich befasse mich momentan bisschen mit SASL und mit den verschiedenen
Methoden wie PLAIN, LOGIN etc.
Bei PLAIN ist Benutzer/PW durch ein Nullbyte getrennt.
Dann wird das ganze per base64 kodiert.

Diesen String will ich jetzt mit echo manuell erzeugen. Leider wird da
aber das Null-Byte ignoriert.

Hier mal als Beispiel unter Ubuntu 22.04:
m@jammy:~$ echo bla\0
bla0
m@jammy:~$ echo bla0
bla0
m@jammy:~$ echo bla0 |base64
YmxhMAo=
m@jammy:~$ echo bla\0 |base64
YmxhMAo=
m@jammy:~$

Man sieht also, dass das \0 wie eine 0 interpretiert wird (sonst wäre
der base64-Code anders). Das passiert auch bei anderen Escape-Sequenzen:
m@jammy:~$ echo -e bla\n
blan
m@jammy:~$

Die Manpage sagt aber (gekürzt):
If -e is in effect, the following sequences are recognized:

\n new line

\0NNN byte with octal value NNN (1 to 3 digits)

m@jammy:~$ type echo
echo is a shell builtin
m@jammy:~$

Ist nicht die Ursache:

m@jammy:~$ /usr/bin/echo -e \n
n
m@jammy:~$

Was mache ich hier falsch?

--
Gruß
Marco

Ulli Horlacher

unread,
Aug 3, 2022, 3:29:57 AM8/3/22
to
Marco Moock <mo...@posteo.de> wrote:

> ich befasse mich momentan bisschen mit SASL und mit den verschiedenen
> Methoden wie PLAIN, LOGIN etc.
> Bei PLAIN ist Benutzer/PW durch ein Nullbyte getrennt.
> Dann wird das ganze per base64 kodiert.
>
> Diesen String will ich jetzt mit echo manuell erzeugen. Leider wird da
> aber das Null-Byte ignoriert.
>
>
> Was mache ich hier falsch?

Du verwendest das falsche Kommando.

framstag@moep:~: printf 'x\000x' | fhexdump
00000000:78 00 78
0:x · x

--
Ullrich Horlacher Server und Virtualisierung
Rechenzentrum TIK
Universitaet Stuttgart E-Mail: horl...@tik.uni-stuttgart.de
Allmandring 30a Tel: ++49-711-68565868
70569 Stuttgart (Germany) WWW: http://www.tik.uni-stuttgart.de/

Helmut Waitzmann

unread,
Aug 3, 2022, 3:57:32 AM8/3/22
to
Marco Moock <mo...@posteo.de>:
>m@jammy:~$ echo bla\0
>bla0
>m@jammy:~$

[…]

>m@jammy:~$ echo -e bla\n
>blan
>m@jammy:~$

[…]

>Was mache ich hier falsch?
>

Versuche, die Frage zu beantworten, was der Shell aus «\0»
und «\n» macht, wenn er sie in seiner Kommandozeile vorfindet.

Versuche, die Frage zu beantworten, was der Shell aus «'\0'»
und «'\n'» macht, wenn er sie in seiner Kommandozeile vorfindet.


Langer Rede kurzer Sinn:  Probiere, ob


echo -e '\0'

bzw.

echo -e '\n'

tun, was du wünschst.

--
Hat man erst verstanden, wie Unix funktioniert, ist auch
das Shell-Handbuch kein Buch mit sieben Siegeln mehr.

Marco Moock

unread,
Aug 3, 2022, 3:58:49 AM8/3/22
to
On Wed, 3 Aug 2022 07:29:55 +0000 (UTC)
Ulli Horlacher <fram...@rus.uni-stuttgart.de> wrote:

> Du verwendest das falsche Kommando.
>
> framstag@moep:~: printf 'x\000x' | fhexdump
> 00000000:78 00 78
> 0:x · x

Danke für die Antwort, jedoch klappt das auch nicht so wie gewollt,
denn das Ergebnis ist ein anderes als das von der SMTP-Sitzung (die
nutzt auch definitiv PLAIN). Ich habe das mit Wireshark mitgeschnitten.

Wenn ich diesen String an base64 -d schicke, kommen Username/PW raus.
Das scheint zu passen. AUTH per SMTP geht auch durch.

m@jammy:~$ echo AHRlc3QAMTIzNDU2 |base64 -d
test123456m@jammy:~$
Bedeutet, dass AHRl... zum User/PW past.

m@jammy:~$ printf 'test\000123456' |base64
dGVzdAAxMjM0NTY=
m@jammy:~$

Ich mache also noch etwas falsch (als MUA kam Claws-Mail zum Einsatz).

Des Weiteren würde mich noch interessieren, warum echo da ungeeignet
ist und nicht die in der manpage genannten Befehle unterstützt.

fhexdump ist nicht in den Paketquellen, damit kann ich nicht prüfen.

--
Gruß
Marco

Marco Moock

unread,
Aug 3, 2022, 4:15:08 AM8/3/22
to
On Wed, 03 Aug 2022 09:57:29 +0200
Helmut Waitzmann <nn.th...@xoxy.net> wrote:

> Langer Rede kurzer Sinn:  Probiere, ob
>
>
> echo -e '\0'
>
> bzw.
>
> echo -e '\n'
>
> tun, was du wünschst.

Erstmal ja, aber es passt dann am Ende doch wieder nicht.

m@jammy:~$ echo -e "test\0000123456"
test123456
m@jammy:~$ echo -e "test\0000123456" |base64
dGVzdAAxMjM0NTYK
m@jammy:~$

Hier sollte aber AHRlc3QAMTIzNDU2 rauskommen, das zumindest kommt vom
Mailclient. Und genau das

--
Gruß
Marco

Marco Moock

unread,
Aug 3, 2022, 4:16:53 AM8/3/22
to
On Wed, 3 Aug 2022 10:15:07 +0200
Marco Moock <mo...@posteo.de> wrote:

Leider versehentlich abgeschickt, daher hier die Ergänzung des Satzes.

Und genau das ist mir derzeit noch unklar und ich würde gerne
verstehen, wie man das mit echo und base64 erreichen kann.

--
Gruß
Marco

Ulli Horlacher

unread,
Aug 3, 2022, 4:27:45 AM8/3/22
to
Marco Moock <mo...@posteo.de> wrote:

> fhexdump ist nicht in den Paketquellen, damit kann ich nicht prüfen.

https://fex.belwue.de/fstools/#fhexdump

Laurenz Trossel

unread,
Aug 3, 2022, 5:52:18 AM8/3/22
to
On 2022-08-03, Marco Moock <mo...@posteo.de> wrote:

> m@jammy:~$ echo -e "test\0000123456"
> test123456
> m@jammy:~$ echo -e "test\0000123456" |base64
> dGVzdAAxMjM0NTYK
> m@jammy:~$
>
> Hier sollte aber AHRlc3QAMTIzNDU2 rauskommen, das zumindest kommt vom
> Mailclient. Und genau das

GIGO.

$ echo 'AHRlc3QAMTIzNDU2' |base64 -d |hexdump -C
00000000 00 74 65 73 74 00 31 32 33 34 35 36 |.test.123456|

Es gibt also noch eine führende Null.

$ echo -ne '\0000test\0000123456'|base64
AHRlc3QAMTIzNDU2

Marcel Logen

unread,
Aug 3, 2022, 6:35:08 AM8/3/22
to
Marco Moock in de.comp.os.unix.shell:

>Bei PLAIN ist Benutzer/PW durch ein Nullbyte getrennt.

Siehe dazu RFC4616, Abschnitt 2
<https://datatracker.ietf.org/doc/html/rfc4616#section-2>

und das erste Beispiel in Abschitt 4
<https://datatracker.ietf.org/doc/html/rfc4616#section-4>.

Laurenz hat recht: Da muß noch ein NUL am Anfang hin.

Marcel 8454 (266404)
--
╮ ╭──╮ ╭─────────╮ ╭─────╮ ╭─╮ ╭
╰─╯ ╰────╮ ╰─────╮ │ ╭─╮ ╭───────╮ ╰──╮ ╰─╯ ╰──╮ │
╭────────╯ ╭─╮ ╭─╯ ╰───╯ │ ╰───╮ ╰──╮ ╭───────╮ │ ╭──────╯ │
╰────────────╯ ╰──╯ ╰──────╯ ╰─╯ 6eb2eb╰──╯ ╰─────────╯

Christian Garbs

unread,
Aug 3, 2022, 6:44:56 AM8/3/22
to
Mahlzeit!

Marco Moock <mo...@posteo.de> wrote:

> Man sieht also, dass das \0 wie eine 0 interpretiert wird (sonst wäre
> der base64-Code anders). Das passiert auch bei anderen Escape-Sequenzen:
> m@jammy:~$ echo -e bla\n
> blan
> m@jammy:~$
>
> Die Manpage sagt aber (gekürzt):
> If -e is in effect, the following sequences are recognized:
>
> \n new line
>
> \0NNN byte with octal value NNN (1 to 3 digits)

ich glaube, da kommen drei Dinge zusammen:

1. Shell-Quoting: Das einzelne \ geht verloren.
Entweder \\0 oder '\0' oder "\0".

2. Zu wenig Nullen :-) Die zitierte Manpage sagt \0 *plus* ein bis
drei Ziffern.
Also \00, \000 oder \0000. \0 reicht nicht.

3. echo ergänzt einen Zeilenumbruch, der landet mit im Base64-String.
Passiert mir regelmäßig beim Encodieren von Passwörtern…
Lösung: echo -n

Also irgendwie so: echo -ne '\00xyz' | base64

Gruß
Christian
--
....Christian.Garbs....................................https://www.cgarbs.de
This is a funny .sig. LAUGH!! NOW!!!!

Ulli Horlacher

unread,
Aug 3, 2022, 7:23:40 AM8/3/22
to
Christian Garbs <mi...@cgarbs.de> wrote:

> 3. echo ergänzt einen Zeilenumbruch, der landet mit im Base64-String.
> Passiert mir regelmäßig beim Encodieren von Passwörtern?
> Lösung: echo -n

Mit printf passiert das nicht :-)

Marco Moock

unread,
Aug 3, 2022, 7:45:19 AM8/3/22
to
Danke, das hatte ich nicht auf dem Schirm und vermutete ein anderes
Problem. Danke für die Unterstützung an alle.

--
Gruß
Marco

Thomas Klix

unread,
Aug 3, 2022, 10:12:15 AM8/3/22
to
Ulli Horlacher wrote at Wed, 3 Aug 2022 08:27:44 +0000 (UTC):
> Marco Moock <mo...@posteo.de> wrote:
>
>> fhexdump ist nicht in den Paketquellen, damit kann ich nicht prüfen.
>
> https://fex.belwue.de/fstools/#fhexdump

Langsam nervt deine Eigenwerbung.
Ist ja fast schon SPAM.

Thomas

Ulli Horlacher

unread,
Aug 3, 2022, 11:55:45 AM8/3/22
to
Thomas Klix <wot...@web.de> wrote:
> Ulli Horlacher wrote at Wed, 3 Aug 2022 08:27:44 +0000 (UTC):
> > Marco Moock <mo...@posteo.de> wrote:
> >
> >> fhexdump ist nicht in den Paketquellen, damit kann ich nicht prüfen.
> >
> > https://fex.belwue.de/fstools/#fhexdump
>
> Langsam nervt deine Eigenwerbung.

Ich wurde danach gefragt, also antworte ich.


> Ist ja fast schon SPAM.

Ist dein Killfile kaputt?
Wer zwingt dich meine Beitraege zu lesen?

Ulli Horlacher

unread,
Aug 3, 2022, 12:01:37 PM8/3/22
to
Ulli Horlacher <fram...@rus.uni-stuttgart.de> wrote:
> Thomas Klix <wot...@web.de> wrote:
> > Ulli Horlacher wrote at Wed, 3 Aug 2022 08:27:44 +0000 (UTC):
> > > Marco Moock <mo...@posteo.de> wrote:
> > >
> > >> fhexdump ist nicht in den Paketquellen, damit kann ich nicht prüfen.
> > >
> > > https://fex.belwue.de/fstools/#fhexdump
> >
> > Langsam nervt deine Eigenwerbung.
>
> Ich wurde danach gefragt, also antworte ich.

Und ueberhaupt: wo sind deine konstruktiven Beitraege zum Subject?
Kannst du noch was anderes ausser off-topic rummotzen?
Ich verweise auf Nuhr: wenn man nichts zu sagen hat - einfach mal Klappe
halten.

Thomas Klix

unread,
Aug 3, 2022, 12:22:16 PM8/3/22
to
Ulli Horlacher wrote at Wed, 3 Aug 2022 15:55:44 +0000 (UTC):
> Thomas Klix <wot...@web.de> wrote:
>> Langsam nervt deine Eigenwerbung.
>> Ist ja fast schon SPAM.
>
> Ist dein Killfile kaputt?
> Wer zwingt dich meine Beitraege zu lesen?

Deine Beiträge sind im allgemeinen lesenswert, ja, keine Frage.
Kein Fall fürs Killfile.
Es sei denn, du bewirbst deine eigene Software. Das nervt.

Thomas

Thomas Klix

unread,
Aug 3, 2022, 12:22:16 PM8/3/22
to
Ulli Horlacher wrote at Wed, 3 Aug 2022 16:01:36 +0000 (UTC):
> Kannst du noch was anderes ausser off-topic rummotzen?
> Ich verweise auf Nuhr: wenn man nichts zu sagen hat - einfach mal Klappe
> halten.

Recht hat er, der Nuhr.
Bitte berücksichtigen.

Thomas

Helmut Waitzmann

unread,
Aug 3, 2022, 1:01:57 PM8/3/22
to
Marco Moock <mo...@posteo.de>:
>On Wed, 3 Aug 2022 07:29:55 +0000 (UTC)
>Ulli Horlacher <fram...@rus.uni-stuttgart.de> wrote:
>
>> Du verwendest das falsche Kommando.
>>
>> framstag@moep:~: printf 'x\000x' | fhexdump
>> 00000000:78 00 78
>> 0:x · x

>fhexdump ist nicht in den Paketquellen, damit kann ich nicht
>prüfen.

«od» tut es auch.  «od» gehört zum POSIX‐Standard
(<https://pubs.opengroup.org/onlinepubs/9699919799/utilities/od.html#top>),
sollte also in jeder vernünftigen Unix‐Implementierung vorhanden
sein.

«od» kann Text‐ und Binärdaten als Oktalzahlen, als
vorzeichenbehaftete und ‐lose Dezimalzahlen und Sedezimalzahlen
darstellen, dazu in einer Form, die der Form, in der Zeichen in
C‐Programmen dargestellt werden, sehr nahe kommt.  Die
Zahlendarstellungen ganzer Zahlen können in Breiten von 1, 2, 4 oder
8 Bytes oder auch in den vom im System installierten «C»‐Compiler
verwendeten Datentypen «char», «short», «int» und «long» ausgegeben
werden.  Die Reihenfolge der Bytes (Endianess) ist die des Systems. 
Auch Gleitkommazahlen in der Genauigkeit «float», «double» und «long
double» sind möglich.

Beispiel:  Die Shell‐Kommandozeile


printf '%b' '\0000test\0000123456' |
od -v -A d -t cx1o1u1


liefert die Ausgabe


0000000 \0 t e s t \0 1 2 3 4 5 6
00 74 65 73 74 00 31 32 33 34 35 36
000 164 145 163 164 000 061 062 063 064 065 066
0 116 101 115 116 0 49 50 51 52 53 54
0000012

Marco Moock

unread,
Aug 3, 2022, 1:58:16 PM8/3/22
to
Am Mittwoch, 03. August 2022, um 18:21:20 Uhr schrieb Thomas Klix:

> Recht hat er, der Nuhr.

Wobei dann seine Aussagen auf für OT-Beiträge gelten sollten. :-)

> Bitte berücksichtigen.

Ich hatte da in d.c.p.t auch so meine Probleme.

PS: Die Sache ist ja gelöst, ich hatte den Null-Character am Anfang
vergessen.

0 new messages