从admin到system

在渗透测试中,某些情况下需要用到system权限,例如操作注册表 HKEY_LOCAL_MACHINE\SAM\SAM,或者本地测试时需要system权限

前提

已经获得系统的管理员权限(administrator)

参考链接:

https://3gstudent.github.io/3gstudent.github.io/%E6%B8%97%E9%80%8F%E6%8A%80%E5%B7%A7-%E4%BB%8EAdmin%E6%9D%83%E9%99%90%E5%88%87%E6%8D%A2%E5%88%B0System%E6%9D%83%E9%99%90/

https://blog.xpnsec.com/becoming-system/

目录

  • 通过创建服务获得System权限的方法
  • 利用MSIExec获得System权限的方法
  • 利用token复制获得System权限的方法
  • 利用Capcom.sys获得System权限的方法

创建服务的方法

SC

sc create testServ binPath= "cmd /c start" type= own type= interact
sc start testServ
  • 适用于XP
  • win7、win8不好用

计划任务

  • at (高版本被弃用)
at 11:06 /interactive calc

  • schtasks
# 创建服务
schtasks /Create /TN testServ /SC DAILY /ST 11:10 /TR calc.exe /RU SYSTEM
# 查看服务状态
schtasks /Query /TN testServ
# 删除服务:
schtasks /Delete /TN testServ /F

利用工具 psExec

下载地址 https://docs.microsoft.com/en-gb/sysinternals/downloads/psexec

使用psexec会创建 PSEXESVC 服务(测试的时候没找到这个服务),产生日志Event 4697、Event 7045、Event 4624和Event 4652

以system权限启动:

psexec.exe -accepteula -s -d notepad.exe

默认情况下,system权限的进程不会在用户桌面显示,如果需要显示进程界面,可以加/i参数,命令如下:

psexec.exe -accepteula -s -i -d notepad.exe

参数解释

  • -accepteula 隐藏psexec第一次运行时弹出的提示是否许可执行的窗口
  • -s system权限运行
  • -i 交互式
  • -d 执行命令后返回,不等待命令结束

其他的

https://3gstudent.github.io/3gstudent.github.io/%E6%B8%97%E9%80%8F%E6%8A%80%E5%B7%A7-%E4%BB%8EAdmin%E6%9D%83%E9%99%90%E5%88%87%E6%8D%A2%E5%88%B0System%E6%9D%83%E9%99%90/

cat的一个缺陷

说明

  • cat有一个缺陷,如果内容中存在 \r 回车符,那么在cat直接查看的时候会首先输出\r后的内容,如果\r后的内容长度小于 \r 前的内容长度,那么就会输出 \r 后的内容在加上 \r 前的长度差的后几位。

  • 利用这个可以隐藏在一些脚本里面,比如 crontab, 直接 cat file 的查看方式会让运维不能发现问题。但是可以通过 vim less 查看到。

举例

看了上面的说明,可能还是不是很清楚,举个例子说明一下就很明白了。

# 示例代码
with open("result.sh", "w") as f:
    hiding_content = "1234567"
    output = hiding_content + "\r11111"    
    f.write(output)

image-20210714170215311

会先输出 \r 后的 11111 ,由于 len(""1234567"") - len("11111)" = 2 ,所有最后会输出 1234567 的最后两位

是这样吗?

实操

因为 cat 输出空文件和输出空格,肉眼看起来是一样的,所以可以利用空格来隐藏我们要执行的命令

空格和空文件

1. 直接隐藏

with open("result.sh", "w") as f:
    hiding_content = "echo I am hidden content"
    output = hiding_content + "\r" + " " * len(hiding_content)
    f.write(output)

直接隐藏

2. 隐藏在正常的脚本里面

original_content = "echo I am normal content"
with open("result.sh", "w") as f:
    hiding_content = "echo I am hidden content;"
    output = hiding_content + "\r" + original_content + " " * len(hiding_content)
    f.write(output)

隐藏到其他文件

总结

只要是可能会用cat看的地方,都可以做一下手脚,结合权限维持还不错。

有些说得不太准确的地方,望大佬们指正。

Copyright © d4m1ts 2023 all right reserved,powered by Gitbook该文章修订时间: 2022-01-08 18:30:32

results matching ""

    No results matching ""