Hallo Leute,
ich versuche gerade hier ein "Use-after-free"-Programm für Linux zu kapieren. D.h. ich will eigentlich nur verstehen, was genau unter der Haube passiert. Der Code zu dem Programm ist zu finden unter: oss-sec: Linux tcp_xmit_retransmit_queue use after free on 4.8-rc1 / master
Ich brauche schon recht weit vorne Hilfe. Da steht die folgende Zeile:
Der Kerl, der dieses kleine Programm geschrieben hat, verwendet für folgende Parameter die entsprechenden Werte:
addr - 0x20000000ul
length - 0x20000ul
prot - 0x3ul
flags - 0x32ul
fd - 0xfffffffffffffffful
offset - 0x0ul
Hab ich jetzt von mmap(2) - Linux manual page genommen. Was ich hier jedoch nicht nicht verstehe, ist, wie er auf den Wert 0x32ul bei "flags" kommt. Wenn ich nach Flag-Werten für die Funktion mmap suche, finde ich nichts konkretes.
Deswegen kam ich dann auf die Idee mal zu schauen, was ich so auf meinem System finde.
Unter meinem Kali Linux System habe ich ene Datei
-> /usr/include/i386-linux-gnu/sys/mman.h die die Datei
-> /usr/include/i386-linux-gnu/bits/mman.h inkludiert, die wiederum die Datei
-> /usr/include/i386-linux-gnu/bits/mman-linux.h inkludiert,
und in dieser Datei finde ich nur folgenden Part:
Also 0x32ul ist ja der Wert 66 im Dezimalsystem. Nur wie kommt der Kerl jetzt auf den Wert 0x32ul.
Mir kam zuerst der Gedanke, ich mache folgendes
Aber soweit ich das verstehe, komme ich hier erstmal nur auf 63.
Hat jemand von euch eine Idee oder kann mir hier jemand helfen? Ich stehe irgendwie auf dem Schlauch ... ;(;(;(
EDIT
Ich habe heute morgen nochmal auf meinen Zettel mit ein paar Notizen angeschaut und gemerkt, dass 0x32ul gar nicht 66 sein kann.
0x32ul ist in Dezimal 50. Und die Kombination dieser Flags würde passen ...
ich versuche gerade hier ein "Use-after-free"-Programm für Linux zu kapieren. D.h. ich will eigentlich nur verstehen, was genau unter der Haube passiert. Der Code zu dem Programm ist zu finden unter: oss-sec: Linux tcp_xmit_retransmit_queue use after free on 4.8-rc1 / master
Ich brauche schon recht weit vorne Hilfe. Da steht die folgende Zeile:
Code:
r[0] = syscall(SYS_mmap, 0x20000000ul, 0x20000ul, 0x3ul, 0x32ul, 0xfffffffffffffffful, 0x0ul);
Der Kerl, der dieses kleine Programm geschrieben hat, verwendet für folgende Parameter die entsprechenden Werte:
addr - 0x20000000ul
length - 0x20000ul
prot - 0x3ul
flags - 0x32ul
fd - 0xfffffffffffffffful
offset - 0x0ul
Hab ich jetzt von mmap(2) - Linux manual page genommen. Was ich hier jedoch nicht nicht verstehe, ist, wie er auf den Wert 0x32ul bei "flags" kommt. Wenn ich nach Flag-Werten für die Funktion mmap suche, finde ich nichts konkretes.
Deswegen kam ich dann auf die Idee mal zu schauen, was ich so auf meinem System finde.
Unter meinem Kali Linux System habe ich ene Datei
-> /usr/include/i386-linux-gnu/sys/mman.h die die Datei
-> /usr/include/i386-linux-gnu/bits/mman.h inkludiert, die wiederum die Datei
-> /usr/include/i386-linux-gnu/bits/mman-linux.h inkludiert,
und in dieser Datei finde ich nur folgenden Part:
Code:
/* Sharing types (must choose one and only one of these). */
#define MAP_SHARED 0x01 /* Share changes. */
#define MAP_PRIVATE 0x02 /* Changes are private. */
#ifdef __USE_MISC
# define MAP_TYPE 0x0f /* Mask for type of mapping. */
#endif
/* Other flags. */
#define MAP_FIXED 0x10 /* Interpret addr exactly. */
#ifdef __USE_MISC
# define MAP_FILE 0
# ifdef __MAP_ANONYMOUS
# define MAP_ANONYMOUS __MAP_ANONYMOUS /* Don't use a file. */
# else
# define MAP_ANONYMOUS 0x20 /* Don't use a file. */
# endif
# define MAP_ANON MAP_ANONYMOUS
/* When MAP_HUGETLB is set bits [26:31] encode the log2 of the huge page size. */
# define MAP_HUGE_SHIFT 26
# define MAP_HUGE_MASK 0x3f
#endif
Also 0x32ul ist ja der Wert 66 im Dezimalsystem. Nur wie kommt der Kerl jetzt auf den Wert 0x32ul.
Mir kam zuerst der Gedanke, ich mache folgendes
Code:
MAP_TYPE | MAP_FIXED | MAP_ANONYMOUS
Aber soweit ich das verstehe, komme ich hier erstmal nur auf 63.
Hat jemand von euch eine Idee oder kann mir hier jemand helfen? Ich stehe irgendwie auf dem Schlauch ... ;(;(;(
EDIT
Ich habe heute morgen nochmal auf meinen Zettel mit ein paar Notizen angeschaut und gemerkt, dass 0x32ul gar nicht 66 sein kann.
0x32ul ist in Dezimal 50. Und die Kombination dieser Flags würde passen ...
Code:
MAP_ANONYMOUS | MAP_FIXED | MAP_PRIVATE
Zuletzt bearbeitet: