0x01-渗透测试课前准备(常用工具准备)
环境部署
1. Pycharm
找到python安装目录选中python.exe
2.Kali更新
kali更新慢编辑配置文件vim /etc/apt/sources.list
,注释官方源替换为中科大源#中科大
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
# See https://www.kali.org/docs/general-use/kali-linux-sources-list-repositories/
#deb http://http.kali.org/kali kali-rolling main contrib non-free
# Additional line for source packages
# deb-src http://http.kali.org/kali kali-rolling main contrib non-free
#中科大
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
任务
1.问题
1. mysql数据库错误
PHPstudy中mysql数据库启动按钮显示启动后立即停止
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WG29LQoX-1676794743029)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230213081539103.png)]
进入mysql安装目录C:\phpstudy_pro\Extensions\MySQL5.7.26\bin>
使用命令行进行登录
显示错误
PS C:\phpstudy_pro\Extensions\MySQL5.7.26\bin> .\mysql.exe -uroot -p
Enter password: ****
ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
通过排查mysql服务未开启 进入计算机管理>服务与应用程序>服务>mysql
右击开启服务
PS C:\phpstudy_pro\Extensions\MySQL5.7.26\bin> .\mysql.exe -uroot -p
Enter password: ****
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.26 MySQL Community Server (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WDfU1XPY-1676794743032)(C:\Users\Administrator\Desktop\屏幕截图 2023-02-13 082102.png)]
成功链接到数据库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-baiVzxkv-1676794743033)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230213082344916.png)]
2. Nginx降权运行
┌──(kali㉿kali)-[~]
└─$ nginx
2023/02/15 02:51:40 [warn] 381928#381928: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:1
2023/02/15 02:51:40 [emerg] 381928#381928: mkdir() "/var/lib/nginx/body" failed (13: Permission denied)
启动Nginx提示需要超级用户
- 创建用户
┌──(root㉿kali)-[/home/kali]
└─# adduser inca
Adding user `inca' ...
Adding new group `inca' (1002) ...
Adding new user `inca' (1002) with group `inca (1002)' ...
Creating home directory `/home/inca' ...
Copying files from `/etc/skel' ...
- 切换用户
┌──(root㉿kali)-[/home/kali]
└─# su inca
┌──(inca㉿kali)-[/home/kali]
└─$
- 创建工作目录
┌──(inca㉿kali)-[~]
└─$ mkdir conf logs www
- 复制比要组件
┌──(root㉿kali)-[/etc/nginx]
└─# cp /etc/nginx/mime.types /home/inca/conf/
┌──(root㉿kali)-[/etc/nginx]
└─# cp /etc/nginx/nginx.conf /home/inca/conf/
- 修改文件路径
user inca inca;
worker_processes auto;
pid /home/inca/logs/nginx.pid;
error_log /home/inca/logs/error.log;
include /home/inca/config/*.conf;
events {
worker_connections 768;
# multi_accept on;
}
http {
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
include /home/inca/conf/mime.types;
default_type application/octet-stream;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
access_log /home/inca/logs/access.log;
gzip on;
server {
listen 8080;
server_name localhost;
root /home/inca/www;
location / {
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
access_log /home/inca/logs/access.log;
}
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
- 启动nginx
┌──(inca㉿kali)-[~/conf]
└─$ /usr/sbin/nginx -c /home/inca/conf/nginx.conf
2023/02/15 03:52:12 [warn] 399471#399471: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /home/inca/conf/nginx.conf:1
- Curl请求
┌──(inca㉿kali)-[~/conf]
└─$ curl 10.8.81.193:8080
yks-inca nginx JQ
2.Docke与虚拟机(VMWare VirtualBox等)区别
-
Docker 启动速度相较于虚拟机(VMWare VirtualBox等)更快,Docker 需要更少的资源。
-
在隔离性上,Docker属于进程之间的隔离,隔离性较弱,虚拟机(VMWare VirtualBox等)属于系统级别的隔离
-
Docker容器里的程序直接使用物理机的硬件资源,虚拟机(VMWare VirtualBox等)是通过模拟硬件实现安装操作系统
-
网络区别
- docker有四种模式host模式、none模式、bridge模式、container模式。默认使用bridge模式
- 虚拟机(VMWare VirtualBox等)NAT模式、桥接模式、Host模式
- docker中的bridge模式与虚拟机的NAT模式相似
- docker中的host模式类似于虚拟机的桥接模式但不会分配独立IP地址,使用宿主机的ip和端口
- docker中的container模式,创建的新容器与某个容器共享一个Network workspace
3. 不同版本的开发环境共存
1. 共存方式
通过修改环境变量中的Path
指向位置,path
中多条路径指向不同文件夹下的同名文件系统会以写在前面为优先
实现不同版本开发环境并存通过
- 修改环境变量,使指定版本为当前开发环境
- 修改文件名例如
java8.exe java19.exe
2. 以java8与java19共存为例
添加JAVA_HOME
JAVA8_HOME
JAVA19_HOME
三个环境变量,其中JAVA8_HOME
JAVA19_HOME
路径为对应java版本。JAVA_HOME
存放所需java版本。例如使用JAVA8
时JAVA_HOME
值为 %JAVA8_HOME%
,然后在PATH中添加 %JAVA_HOME%\bin
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nd0sFPYI-1676794743035)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230213091256384.png)]
使用JAVA8时
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OMYIuH9g-1676794743036)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230213090322604.png)]
PS C:\Users\Administrator> java -version
java version "1.8.0_361"
Java(TM) SE Runtime Environment (build 1.8.0_361-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.361-b09, mixed mode)
使用JAVA19时
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AVtzEukv-1676794743037)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230213090440142.png)]
PS C:\Users\Administrator> java -version
java version "19.0.1" 2022-10-18
Java(TM) SE Runtime Environment (build 19.0.1+10-21)
Java HotSpot(TM) 64-Bit Server VM (build 19.0.1+10-21, mixed mode, sharing)
4.LNMP可能存在的问题
1. PHP
-
允许远程或者本地文件包含,导致任意文件读取或者恶意代码执行
- 防御:设置白名单对传入的文件名过滤、过滤危险字符例如…/、设置文件目录仅在该目录搜索文件、关闭危险配置例如allow_url_include、启用PHP安全模式
-
sql注入
- 防御:转义用户的输入或者使用封装好的的语句
-
csrf
- 防御:使用令牌,存储到session、cookie进行比对
-
命令注入
- 防御转义用户输入、过滤关键字、白名单
-
危险函数
例如:
system, passthru, exec, shell_exec, popen, phpinfo, escapeshellarg, escapeshellcmd, proc_close, proc_open
- 防御:开启PHP安全模式、配置
disable_functions
关闭危险函数
- 防御:开启PHP安全模式、配置
-
PHP版本信息在header泄露
- 防御:配置
expose_php = off
- 防御:配置
2. MYSQL
- 匿名账号登录
- 防御:删除数据库创建是建立的匿名账号
- root默认空密码
- 防御:修改root账号的空密码
- 弱口令
- 防御:设置较为复杂的口令
- user表权限
- 设置user表的除了root外用户无权
- 远程访问
- 防御:非必要关闭远程访问、限制固定IP访问
3. Nginx
-
前代版本中存在的各类漏洞
- 防御:更新Nginx版本或者安装厂商补丁
-
错误页面展示版本号
- 防御:在nginx.conf中禁用server_token
-
目录浏览
- 防御:禁止目录浏览 配置
autoindex off
- 防御:禁止目录浏览 配置
-
nginx 降权运行
- 使用nobody 运行nginx
-
目录执行权限
-
防御:限制目录执行权限在ngin.conf中的server标签配置
location ~ /(attachments|upload)/.*\.(php|php5)?$ { deny all; }
-
4. Linux
-
弱口令
- 防御:设置账号密码较为复杂,较为复杂的密码策略
-
密码策略
-
修改文件/etc/login.defs
PASS_MAX_DAYS 90 密码最长有效期 PASS_MIN_DAYS 10 密码修改之间最小的天数 PASS_MIN_LEN 8 密码长度 PASS_WARN_AGE 7 口令失效前多少天开始通知用户修改密码
-
-
用户登录
-
防御:禁止root用户远程登录配置
/etc/ssh/sshd_config
、更改SSH端口PermitRootLogin no
-
-
对外端口
- 防御:关闭不必要的端口
-
账户保存历史命令条数
-
编辑/etc/profile
HISTSIZE=1000 TMOUT=600
-
-
开启用户登录和操作日志
- 编辑
/etc/profile
history USER=`whoami` USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'` if [ "$USER_IP" = "" ]; then USER_IP=`hostname` fi if [ ! -d /var/log/history ]; then mkdir /var/log/history chmod 777 /var/log/history fi if [ ! -d /var/log/history/${LOGNAME} ]; then mkdir /var/log/history/${LOGNAME} chmod 300 /var/log/history/${LOGNAME} fi export HISTSIZE=4096 DT=`date +"%Y%m%d_%H:%M:%S"` export HISTFILE="/var/log/history/${LOGNAME}/${USER}@${USER_IP}_$DT" chmod 600 /var/log/history/${LOGNAME}/*history* 2>/dev/null
- 编辑
5.常用浏览器插件
-
Wappalyzer
- 网站技术栈分析包括:平台建构、网站环境、服务器配置环境、JS框架、编程语言等
-
Proxy SwitchOmega
- 快捷管理和切换代理
-
Hackbar
- 可以测试SQL 注入和 XSS 攻击,能够快速对字符串进行各种编码。
-
CrytoFox
- 加密和解密的工具
-
DNS Checker
- 提供网站iip、地理位置、服务提供商的信息
-
HTTP Header Live
- 修改cookie,查看header
-
Firebug
- 火狐下扩展能调试所有网站语言
-
User-Agent Switcher
- 用于改变浏览器 User-Agent
-
Cookie Hacker
- cookie注入工具
-
Hack Tools
- 针对 Web 应用程序渗透测试的 Web 扩展,其中包含了大量测试工具,比如说 XSS Payload 和反向 Shell 等
-
Penetration Testing Kit
- 分析客户端 / 服务器端技术并检查任何第三方库以获取现有的 CVE
-
Shodan
- 自动探测网站所属的国家、城市,谁是这个网站IP的主人以及其开放的服务和端口,包括FTP、DNS、SSH或者其他非主流服务
-
JSONView
- 格式化 JSON 数据,可以增加 JSON 的可读性
-
FindSomething
- 在网页的html源码或js代码中提取信息,包括可能请求的资源、接口的url,可能请求的ip和域名,泄漏的证件号、手机号、邮箱等信息
-
OSVDB
- 开放源码的漏洞数据库检索
-
XSS Me
- XSS测试扩展
-
FOFA Pro View
- 网站的托管位置(国家、城市)、IP 的所有者 以及开放的其他服务/端口
6.终端工具共性
终端工具运行命令一般由三部分组成:命令对象、修饰命令对象、命令内容
。
例如 sql -u URL
,修饰命令对象的这部分有时可有可无。
快速上手终端工具例如sqlmap ,使用sqlmap -h 或者sqlmap --help查看帮助信息,通过帮助信息大致了解终端工具的使用方法。
┌──(kali㉿kali)-[~]
└─$ sqlmap -h
___
__H__
___ ___[,]_____ ___ ___ {1.6.11#stable}
|_ -| . ["] | .'| . |
|___|_ ["]_|_|_|__,| _|
|_|V... |_| https://sqlmap.org
Usage: python3 sqlmap [options]
Options:
-h, --help Show basic help message and exit
-hh Show advanced help message and exit
--version Show program's version number and exit
-v VERBOSE Verbosity level: 0-6 (default 1)
Target:
At least one of these options has to be provided to define the
target(s)
-u URL, --url=URL Target URL (e.g. "http://www.site.com/vuln.php?id=1")
-g GOOGLEDORK Process Google dork results as target URLs
Request:
These options can be used to specify how to connect to the target URL
--data=DATA Data string to be sent through POST (e.g. "id=1")
--cookie=COOKIE HTTP Cookie header value (e.g. "PHPSESSID=a8d127e..")
--random-agent Use randomly selected HTTP User-Agent header value
--proxy=PROXY Use a proxy to connect to the target URL
--tor Use Tor anonymity network
--check-tor Check to see if Tor is used properly
更加详细的使用方法,可以通过manual手册查看更加详细的描述
man mysql
SQLMAP(1) User Commands
NAME
sqlmap - automatic SQL injection tool
SYNOPSIS
python3 sqlmap [options]
OPTIONS
-h, --help
Show basic help message and exit
-hh Show advanced help message and exit
--version
Show program's version number and exit
-v VERBOSE
Verbosity level: 0-6 (default 1)
ual手册查看更加详细的描述
man mysql
SQLMAP(1) User Commands
NAME
sqlmap - automatic SQL injection tool
SYNOPSIS
python3 sqlmap [options]
OPTIONS
-h, --help
Show basic help message and exit
-hh Show advanced help message and exit
--version
Show program's version number and exit
-v VERBOSE
Verbosity level: 0-6 (default 1)