本帖最后由 2198114498 于 2024-12-31 12:42 编辑
感谢4楼flashercs完美解决
经过测试,A中start必须提供完整路径或者B中使用%~s0才行。
也是因为一知半解,也是抄作业没抄明白,曾经用下面第一种提权,后来想添加参数换用REG QUERY "HKU\S-1-5-19">NUL 2>&1判断,
已经想不起当时在哪抄的有没有%~s0,可能改的过程没注意改没了,现在重新搜到第二种,才注意到都有%~s0
%1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&exit
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
以下是原问题:
找到的提权代码都是无参的
请教各位大神,
1、如何支持任意数量参数,特别是参数带双引号的
2、从A批处理start运行B批处理,如果参数包含双引号,则B批处理提权后闪退
谢谢!
下面是我自己写的测试代码,B可以实现自运行或者拖放运行,
但是A调用B,到了提权代码就会退出,请问该怎么修改,先谢了!
B.bat | @echo on&setlocal enabledelayedexpansion | | cd /d %~dp0 | | echo 0=%0 | | echo *=%* | | echo 1=%1 | | echo 2=%2 | | echo 3=%3 | | echo 4=%4 | | echo 5=%5 | | echo 6=%6 | | echo 7=%7 | | echo 8=%8 | | echo 9=%9 | | pause | | if not "%~2"=="" set args=%*&goto :@a | | set args=%* "abc" "1 23" 4 5 | | | | :@a | | set args=%args:"=""% | | REG QUERY "HKU\S-1-5-19">NUL 2>&1||mshta vbscript:createobject("shell.application").shellexecute("cmd.exe","/c """"%~0"" %args%""",,"runas",1)(window.close)&&pause&&goto :eof | | mshta vbscript:Execute("msgbox(""文件不存在: ""):close") | | pause&goto :eofCOPY |
A.bat | cd /d %~dp0 | | set args=1 2 3 4 5 "6 a" "b 7" | | start "B" cmd /c ""B.bat" %args%"COPY |
|