Ich finde du hast dir eine Art Tunnelblick in dieser Angelegenheit zugelegt. Noch ein letzter Versuch dir meinen Shellcode zu übersetzen:
Code: Alles auswählen
user1:~$ pwd > temp.$$
user1:~$ cat temp.$$
/home/user1
user1:~$ echo -e `cat temp.$$`\/`basename temp.$$`
/home/user1/temp.4554
Im Gegensatz dazu tut "mktemp" genau das:
Code: Alles auswählen
user1:~$ mktemp
/tmp/tmp.08dYWiPvCj
Und ebenso:man 3 mktemp hat geschrieben:BUGS
Never use mktemp(). Some implementations follow 4.3BSD and replace
XXXXXX by the current process ID and a single letter, so that at most
26 different names can be returned. Since on the one hand the names
are easy to guess, and on the other hand there is a race between test‐
ing whether the name exists and opening the file, every use of mktemp()
is a security risk. The race is avoided by mkstemp(3).
Du hättest wohl besser auch auf "mkstemp" hingewiesen und dich nicht darauf versteift, nachzuweisen, ich hätte dazu aufgefordert, irgendeine Datei im Verzeichnis "/tmp" anzulegen.[1] hat geschrieben:— Function: char * mktemp (char *template)
[...]
Warning: Between the time the pathname is constructed and the file is created another process might have created a file with the same name using mktemp, leading to a possible security hole. The implementation generates names which can hardly be predicted, but when opening the file you should use the O_EXCL flag. Using mkstemp is a safe way to avoid this problem.
Gruß, habakug
$ man 3 mktemp
[1] http://www.gnu.org/software/libc/manual ... Files.html