Thank you for wandering on to this page.
I hope you are able to gather some useful and uplifting information and words to uplift you for a minute, a day, a moment...be sure to leave your own words of encouragement!!

    The Word: C++ Std::String Buffer Overflow And Integer Overflow

    http://upliftingpresence.blogspot.com

    Interators are usually implemented using signed integers like the typical "for (int i=0; ..." and in fact is the type used indexing "cstr[i]", most of methods use the signed int, int by default is signed.
    Nevertheless, the "std::string::operator[]" index is size_t which is unsigned, and so does size(), and same happens with vectors.
    Besides the operator[] lack of negative index control, I will explain this later.

    Do the compilers doesn't warn about this?


    If his code got a large input it would index a negative numer, let see g++ and clang++ warnings:



    No warnings so many bugs out there...

    In order to reproduce the crash we can load a big string or vector from file, for example:


    I've implemented a loading function, getting the file size with tellg() and malloc to allocate the buffer, then in this case used as a string.
    Let see how the compiler write asm code based on this c++ code.



    So the string constructor, getting size and adding -2 is clear. Then come the operator<< to concat the strings.
    Then we see the operator[] when it will crash with the negative index.
    In assembly is more clear, it will call operator[] to get the value, and there will hapen the magic dereference happens. The operator[] will end up returning an invalid address that will crash at [RAX]



    In gdb the operator[] is a  allq  0x555555555180 <_znst7__cxx1112basic_stringicst11char_traitsicesaiceeixem plt="">

    (gdb) i r rsi
    rsi            0xfffffffffffefffe  -65538


    The implmementation of operator ins in those functions below:

    (gdb) bt
    #0  0x00007ffff7feebf3 in strcmp () from /lib64/ld-linux-x86-64.so.2
    #1  0x00007ffff7fdc9a5 in check_match () from /lib64/ld-linux-x86-64.so.2
    #2  0x00007ffff7fdce7b in do_lookup_x () from /lib64/ld-linux-x86-64.so.2
    #3  0x00007ffff7fdd739 in _dl_lookup_symbol_x () from /lib64/ld-linux-x86-64.so.2
    #4  0x00007ffff7fe1eb7 in _dl_fixup () from /lib64/ld-linux-x86-64.so.2
    #5  0x00007ffff7fe88ee in _dl_runtime_resolve_xsavec () from /lib64/ld-linux-x86-64.so.2
    #6  0x00005555555554b3 in main (argc=2, argv=0x7fffffffe118) at main.cpp:29

    Then crashes on the MOVZX EAX, byte ptr [RAX]

    Program received signal SIGSEGV, Segmentation fault.
    0x00005555555554b3 in main (argc=2, argv=0x7fffffffe118) at main.cpp:29
    29     cout << "penultimate byte is " << hex << s[i] << endl;
    (gdb)


    What about negative indexing in std::string::operator[] ?
    It's exploitable!

    In a C char array is known that having control of the index, we can address memory.
    Let's see what happens with C++ strings:






    The operator[] function call returns the address of string plus 10, and yes, we can do abitrary writes.



    Note that gdb displays by default with at&t asm format wich the operands are in oposite order:


    And having a string that is in the stack, controlling the index we can perform a write on the stack.



    To make sure we are writing outside the string, I'm gonna do 3 writes:


     See below the command "i r rax" to view the address where the write will be performed.


    The beginning of the std::string object is 0x7fffffffde50.
    Write -10 writes before the string 0x7fffffffde46.
    And write -100 segfaults because is writting in non paged address.



    So, C++ std::string probably is not vulnerable to buffer overflow based in concatenation, but the std::string::operator[] lack of negative indexing control and this could create vulnerable and exploitable situations, some times caused by a signed used of the unsigned std::string.size()










    Related articles


    1. Hacker Tools List
    2. Hack And Tools
    3. Pentest Tools For Mac
    4. Nsa Hack Tools Download
    5. Hacking Tools For Games
    6. Hackers Toolbox
    7. Hack Tools
    8. Hacking Tools Mac
    9. Tools 4 Hack
    10. Hack Tools For Pc
    11. Pentest Tools Website Vulnerability
    12. Hacker Security Tools
    13. Pentest Tools Online
    14. Hacking Tools 2020
    15. Best Hacking Tools 2020
    16. Hacker Tools Github
    17. Underground Hacker Sites
    18. Hacking Tools Online
    19. Pentest Tools Alternative
    20. Pentest Tools Website
    21. Pentest Tools Bluekeep
    22. Hacker Hardware Tools
    23. Hacker Tool Kit
    24. Best Pentesting Tools 2018
    25. Hacking Tools Free Download
    26. Underground Hacker Sites
    27. Pentest Tools Alternative
    28. Hacker Tools Software
    29. Hacking Tools Windows 10
    30. Hacking Tools
    31. Hacking Tools For Windows 7
    32. Tools 4 Hack
    33. New Hacker Tools
    34. Hak5 Tools
    35. Hacker Tools Online
    36. How To Hack
    37. Pentest Tools Website Vulnerability
    38. Hacker Tools 2019
    39. Pentest Tools List
    40. Android Hack Tools Github
    41. Hacker Tools For Pc
    42. Hacking Tools For Pc
    43. Hacker Tools For Mac
    44. Hacker Tools
    45. Hacking Tools Software
    46. Hacker Tools 2019
    47. Physical Pentest Tools
    48. Hack Tool Apk
    49. Hacking Tools Kit
    50. Hacking Tools 2020
    51. Hack Apps
    52. What Is Hacking Tools
    53. Best Pentesting Tools 2018
    54. Hack Rom Tools
    55. Hack Tools
    56. Pentest Tools Windows
    57. Pentest Tools Bluekeep
    58. Pentest Tools Url Fuzzer
    59. Hacker Tools Windows
    60. Hack Tools For Games
    61. Hacking Tools For Games
    62. Hack And Tools
    63. Hacking Tools Kit
    64. Hack App
    65. Pentest Tools Free
    66. Tools For Hacker
    67. Pentest Tools Windows
    68. Hacking Tools For Windows 7
    69. What Are Hacking Tools
    70. Hackers Toolbox
    71. Pentest Tools Alternative

    0 Comments:

    blogger templates | Make Money Online