SlideShare a Scribd company logo
Writing Exploits
            Nethemba s.r.o.




      norbert.szetei@nethemba.com

                   

                                   www.nethemba.com       
                                    www.nethemba.com      
Motivation
   Basic code injection
   W^X (DEP), ASLR, Canary (Armoring)
   Return Oriented Programming (ROP)
   Tools of the Trade
   Metasploit



                            

                                      www.nethemba.com       
A Brief History
   08/11/1996 Phrack #49
   Smashing The Stack For Fun And Profit, Elias 
    Levy
    “ … Code that does this is said 
    to smash the stack, and can 
    cause return from the routine to 
    jump to a random address.  This 
    can produce some of the most 
    insidious data­dependent bugs 
    known to mankind.”           

                                             www.nethemba.com       
Stack Frame
                                       Low Memory Address


void func(int a, int b, int c) {
   char buffer1[BUFSIZE];
   char buffer2[BUFSIZE];
                                             buffer2
}
int main(int argc, char **argv) {
                                             buffer1
  func(10, 20, 30);                           EBP
}
                                              EIP
   prologue, epilogue                         10
push ebp            mov esp, ebp               20
mov ebp, esp        pop ebp                    30
sub esp, $const     ret
     
                                       High Memory Address
                            

                                         www.nethemba.com       
Buffer Overflow
                                       Low Memory Address


void func(char *src) {
   char dest[64];
   strcpy(dest, src);
}
int main(int argc, char **argv) {
                                               dest
  func(argv[1]);                               EBP
}
                                               EIP
                                               args



   
                                       High Memory Address
                           

                                         www.nethemba.com       
Buffer Overflow
                                       Low Memory Address


void func(char *src) {
   char dest[64];
   strcpy(dest, src);
}
int main(int argc, char **argv) {
                                        SHELLCODE
  func(argv[1]);                           JUNK
}
                                         JMP TO SC
                                           JUNK



   
                                       High Memory Address
                           

                                         www.nethemba.com       
Low Memory Address
 Buffer Overflow – SEH
try {
  int a = 5;                                     Local Vars
  int b = 0;
                                                  Next SEH
  int c = a / b;
} catch (Exception e) {                          SE Handler
  printf(“ignore ..”);
}
                                                    EBP
                                                    EIP
                                                    args
 Next →    Next →     Next →       0xFFFFFFFF
Pointer to Pointer to Pointer to Default
Exception Exception Exception Exception
Handler    Handler    Handler    Handler        High Memory Address
                                

                                                 www.nethemba.com       
Low Memory Address
 Buffer Overflow – SEH
try {
  int a = 5;                                       Local Vars
  int b = 0;
                                                    Next SEH
  int c = a / b;
} catch (Exception e) {                            SE Handler
  printf(“ignore ..”);
}
                                                      EBP
                                                      EIP
                                                      args
 Shellcode     Next →    Next →   0xFFFFFFFF
  address
POP POP RET   Pointer to Pointer to Default
              Exception Exception Exception
              Handler    Handler   Handler       High Memory Address

                                                   www.nethemba.com       
Low Memory Address
Stack cookies – canaries                       Local Vars
   Protection provided by the compiler          Canary
    (/gs, ­fstack­protector, StackGuard,        Next SEH
    ProPolice)                                 SE Handler
   Can rearrange the stack layout, so            EBP
    string variables are on higher                EIP
    addresses and cannot overwrite                args
    other local variables
    Contain “bad” characters (0x00, 
     0xFF)
                                             High Memory Address
                             

                                               www.nethemba.com       
Stack cookies – canaries
   Usually a challenge
   Entropy weaknesses (24­bit entropy on Ubuntu, 
    can by bypassed in reasonable time)
   Sometimes helps to overwrite SEH
   Cannot protect from buffer overflows in heap



                            

                                            www.nethemba.com       
Protection ­ DEP
   Stack is no longer executable
   W^X
   Both HW (NX bit) and software support
   Prevent basic buffer overflows
   Four policy levels on Windows platform:  Optin, 
    OptOut, AlwaysOn, AlwaysOff
   Can be bypassed by “return­to­libc”
                            

                                           www.nethemba.com       
Return to LIBC
   The most generic method to bypass NX
   No executable code in stack
   EIP is overwritten by library function (system())
   Parameters are passed via stack
   Chained “return to libc”
   No loops, conditional jumps, complicated things
    28/12/2001 Phrack #58, Advanced return­into­
     
     lib(c) exploits        

                                              www.nethemba.com       
