winexe 在windows 8.1和windows Server 2012 R2執行報錯的解決方案
概述
報錯:
ERROR: Cannot open control pipe - NT_STATUS_INVALID_PARAMETER
原因:
在對程式碼進行了大量的研究和黑客攻擊及閱讀大量網站甚至與
MS
討論主題之後,問題的根本原因是微軟已經從Windows 8.1
和Windows Server 2012 R2
中刪除了SMB1.0
,請參閱:http//technet.microsoft.com/en-us/library/dn303411.aspx,以獲取已刪除的完整列表。在花了儘可能多的時間(確保不少於幾天)研究winexe
程式碼之後,似乎winexe
使用smbclient
的SMB1.0
庫。
解決辦法:編譯winexe-1.1
yum install \
gcc \
perl \
mingw-binutils-generic \
mingw-filesystem-base \
mingw32-binutils \
mingw32-cpp \
mingw32-crt \
mingw32-filesystem \
mingw32-gcc \
mingw32-headers \
mingw64-binutils \
mingw64-cpp \
mingw64-crt \
mingw64-filesystem \
mingw64-gcc \
mingw64-headers \
libcom_err-devel \
libacl-devel \
gnutls-devel \
openldap-devel \
popt-devel \
zlib-devel \
zlib-static \
glibc-devel \
glibc-static \
python-devel -y
yum remove \
libbsd-devel
git clone https://github.com/opinkerfi/winexe-waf winexe-waf
cd winexe-waf
git clone git://git.samba.org/samba.git samba
cd samba
git reset --hard a6bda1f2bc85779feb9680bc74821da5ccd401c5
cd ..
sed -i "s/lib='dl'$/lib='dl gnutls'/" source/wscript_build
cd source
./waf --samba-dir=../samba configure build
build/winexe-static --help
下面是問題的翻譯,有點長,刪除了一些日誌輸出的內容,感興趣可以去看原帖:
問題
由於Windows 8.1
和windows Server 2012 R2
的改動,導致部分版本的windows機器執行 winexe
命令的時候出現錯誤:
ERROR: Cannot open control pipe - NT_STATUS_INVALID_PARAMETER
我們在Windows 8.1 Bule
之前的版本上執行winexe
的時候,一切都是正常的
當用同樣的命令執行-d 11
的時候,最後幾行如下:
Shutdown SMB signing
SMB Signing is not negotiated by the peer
Starting GENSEC mechanism spnego
Starting GENSEC submechanism ntlmssp
Got challenge flags:
Got NTLMSSP neg_flags=0x628a8215
NTLMSSP_NEGOTIATE_UNICODE
NTLMSSP_REQUEST_TARGET
NTLMSSP_NEGOTIATE_SIGN
NTLMSSP_NEGOTIATE_NTLM
NTLMSSP_NEGOTIATE_ALWAYS_SIGN
NTLMSSP_NEGOTIATE_NTLM2
NTLMSSP_NEGOTIATE_TARGET_INFO
NTLMSSP_NEGOTIATE_128
NTLMSSP_NEGOTIATE_KEY_EXCH
NTLMSSP challenge set by NTLM2
challenge is:
[0000] 21 20 90 DB A7 BC 3B 8D ! ....;.
NTLMSSP: Set final flags:
Got NTLMSSP neg_flags=0x60088215
NTLMSSP_NEGOTIATE_UNICODE
NTLMSSP_REQUEST_TARGET
NTLMSSP_NEGOTIATE_SIGN
NTLMSSP_NEGOTIATE_NTLM
NTLMSSP_NEGOTIATE_ALWAYS_SIGN
NTLMSSP_NEGOTIATE_NTLM2
NTLMSSP_NEGOTIATE_128
NTLMSSP_NEGOTIATE_KEY_EXCH
SMB Signing is not negotiated by the peer
IN: async_open(\pipe\ahexec, 2)
IN: async_open_recv
ERROR: smb_raw_open_recv - NT_STATUS_INVALID_PARAMETER
ERROR: on_ctrl_pipe_error - NT_STATUS_INVALID_PARAMETER
ERROR: Cannot open control pipe - NT_STATUS_INVALID_PARAMETER
winexesvc
服務已經安裝,並且已經執行
注意:我們必須在我們自己的程式碼(C#)中為任何EXE新增兩行,以使以前的出站通訊工作在即使在Windows 8中工作正常的地方:
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
想問大家有沒有遇到類似的情況
討論
我確信我在Windows 8.1和Windows Server 2012 R2上遇到同樣的問題
我嘗試著下載和編譯windows service,我確信這裡是需要做出改變的。我開啟了debug。我獲取了一下測試的輸出((Windows Blue / Server 2012 R2):
----Begin Bad
winexesvc: StartServiceCtrlDispatcher 126
winexesvc: RegisterServiceCtrlHandler
winexesvc: Returning the Main Thread
server_loop: alive
server_loop: CreatePipesSA done
server_loop: Create Pipe
server_loop: Connect Pipe
server_loop: Connect Pipe(0) pending
----End Bad
為了做對比,我在Windows Server 2008 R2上用winexesvc.exe運行同樣的命令,debug日誌為:
----Begin Good
winexesvc: StartServiceCtrlDispatcher 126
winexesvc: StartServiceCtrlDispatcher (1063)
winexesvc: StartServiceCtrlDispatcher 126
winexesvc: RegisterServiceCtrlHandler
server_loop: alive
winexesvc: Returning the Main Thread
server_loop: CreatePipesSA done
server_loop: Create Pipe
server_loop: Connect Pipe
server_loop: Connect Pipe(0) pending
server_loop: CreateThread
server_loop: Thread created
server_loop: Create Pipe
server_loop: Connect Pipe
server_loop: Connect Pipe(0) pending
Retrieved line: "get version"
Retrieved line: "run ipconfig"
WaitForMultipleObjects=1
server_loop: CreateThread
server_loop: Thread created
server_loop: Create Pipe
server_loop: Connect Pipe
server_loop: Connect Pipe(0) pending
Retrieved line: "get version"
Retrieved line: "run ipconfig"
WaitForMultipleObjects=1
----End Good
ahajda- 2013-07-12
看上去好像是winexe和Windows 8.1之間的問題,winexesvc工作似乎是正常的,可以檢查下smbclient工作是正常的嗎?用相同的憑據執行它並嘗試連線到share// host / admin $,並使用-d 99選項,貼出執行日誌。
需要指出的是在Windows Blue上進行winexe連線, 認證和安裝winexesvc都是正常的,直到嘗試用winexe接收ahexec管道里面終止的東西。
下面是請求執行結果:(IPs和名稱是變化但不是連續的)
smbclient執行在Windows Blue 8.1,訪問ADMIN $(沒有問題?)
----Begin Blue
INFO: Current debug levels:
all: 99
tdb: 99
printdrivers: 99
lanman: 99
smb: 99
rpc_parse: 99
rpc_srv: 99
rpc_cli: 99
passdb: 99
sam: 99
......(省略)
smb: >
----End Blue
命令ls輸出的結果跟期望的是一致的(c:\windows contents)
smbclient執行在Windows Blue 8.1 R2,訪問ADMIN $(沒有問題?)
----Begin 2008
INFO: Current debug levels:
all: 99
tdb: 99
printdrivers: 99
lanman: 99
smb: 99
rpc_parse: 99
rpc_srv: 99
......(省略)
Domain=[MYDOMAIN] OS=[Windows Server 2008 R2 Enterprise 7601 Service Pack 1] Server=[Windows Server 2008 R2 Enterprise 6.1]
session setup ok
s3_event: Added timed event "tevent_req_timedout": 0x1b02698
s3_event: Schedule immediate event "tevent_queue_immediate_trigger": 0x1ae12f0
s3_event: Run immediate event "tevent_queue_immediate_trigger": 0x1ae12f0
s3_event: Destroying timer event 0x1b02698 "tevent_req_timedout"
tconx ok
smb: >
----End 2008
我運行了一些自定義的命令,可以讀取和寫入遠端命名管道,並且可以寫入和讀取ahexec管道。 PSExec也適用於8.1。
在對程式碼進行了大量的研究和黑客攻擊及閱讀大量網站甚至與MS討論主題之後,問題的根本原因是微軟已經從Windows 8.1和Windows Server 2012 R2中刪除了SMB1.0,請參閱:http//technet.microsoft.com/en-us/library/dn303411.aspx,以獲取已刪除的完整列表。在花了儘可能多的時間(確保不少於幾天)研究winexe程式碼之後,似乎winexe使用smbclient的SMB1.0庫。對於有意的向後相容性,我們自己使用最低常見的Demoninator來確保儘可能多的人可以使用我的程式碼。
假如正如我所說的,如果SMB1不可用時,如果它至少沒有使用SMB2,那麼winexe或winexe-waf(昨天建造)將會碰壁。 對於這一點,我希望你能反駁我,並提出其他的意見。smbclient與套接字通訊沒有問題。我假設可執行檔案自動嘗試使用較新的SMB版本......
Mark - 2013-07-20
在shell裡面執行:
cat </dev/null|winexe
這樣是有效的,但是為什麼。。。我也不知道
我嘗試了你的方法,一樣的報錯:
ERROR: smb_raw_open_recv - NT_STATUS_INVALID_PARAMETER
ERROR: on_ctrl_pipe_error - NT_STATUS_INVALID_PARAMETER
ERROR: Cannot open control pipe - NT_STATUS_INVALID_PARAMETER
我可以告訴你在smb_raw_open_recv中呼叫smbcli_request_is_error(req)時發生的錯誤。顯然req-> state是smbcli_request_receive(req)執行是沒問題的。
Mark - 2013-07-20
我在shell指令碼中使用它(cat </ dev / null | winexe)
preusercmd.sh
cat </ dev / null | $ WINEXE --uninstall --interactive = 0 -U $ UNAME -W $ WRKGRP
--password = $ PWD // $ BOX'cmd.exe /cc:backuppcpre-exec.cmd '
這對我有用
我按照你的建議嘗試了這種方式,但是任然用同樣的報錯,您是否針Windows 8.1預覽版和/或,Windows Server 2012 R2預覽版本執行這些命令(我使用的是近乎最新版本)。
ahajda - 2013-07-21
我認為Marks的建議是針對winexe沒有使用檔案重定向的問題。關於你對smb/smb2的發現,我懷疑它是主要原因,但是我想我將無法在8月下旬完成這項工作。無論如何,感謝你的研究,應該對我的補丁開發有幫助。
我可以等待一個月或者更久。如果我可以找到一些關於samba的優秀文件(而且是很有可能),我可以自己解決這個問題。不幸的是,這是我第一次接觸到smba的內部運作。似乎缺乏關於它的開發者資訊。我敢肯定我只是遺漏了一些明顯的東西。
祝福你
William M. Rawls
http://my.william-rawls.info
嘿,你好,我的老闆讓我問你winexe對win 8.1的支援工作,在8月能否達到。
祝福你
William M. Rawls
http://my.william-rawls.info
ahajda - 2013-08-19
是的,我希望這個周能夠解決
Regards
Andrzej
ahajda - 2013-08-22
我剛剛上傳瞭解決這個問題的補丁,至少在我的機器上是解決了。請在儘可能多的機器上測試它。
補丁還有用嗎?
補丁已經被應用到當前的程式碼。你可以獲取最新的程式碼:
git clone git://git.code.sf.net/p/winexe/winexe-waf winexe-winexe-waf
從原始碼編譯之後,就可以得到winexe1.1
1. status: open --> closed-fixed
2. Priority: medium --> high
請按照你下的步驟操作,必須允許Netlogon通過防火牆來更改防火牆規則以使其工作,然後在Windows XP 32,7 32,7 64,8 32,8 64,Windows Blue preview,Server 2008 R2,Server 2012和Server 2012 R2預覽一切正常。
VM XP無法開啟連線(psexec工作)
更改防火牆檔案共享範圍重新測試成功!
VM 7 32無法開啟連線(psexec工作)
未阻止NetLogon重新測試成功
VM 7 64無法開啟連線(psexec工作)
未阻止NetLogon重新測試成功
VM 8 32無法開啟連線(psexec工作)
未阻止NetLogon重新測試成功
VM 8 64幸運防火牆搞砸了,所以它沒有遇到同樣的問題
VM Blue無法開啟連線(psexec工作)
Unblocked NetLogon重新測試成功
VM 2008通過
HV 2008通過
HV 2012通過
HV 12R2通過
雖然跨作業系統的測試不是很廣泛,但它仍然表明基礎知識仍然適用於所有版本。
1.我們應該一直這樣測試winexe。你怎麼做呢?
2.為什麼psexec不起作用而且沒有winexe(沒有防火牆更改)?
非常感謝你在這方面所做的工作。
1. 我有一個虛擬機器管理程式(在我的情況下是Hyper-V)已經設定了一個虛擬機器,每個作業系統都用於測試我為我們的產品編寫的程式碼。因此,很容易啟動ubuntu和其他VM並對它們執行相同的winexe命令。
2.我會說因為psexec沒有像winexe 1.1那樣傳送身份驗證。我必須仔細檢查這一點,但winexe 1.0也適用於所有作業系統,除了新的作業系統讓我相信winexe 1.1的方式需要netlogon服務,其中1.0沒有......但這只是猜想。
如何在Linux上工作...我在Windows8.1上連線時獲取了msg NT_STATUS_INVALID_PARAMETER我試圖編譯完整的源但不能在ubuntu上工作。winexe-1.0.0的任何補丁或新的winexe-1.1何時釋出
1.winexe-1.0.0的任何補丁
抱歉,沒有。
2.什麼時候新的winexe-1.1正在釋出
請從原始碼(即,從“當前”即“winexe-waf”git儲存庫)構建winexe 1.1-prerelease,並使用它直到winexe正式釋出。
相關推薦
winexe 在windows 8.1和windows Server 2012 R2執行報錯的解決方案
概述 報錯: ERROR: Cannot open control pipe - NT_STATUS_INVALID_PARAMETER 原因: 在對程式碼進行了大量的研究和黑客攻擊及閱讀大量網站甚至與MS討論主題之後,問題的根本原因是微軟已經從
Windows Server 2012 R2、Windows Server 2012、Windows 8.1 或 Windows 8 上無法啟用 Microsoft .NET Framework 3.
無法下載原始檔。 使用“源”選項指定還原該功能所需的檔案的位置。有關指定源位置的詳細資訊,請參閱 http://go.microsoft.com/fwlink/?LinkId=243077。 DISM 日誌檔案可在 C:\Windows\Logs\DISM\dism.log 中找到 Windows 無法完成
mac tar命令壓縮後上傳到windows虛擬機器解壓報錯解決方案
在解壓tar.gz檔案的時候報錯 [[email protected] Downloads]$ tar -zxvf clion-141.351.4.tar.gz gzip: stdin: not in gzip format tar: Child returned status
安裝python庫時windows error5 報錯解決方案
python安裝庫時,有時候會報錯windows error 5,可以嘗試關閉所有使用python的編輯器、檔案等,然後重新pip安裝,如果還是不行,可以將報錯最下層檔案刪除即可(如果不放心可以將該檔案先備份),記錄之~ windows error錯誤程式碼:
思科和華為交換機loopback-detection引起的報錯解決方案
思科 華為 loopback-detection 今天菜雞哥哥到核心交換發現一堆報錯,如下圖思科對此官方的解釋是:Error Message SW_MATM-4-MACFLAP_NOTIF: Host [enet] in [chars] [dec] is flapping between port
MySQL報錯解決方案:2013-Lost connection server at 'waiti
今天上課的時候,在搭建完MySQL測試環境中出現的問題,整理如下: 問題描述:搭建完MySQL,用遠端連線工具(Navicat)連線時報錯: 2013-Lost connection to MySQL server at 'waiting for intial communication packet',
MySQL報錯解決方案:2013-Lost connection to MySQL server
安裝 今天 線下 ice 開啟 網絡 重新 round 報名 今天上課的時候,在搭建完MySQL測試環境中出現的問題,整理如下: 問題描述:搭建完MySQL,用遠程連接工具(Navicat)連接時報錯: 2013-Lost connection to MySQL serve
MySQL報錯解決方案:2013-Lost connection server at ‘waiti
客戶端 目錄 mark waiting 方式 conn mysql開啟 咨詢 mys 今天上課的時候,在搭建完MySQL測試環境中出現的問題,整理如下: 問題描述:搭建完MySQL,用遠程連接工具(Navicat)連接時報錯: 2013-Lost connection to
Django需求分析和model設計過程中系列報錯解決方法
報錯一:django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_init 進入執行介面後,執行遷移時報錯: django.db.migrations.exce
java.sql.SQLException: The server time zone value '???ú±ê×??±??'的報錯解決方案
問題描述: 利用JDBC連線資料時,會報錯誤具:java.sql.SQLException: The server time zone value '???ú±ê×??±??' is unrecognized or represents more than one time zone. Yo
SQL Server資料庫複製嚮導報錯解決
今天利用資料庫複製嚮導(Copy Database Wizard)將2012版本的資料庫複製到2014時,遇到了一些錯誤,並最終解決,特此記錄: 資料庫相容級別的有效值為 100、110 或 120 源資料庫相容性級別太低,改高一點即可 物件名XXX無
WIN7旗艦版下安裝SQL SERVER 2008安裝報錯解決方案
在win7環境下,是完全可以解決 SQL Server 2008相容性問題的。我在第一次安裝時,遇到了幾乎很多人安裝過程中都會出現的問題。只好解除安裝了重新安裝,第二次設定了一系列的東西,完全通過,安裝成功!現就安裝中遇到的問題和大家分享一下,以供參考!
Unity3D —— 報錯解決方案和常用功能集
1.在Dictionary迭代器進行修改: var _key = index2factionDic.Keys.GetEnumerator();
iOS7.1 編譯報錯 解決方案 體會
OS升級到 iOS 7.1 了 ,開發人員必須與時俱進。果斷下載更新了xcode5.1版本 ,試運行了一下已上線的應用,哇 報錯了!好頭疼 貼下報錯地方: 都是關於第三方類庫報的錯 比如parse、shareSDK Undefined symbols for
AFNetworking升級至3.1.0後,原有的方法報錯解決辦法。
為了配合蘋果官方的ipv6的事,有很多開發人員都把AFNetworking升級了(網路請求自己公司做封裝的除外),但是升級後報錯一堆。怎麼辦?我的笨辦法是:一個一個修改。 1.首先:沒有了AFHTTPRequestOperationManager這個類,被AF
白話windows server 2012 r2和windows 7創建ad域與配置(安全版)
關閉 logo 打不開 cmd 2012 r2 以太網 子網 int 180天 文章的可讀性非常重要,這裏提供的是一鍵式操作指南,即使之前完全沒有接觸,也可以配置完成。 ad域的創建是為了便於公司的集中化管理,提高公司運作效率和安全性。 我的操作環境,本機是kali lin
Windows Server 2012 R2/2016 此工作站和主域間的信任關系失敗
脫域 此工作站和主域間的信任關系失敗 今天給客戶Exchange 服務器出現了脫域的情況,當使用域帳戶登錄時出現了“此工作站和主域間的信任關系失敗”的情況。造成這種的可能原因: 域內存在了多臺SID一樣的計算機; 計算機對象在AD中意外刪除; 客戶端的帳戶密碼更新失敗; 時間超過5分鐘; AD復制問
windows server 2012 r2 App-V 5.1 安裝部署
aec 擴展 另一個 系統 安裝程序 host 上傳 local 服務器角色 準備軟件 1.sqlserver2014 2.mdop2015光盤-----軟件下載地址:ed2k://|file|mu_microsoft_desktop_optimization_pack
Windows Server 2012 R2 或 2016 無法安裝 .NET Framework 3.5.1解決辦法
問題描述: 使用 Windows Server 2012 R2 或 Windows Server 2016系統,發現在安裝 .NET Framework 3.5.1 時報錯,報錯內容如下圖所示。 原因分析 找不到安裝原始檔。 解決辦法 您
1.初始Windows Server 2012 R2 Hyper-V + 系統安裝詳細
幹啥的?現在企業伺服器都是分開的,比如圖片伺服器,資料庫伺服器,redis伺服器等等,或多或少一個網站都會用到多個伺服器,而伺服器的成本很高,要是動不動採購幾十臺,公司絕對吃不消的,於是虛擬化技術出來了,Vmware用過沒? 一個Vmware裡面很多作業系統,Hyper-v也是這樣的一款虛擬機器。