无忧启动论坛

标题: 自用自动提权批处理模板 [打印本页]

作者: hlowld    时间: 昨天 17:09
标题: 自用自动提权批处理模板
本帖最后由 hlowld 于 2025-12-25 10:06 编辑

@ECHO OFF & PUSHD "%~DP0" & set "titl=f%random%"
reg QUERY "HKU\S-1-5-19" >nul 2>nul && goto :runas
set stat=0 & start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","%*",,"runas",1)(window.close)
::exit
:checktitl
if %stat% equ 2 (exit) else (timeout /t 1 /nobreak >nul & tasklist /v /fi "imagename eq cmd.exe" | findstr /i /c:"管理员:  %titl%" >nul && (if %stat% equ 0 set stat=1) ||(if %stat% equ 1 set stat=2) & goto :checktitl)
:runas
title %titl%


::自动提权批处理模板,适用于启用UAC且mshta和vbs正常的系统,文件名支持汉字字母数字空格和`~!#$)-_+[{]}'.  参数支持汉字字母数字和`~!@#$*()-_+\:'./?  不支持参数被双引号包裹
::如果注释第4行,则自动提权执行结束后才退出,用于start /wait方式被调用,如 start /wait "" "他 `~!#$)-_+[{]}'..cmd" a1 我`~!@#$*()-_+\:'./?  
::以下为提权执行的脚本
echo 入参: %*
reg QUERY "HKU\S-1-5-19"
timeout /t 10 /nobreak >nul


特点见注释
部分流行模板个人印象:
fltmc>nul||mshta vbscript:CreateObject("Shell.Application").ShellExecute("%~dpnx0","%*",,"runas",1)(window.close)&&exit
好像是kkocdko原创的,优秀,很长一段时间都在用
%1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&exit
最巧妙,一行搞定,利用入参注释符,省去了是否有权限的判断,但导致不支持被带参数提权

我见过的所有提权模板,当被start /wait 方式调用时,尝试提权后就会立即执行后续语句,无法等待提权执行结束后才执行后续语句,我这个模板实现了这个功能,当然是可选的,如果不需要这个,取消第4行的注释即可

mshta vbscript:CreateObject("Shell.Application").ShellExecute方式,适用于启用UAC且mshta和vbs正常的系统,在禁用UAC的系统上基本会死循环,除非用较长的脚本来特殊处理。
12.25更新:等待提权执行结束后才执行后续语句的功能不完善,没有将随机的窗口标题传递给提权后的进程,只是提权前和提权后的进程在很短时间内相继运行,获取到的随机数相同,碰巧基于随机数的窗口标题变量相同。
看来还是得用powershell才行。


作者: a66    时间: 昨天 17:19
好方法
作者: erdos47    时间: 昨天 17:29
感谢分享
作者: ynb168c    时间: 昨天 17:47
感谢分享
作者: wn168cn@163.com    时间: 昨天 18:04
支持原创
作者: wu733    时间: 昨天 18:15
非常优秀,支持原创
作者: promrhxq    时间: 昨天 18:18
感谢分享好东东
作者: yyz2191958    时间: 昨天 18:19
看不明白
作者: ewq11111    时间: 昨天 18:23
感谢分享
作者: hhcha    时间: 昨天 18:52
感谢分享!
作者: handsome_xiang    时间: 昨天 19:03
感谢分享!
作者: smile_z    时间: 昨天 19:05
感谢分享
作者: wang1126    时间: 昨天 19:06
谢谢楼主分享
作者: 燕飞龙    时间: 昨天 19:27
感谢分享
作者: cpc    时间: 昨天 20:26
感谢分享
作者: Flame1363    时间: 昨天 21:25
好东西,感谢分享
作者: deuteros_gex    时间: 昨天 22:53
batch提权真是永恒的话题哈……
作者: simonlong    时间: 昨天 22:58
感谢分享
作者: gordonhf    时间: 14 小时前
路过看看
作者: chibuzhu    时间: 14 小时前
感谢分享
作者: ebaqiang    时间: 13 小时前
非常优秀,支持原创
作者: yvhkkss    时间: 6 小时前
感谢分享
作者: 董大    时间: 4 小时前
支持原创,感谢楼主分享!
作者: w7408    时间: 4 小时前
多谢楼主分享
作者: luanqh    时间: 4 小时前
感谢分享
作者: yzw92    时间: 4 小时前
感谢分享
作者: guies    时间: 4 小时前
不知道有沒有萬用的,因為 Windows 11 之後要取消vbs了。
我現在用最多的是這一個。

  1. goto="init" /*

  2. echo Hello world

  3. :"init"
  4. @echo off &title Windows Update &mode 80,10 &color 1f &setlocal &if "%1"=="init" shift &shift &goto :main
  5. reg query "HKEY_USERS\S-1-5-20\Environment" /v temp 1>nul 2>nul && goto :main || echo. &echo  Requesting rights..
  6. call cscript /nologo /e:JScript "%~f0" get_rights "%1" & exit */
  7. function get_rights(fn) { var console_init_shift='/c start "init" "'+fn+'"'+' init '+fn+' '+WSH.Arguments(1);
  8.   WSH.CreateObject("Shell.Application").ShellExecute('cmd.exe',console_init_shift,"","runas",1); }
  9. if (WSH.Arguments.length>=1 && WSH.Arguments(0)=="get_rights") get_rights(WSH.ScriptFullName);
复制代码




作者: 风之暇想    时间: 3 小时前
禁用UAC的系统用powershell好像也不行
作者: dxy796    时间: 3 小时前
厉害了,看看
作者: ouanyu    时间: 3 小时前
谢谢分享!!!!!!!!
作者: 什么都不说吧    时间: 2 小时前
本帖最后由 什么都不说吧 于 2025-12-25 11:56 编辑

win10,打齐了补丁之后,如果批处理是存放在比较重要的系统文件夹下面的,你这种提权就会失效。
windows11,打齐了补丁之后,你这个方法直接失效。
算了,我也放出我使用的批处理提权代码,从win7到现在最新的win11 25h2都没有问题:

>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if %errorlevel% NEQ 0 (
    powershell Start-Process -Verb RunAs -FilePath "%0"
    exit /b
)
cd /d "%~dp0"

这个代码是从很多提权代码中最终选出来的,其他提权代码或多或少都有一些问题。

作者: liuyang2025    时间: 2 小时前
谢谢分享,很全面
作者: guong    时间: 1 小时前
谢谢分享!
作者: wwoldok    时间: 1 小时前
学习了,感谢分享
作者: win82    时间: 1 小时前
感谢分享
作者: ruanfen    时间: 11 分钟前
学习收藏了




欢迎光临 无忧启动论坛 (http://bbs.c3.wuyou.net/) Powered by Discuz! X3.3