Low Memory Address
                       Return to LIBC               Low Memory Address

     uuu

                      ←basic buffer overflow
     Local Vars                                       Local Vars
                         
       EBP                                               EBP
        EIP                                            system()
       args                      return to libc →     EIP JUNK
                                                      “/bin/sh0”

High Memory Address
                                                    High Memory Address
                                   

                                                    www.nethemba.com       
ASLR
   Address Stack Layout Randomization
   Including Libraries, Heap, Stack
   But not necessary in all libraries
   You need at least one module without ASLR for 
    bypassing in Windows
   Implementation weaknesses
   Can by bypassed by format string exploits
                             

                                              www.nethemba.com       
Format String Attacks
int main(int argc, char **argv) {
  printf(“%s”, argv[1]); // correct
  printf(argv[1]); // wrong
}

●   Reading, writing from arbitrary memory
●   Direct parameter access via %<num>$
●   Writing via %n, %hn (2 bytes)
●   28/07/2002 Phrack #59, Advances in format string 
    exploitation
                             

                                            www.nethemba.com       
Return Oriented Programming
●   The successor of “return to libc” technique
●   Small number of instructions ending with “ret” 
    (Gadgets) chained together
●   If we find them enough, we have the Turing 
    Machine
●   Fixed Memory location for data interchange, usually 
    in .data section
●   2 registers are usually efficient
                               

                                             www.nethemba.com       
Return Oriented Programming
●   You can bypass character restrictions (neg)
●   No injected code, just rewritten stack
●   ESP determines which instructions you execute
●   Automated by tools (ropeme, ROPGadget)
    # execve /bin/sh bindport 8080 generated by RopGadget v3.3
    p += pack("<I", 0x08050dda) # pop %edx | ret
    p += pack("<I", 0x080cd6a0) # @ .data
    p += pack("<I", 0x080a49f6) # pop %eax | ret
    p += "//us"
    p += pack("<I", 0x080796ed) # mov %eax,(%edx) | ret
    ...
                                 

                                                  www.nethemba.com       
Return Oriented Programming
●   We can build the custom stack at fixed location 
    (bypass ASLR)
●   .data, .bss (readelf)
●   Multi­stage exploit
●   GOT entry overwriting
        offset = execve() ­ printf()
        execve() = printf() + offsef
●   Countermeasure: Position 
    Independent Executable (PIE)
                               

                                             www.nethemba.com       
Metasploit
●   msfpescan, msfelfscan, msfmachscan
●   irb, framework for exploits development
●   tools/ (memdump, metasm_shell, 
    pattern_create.rb, pattern_offset.rb, 
    nasm_shell)
●   mixins


                            

                                            www.nethemba.com       
Immunity Debugger
●   'mona' (successor of pvefindaddr)
●   skeleton for metasploit exploit can by generated 
    with Immunity Debugger (mona plugin)




                           

                                             www.nethemba.com       
Radare
●   Reverse engineering framework, *nix­style, 
    multiplatform
●   11/06/2009 Phrack #66, Manual Binary 
    Mangling With Radare
 radare: the entrypoint for everything :)
 rahash: block based hashing utility
 radiff: multiple binary diffing algorithms
 rabin:  extract information from binaries
 rasc:   shellcode construction helper
 rasm:   commandline assembler/disassembler
 rax:    inline multiple base converter
 xrefs:  blind search for relative code references
                          

                                          www.nethemba.com       
Wargames
●   http://overthewire.org 
●   http://smashthestack.org




                               

                                       www.nethemba.com       
References
●   http://www.radare.org/get/radare.pdf
●   https://www.metasploit.com




                             

                                                www.nethemba.com       
Any questions?


    Thank you for listening
           Norbert Szetei, CEH




                     

                                      www.nethemba.com       

More Related Content

ZIP
Inside PHP [OSCON 2012]
ZIP
Inside Python [OSCON 2012]
ODP
Python Compiler Internals Presentation Slides
PDF
A(n abridged) tour of the Rust compiler [PDX-Rust March 2014]
DOCX
Scanner,BufferedReader,Applet
PDF
Yapc::NA::2009 - Command Line Perl
PPTX
setjmp
PDF
Better rspec 進擊的 RSpec
Inside PHP [OSCON 2012]
Inside Python [OSCON 2012]
Python Compiler Internals Presentation Slides
A(n abridged) tour of the Rust compiler [PDX-Rust March 2014]
Scanner,BufferedReader,Applet
Yapc::NA::2009 - Command Line Perl
setjmp
Better rspec 進擊的 RSpec

Similar to Writing exploits (20)

PDF
Buffer Overflows 101: Some Assembly Required
PDF
Exploitation Crash Course
PPTX
Exploit Development: EzServer Buffer Overflow oleh Tom Gregory
PPTX
Exploit Development with Python
PPTX
Bypassing ASLR Exploiting CVE 2015-7545
PDF
JavaScript on the GPU
PPTX
Software to the slaughter
PDF
2 buffer overflows
TXT
Exploit techniques - a quick review
PPS
Nibin - Reverse Engineering for exploit writers - ClubHack2008
PPS
Reverse Engineering for exploit writers
PDF
javascript teach
PDF
JSBootcamp_White
PPT
Buffer Overflow Attacks
PPT
Buffer Overflows
PDF
Perl Memory Use 201207 (OUTDATED, see 201209 )
PPTX
Buffer overflow attacks
PDF
XS Boston 2008 Paravirt Ops in Linux IA64
PPTX
Seh based attack
PDF
Low Level Exploits
Buffer Overflows 101: Some Assembly Required
Exploitation Crash Course
Exploit Development: EzServer Buffer Overflow oleh Tom Gregory
Exploit Development with Python
Bypassing ASLR Exploiting CVE 2015-7545
JavaScript on the GPU
Software to the slaughter
2 buffer overflows
Exploit techniques - a quick review
Nibin - Reverse Engineering for exploit writers - ClubHack2008
Reverse Engineering for exploit writers
javascript teach
JSBootcamp_White
Buffer Overflow Attacks
Buffer Overflows
Perl Memory Use 201207 (OUTDATED, see 201209 )
Buffer overflow attacks
XS Boston 2008 Paravirt Ops in Linux IA64
Seh based attack
Low Level Exploits
Ad

More from Security Session (20)

PDF
Getting your hands dirty: How to Analyze the Behavior of Malware Traffic / SE...
PDF
Základy reverse engineeringu a assembleru / KAREL LEJSKA, MILAN BARTOŠ [DEFEN...
PDF
Zabezpečení nejen SSH na serveru pomocí Fail2Ban a jednoduchého honeypotu. / ...
PDF
Insights of a brute-forcing botnet / VERONICA VALEROS [CISCO]
PDF
Softwarove protektory / KAREL LEJSKA, MILAN BARTOŠ [DEFENDIO]
PDF
Wintel Hell: průvodce devíti kruhy Dantova technologického pekla / MARTIN HRO...
PDF
Robots against robots: How a Machine Learning IDS detected a novel Linux Botn...
PPTX
#ochranadat pred sebou samotným / MATEJ ZACHAR [SAFETICA TECHNOLOGIES S.R.O.]
PDF
Co vše skrývá síťový provoz a jak detekovat kybernetické hrozby? / MARTIN ŠKO...
PDF
Bezpečnější pošta díky protokolu DANE / ONDŘEJ CALETKA [CESNET]
ODP
Prezentace brno
PDF
OSINT and beyond
PDF
Exploitace – od minulosti po současnost - Jan Kopecký
PDF
Kontrola uživatelských účtů ve Windows a jak ji obejít - Martin Dráb
PDF
Research in Liveness Detection - Martin Drahanský
PPT
Dolování dat z řeči pro bezpečnostní aplikace - Jan Černocký
ODP
Turris - Robert Šefr
PDF
Co se skrývá v datovém provozu? - Pavel Minařík
PPTX
Jak odesílat zprávy, když někdo vypne Internet - Pavel Táborský
PDF
Two Years with botnet Asprox - Michal Ambrož
Getting your hands dirty: How to Analyze the Behavior of Malware Traffic / SE...
Základy reverse engineeringu a assembleru / KAREL LEJSKA, MILAN BARTOŠ [DEFEN...
Zabezpečení nejen SSH na serveru pomocí Fail2Ban a jednoduchého honeypotu. / ...
Insights of a brute-forcing botnet / VERONICA VALEROS [CISCO]
Softwarove protektory / KAREL LEJSKA, MILAN BARTOŠ [DEFENDIO]
Wintel Hell: průvodce devíti kruhy Dantova technologického pekla / MARTIN HRO...
Robots against robots: How a Machine Learning IDS detected a novel Linux Botn...
#ochranadat pred sebou samotným / MATEJ ZACHAR [SAFETICA TECHNOLOGIES S.R.O.]
Co vše skrývá síťový provoz a jak detekovat kybernetické hrozby? / MARTIN ŠKO...
Bezpečnější pošta díky protokolu DANE / ONDŘEJ CALETKA [CESNET]
Prezentace brno
OSINT and beyond
Exploitace – od minulosti po současnost - Jan Kopecký
Kontrola uživatelských účtů ve Windows a jak ji obejít - Martin Dráb
Research in Liveness Detection - Martin Drahanský
Dolování dat z řeči pro bezpečnostní aplikace - Jan Černocký
Turris - Robert Šefr
Co se skrývá v datovém provozu? - Pavel Minařík
Jak odesílat zprávy, když někdo vypne Internet - Pavel Táborský
Two Years with botnet Asprox - Michal Ambrož
Ad

Recently uploaded (20)

PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PPTX
sap open course for s4hana steps from ECC to s4
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
DOCX
The AUB Centre for AI in Media Proposal.docx
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PDF
NewMind AI Weekly Chronicles - August'25-Week II
PPTX
Spectroscopy.pptx food analysis technology
PDF
A comparative analysis of optical character recognition models for extracting...
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PPTX
MYSQL Presentation for SQL database connectivity
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Review of recent advances in non-invasive hemoglobin estimation
Spectral efficient network and resource selection model in 5G networks
Building Integrated photovoltaic BIPV_UPV.pdf
gpt5_lecture_notes_comprehensive_20250812015547.pdf
Chapter 3 Spatial Domain Image Processing.pdf
Unlocking AI with Model Context Protocol (MCP)
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Dropbox Q2 2025 Financial Results & Investor Presentation
Per capita expenditure prediction using model stacking based on satellite ima...
sap open course for s4hana steps from ECC to s4
Reach Out and Touch Someone: Haptics and Empathic Computing
The AUB Centre for AI in Media Proposal.docx
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
NewMind AI Weekly Chronicles - August'25-Week II
Spectroscopy.pptx food analysis technology
A comparative analysis of optical character recognition models for extracting...
“AI and Expert System Decision Support & Business Intelligence Systems”
MYSQL Presentation for SQL database connectivity

Writing exploits

  • 1. Writing Exploits Nethemba s.r.o. norbert.szetei@nethemba.com          www.nethemba.com             www.nethemba.com      
  • 2. Motivation  Basic code injection  W^X (DEP), ASLR, Canary (Armoring)  Return Oriented Programming (ROP)  Tools of the Trade  Metasploit          www.nethemba.com       
  • 3. A Brief History  08/11/1996 Phrack #49  Smashing The Stack For Fun And Profit, Elias  Levy “ … Code that does this is said  to smash the stack, and can  cause return from the routine to  jump to a random address.  This  can produce some of the most  insidious data­dependent bugs    known to mankind.”        www.nethemba.com       
  • 4. Stack Frame Low Memory Address void func(int a, int b, int c) {    char buffer1[BUFSIZE];    char buffer2[BUFSIZE]; buffer2 } int main(int argc, char **argv) { buffer1   func(10, 20, 30); EBP } EIP  prologue, epilogue 10 push ebp mov esp, ebp 20 mov ebp, esp pop ebp 30 sub esp, $const ret   High Memory Address        www.nethemba.com       
  • 5. Buffer Overflow Low Memory Address void func(char *src) {    char dest[64];    strcpy(dest, src); } int main(int argc, char **argv) { dest   func(argv[1]); EBP } EIP args   High Memory Address        www.nethemba.com       
  • 6. Buffer Overflow Low Memory Address void func(char *src) {    char dest[64];    strcpy(dest, src); } int main(int argc, char **argv) { SHELLCODE   func(argv[1]); JUNK } JMP TO SC JUNK   High Memory Address        www.nethemba.com       
  • 7. Low Memory Address Buffer Overflow – SEH try {   int a = 5; Local Vars   int b = 0; Next SEH   int c = a / b; } catch (Exception e) { SE Handler   printf(“ignore ..”); } EBP EIP args Next → Next → Next → 0xFFFFFFFF Pointer to Pointer to Pointer to Default Exception Exception Exception Exception Handler Handler Handler Handler High Memory Address          www.nethemba.com       
  • 8. Low Memory Address Buffer Overflow – SEH try {   int a = 5; Local Vars   int b = 0; Next SEH   int c = a / b; } catch (Exception e) { SE Handler   printf(“ignore ..”); } EBP EIP args Shellcode Next → Next → 0xFFFFFFFF address POP POP RET Pointer to Pointer to Default Exception Exception Exception   Handler Handler   Handler High Memory Address      www.nethemba.com       
  • 9. Low Memory Address Stack cookies – canaries Local Vars  Protection provided by the compiler  Canary (/gs, ­fstack­protector, StackGuard,  Next SEH ProPolice)  SE Handler  Can rearrange the stack layout, so  EBP string variables are on higher  EIP addresses and cannot overwrite  args other local variables  Contain “bad” characters (0x00,   0xFF) High Memory Address        www.nethemba.com       
  • 10. Stack cookies – canaries  Usually a challenge  Entropy weaknesses (24­bit entropy on Ubuntu,  can by bypassed in reasonable time)  Sometimes helps to overwrite SEH  Cannot protect from buffer overflows in heap          www.nethemba.com       
  • 11. Protection ­ DEP  Stack is no longer executable  W^X  Both HW (NX bit) and software support  Prevent basic buffer overflows  Four policy levels on Windows platform:  Optin,  OptOut, AlwaysOn, AlwaysOff  Can be bypassed by “return­to­libc”          www.nethemba.com       
  • 12. Return to LIBC  The most generic method to bypass NX  No executable code in stack  EIP is overwritten by library function (system())  Parameters are passed via stack  Chained “return to libc”  No loops, conditional jumps, complicated things  28/12/2001 Phrack #58, Advanced return­into­   lib(c) exploits        www.nethemba.com       
  • 13. Low Memory Address Return to LIBC Low Memory Address  uuu ←basic buffer overflow Local Vars Local Vars   EBP EBP EIP system() args     return to libc → EIP JUNK “/bin/sh0” High Memory Address   High Memory Address        www.nethemba.com       
  • 14. ASLR  Address Stack Layout Randomization  Including Libraries, Heap, Stack  But not necessary in all libraries  You need at least one module without ASLR for  bypassing in Windows  Implementation weaknesses  Can by bypassed by format string exploits          www.nethemba.com       
  • 15. Format String Attacks int main(int argc, char **argv) {   printf(“%s”, argv[1]); // correct   printf(argv[1]); // wrong } ● Reading, writing from arbitrary memory ● Direct parameter access via %<num>$ ● Writing via %n, %hn (2 bytes) ● 28/07/2002 Phrack #59, Advances in format string  exploitation          www.nethemba.com       
  • 16. Return Oriented Programming ● The successor of “return to libc” technique ● Small number of instructions ending with “ret”  (Gadgets) chained together ● If we find them enough, we have the Turing  Machine ● Fixed Memory location for data interchange, usually  in .data section ● 2 registers are usually efficient          www.nethemba.com       
  • 17. Return Oriented Programming ● You can bypass character restrictions (neg) ● No injected code, just rewritten stack ● ESP determines which instructions you execute ● Automated by tools (ropeme, ROPGadget) # execve /bin/sh bindport 8080 generated by RopGadget v3.3 p += pack("<I", 0x08050dda) # pop %edx | ret p += pack("<I", 0x080cd6a0) # @ .data p += pack("<I", 0x080a49f6) # pop %eax | ret p += "//us" p += pack("<I", 0x080796ed) # mov %eax,(%edx) | ret ...          www.nethemba.com       
  • 18. Return Oriented Programming ● We can build the custom stack at fixed location  (bypass ASLR) ● .data, .bss (readelf) ● Multi­stage exploit ● GOT entry overwriting offset = execve() ­ printf() execve() = printf() + offsef ● Countermeasure: Position  Independent Executable (PIE)          www.nethemba.com       
  • 19. Metasploit ● msfpescan, msfelfscan, msfmachscan ● irb, framework for exploits development ● tools/ (memdump, metasm_shell,  pattern_create.rb, pattern_offset.rb,  nasm_shell) ● mixins          www.nethemba.com       
  • 20. Immunity Debugger ● 'mona' (successor of pvefindaddr) ● skeleton for metasploit exploit can by generated  with Immunity Debugger (mona plugin)          www.nethemba.com       
  • 21. Radare ● Reverse engineering framework, *nix­style,  multiplatform ● 11/06/2009 Phrack #66, Manual Binary  Mangling With Radare radare: the entrypoint for everything :) rahash: block based hashing utility radiff: multiple binary diffing algorithms rabin:  extract information from binaries rasc:   shellcode construction helper rasm:   commandline assembler/disassembler rax:    inline multiple base converter  xrefs:  blind search for relative code references        www.nethemba.com       
  • 22. Wargames ● http://overthewire.org  ● http://smashthestack.org          www.nethemba.com       
  • 23. References ● http://www.radare.org/get/radare.pdf ● https://www.metasploit.com          www.nethemba.com       
  • 24. Any questions? Thank you for listening Norbert Szetei, CEH          www.nethemba.com