一、第一天
1.安全相关介绍
学习方向
- 是否有真实的渗透经历 0-1 渗透内网 cnvd漏洞编号 真机 1000 真实 合法性 授权性
网络安全法 要不然 你就参加众测 补天
未经授权的情况下 其实也可以 边界
验证漏洞 无害验证 phpinfo 123
version user
-
现在web漏洞 sql注入漏洞 dead ? 预编译 预防sql注入 真的是100%防御吗? 23 黑帽大会 协议层绕过 三层四层 https://www.youtube.com/watch?v=Tfg1B8u1yvE chrome-extension://blegnhaaimfcklgddeegngmanbnfopog/https://media.defcon.org/DEF%20CON%2032/DEF%20CON%2032%20presentations/DEF%20CON%2032%20-%20Paul%20Gerste%20-%20SQL%20Injection%20Isn%27t%20Dead%20Smuggling%20Queries%20at%20the%20Protocol%20Level.pdf
-
web漏洞 护网 整体基线检查 nulei 逐年减少 (信息收集能力) 前端加密 requestid timestramp cry
web前端逆向 加密函数-----> 解密函数 burpsuite autodecoder galaxy
-
小程序 app 注意 抓包(app 双向证书绑定 绕过 app 模块 模拟器 真机 真机 nexus5) 前端 ------>后端服务器
-
云安全-----> docker k8s 80%
AI
AI------->2026年年初
必须积极拥抱AI
AI------>辅助安全
MCP 号称 自动化测试 自动化解题 kali nmap sqlmap
看代码 exp
claude code codex geminicli
claude opus4.5 codex gpt-5.2 gemini3pro glm-4.7 minimax2.1 我想编写一个程序 我想分析一段代码 我想复现一个漏洞 编写exp利用脚本
AI 模型微调 大而全的专业 垂直领域 获得更好的效果 医疗 法律 网络安全 农业 webshell识别
AI 视觉 自动 汽车 人 海洋垃圾 yolov
AI 会不会看X光 多模态 识别图和视频 Qwen-3-Vl
大模型 github
魔塔 阿里
hugg
模型部署 数据调整
235B 671B
显卡的要求
经济 越好越好
gemini3pro 动态视图会帮你更好的理解一些问题
1.31号 240美金 edu邮箱就最好 申请? 你自己去查 前端 nano banana2 veo3.1-3.2 图 增强一些课程趣味性 多啦A梦的四格漫画 来呈现
项目
anigravity IDE 大模型 只能问 function call -----> MCP 调用本地工具 第一 查看图
网络 扎实 dns和dhcp 用的什么协议 udp 不可靠 既然不可靠 在网络环境 很差的情况下 丢包无法重传 是否不能使用dns和dhcp
IA 基本功 TCP 很多协议在应用层 他有一个弥补机制
基础
- debug (重中之重)
python pycharm python3.10 https://www.python.org/downloads/windows/ 安装版本自己定
conda env 虚拟环境 就像一个容器一样 python2.7 python.3.10
ubuntu 22.04
java idea jdk1.8 jdk17 jdk21 maven pip
jdk1.8 版 idea
社区
jdk17 module 限制大部分java 反序列化漏洞 bypass
jdk21 dataease
windows
phpstudy
php phpstorm/vscode xdebug
Xdebug\] xdebug.mode = debug xdebug.start_with_request = yes zend_extension=D:/phpstudy_pro/Extensions/php/php7.3.4nts/ext/php_xdebug-3.1.6-7.3-vc15-nts-x86_64.dll js 前端调试 逆向过程中 代码层面 lnmp lamp linux nginx() mysql php web项目上 nginx apache 大厂 tomcat 开源 idea java weblogic linux ubuntu22 nginx php-fpm php7.3-php7.4 apt-get install php7.4-dev autoconf automake 源码安装 apt安装 1. 源码调试 代码 php C语言 2. debug 底层C语言 pwndbg vscode wnmp wamp windows nginx mysql php ### 2.ubuntu远程ssh连接 Ubuntu 系统端(服务端)配置 ubuntu系统默认不会给root设置密码: ``` sudo passwd root ``` 设置root用户的密码 1. **更新软件源**: 打开 Ubuntu 终端,执行以下命令更新软件包列表。 ``` sudo apt update ``` 2. **安装 OpenSSH Server**: 执行以下命令安装 SSH 服务。 ``` sudo apt install openssh-server ``` 安装完成后,可通过 `ssh -V` 或 `ssh -v` 查看版本以确认安装成功。 3. **启动并设置 SSH 服务**: * 启动 SSH 服务: ``` sudo systemctl start ssh ``` * 设置 SSH 服务开机自启: ``` sudo systemctl enable ssh ``` * 设置有允许root用户远程登陆 ``` vim /etc/ssh/sshd_config # 允许root用户通过密码远程登录 PermitRootLogin yes # 可选:若使用密钥登录,可设为 without-password(比密码登录安全) # PermitRootLogin without-password ``` * 重启ssh服务 ``` systemctl restart ssh ``` * 检查 SSH 服务状态: ``` sudo systemctl status ssh ``` 4. **配置防火墙**(如有必要): 如果连接失败,可尝试暂时关闭防火墙或确保 22 端口开放。 ``` sudo ufw disable ``` 5. **获取 IP 地址** : 使用以下命令查看 Ubuntu 的 IP 地址(通常为 `192.168` 开头或公网 IP)。 ``` ifconfig ``` 记录该 IP 地址,连接时需使用。 ### 3.nginx #### 1.安装依赖包 ``` apt-get install gcc apt-get install libpcre3 libpcre3-dev apt-get install zlib1g zlib1g-dev sudo apt-get install openssl sudo apt-get install libssl-dev ``` #### 2.安装nginx ``` wget https://nginx.org/download/nginx-1.22.1.tar.gz # 官方源码,也可以直接从官网下载然后从Windows拉取 tar -xvf nginx-1.21.6.tar.gz # 解压缩 mv nginx-1.22.1 nginx # 更改文件名 cd ~/nginx/ ./configure # 编译环境 make && make install apt-get install make # 进行安装make 编译包 mkdir nginx cd nginx ``` #### 3.编译nginx ``` cd /usr/local/nginx/nginx-1.21.6 # 执行命令 apt update && apt install gcc g++ make libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev -y # 安装编译环境 ./configure ./configure --prefix=/home/centos/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module # 执行make命令 make # 执行make install命令 make install ``` #### 4.启动nginx ``` cd /usr/local/nginx/sbin # 启动nginx ./nginx ps -ef | grep nginx ``` #### 5.访问nginx  ### 3.php #### 1.增加源地址 ``` 执行三条命令,添加php的源地址,更新,安装 sudo apt-get install software-properties-common sudo add-apt-repository -y ppa:ondrej/php sudo apt-get update ``` #### 2.安装php nginx使用php的话要用到php7.3-fpm,所以要安装 php-fpm ``` apt list | grep php # 查找是否有需要的版本 sudo apt-get install php7.3 php7.3-mysql php7.3-fpm php7.3-curl php7.3-xml php7.3-gd php7.3-mbstring php-memcached php7.3-zip # 如果Ubuntu版本过高,则需要添加第三方库 sudo apt update sudo apt install -y software-properties-common apt-transport-https lsb-release ca-certificates # 导入 ondrej 源的 GPG 密钥(验证包的合法性) sudo wget -O /etc/apt/trusted.gpg.d/ondrej.php.gpg https://packages.sury.org/php/apt.gpg # 添加 ondrej/php 软件源到系统源列表 echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/ondrej-php.list # 更新软件包列表(让系统识别新添加的源中的 PHP 包) sudo apt update ``` 存在7.3无法找到的问题话 ``` sudo vi /etc/apt/sources.list.d/ondrej-php.list #创建编辑ppa源配置文件 deb http://ppa.launchpad.net/ondrej/php/ubuntu noble main deb-src http://ppa.launchpad.net/ondrej/php/ubuntu noble main #添加内容 # 安装 dirmngr 工具(用于导入公钥) sudo apt-get install dirmngr -y # 导入 ondrej/php PPA 公钥 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4F4EA0AAE5267A6C sudo apt-get update #更新安装源 sudo apt-get install php7.3 php7.3-mysql php7.3-fpm php7.3-curl php7.3-xml php7.3-gd php7.3-mbstring php-memcached php7.3-zip -y #安装7.3版本 php7.3 -v # 启动服务 sudo systemctl start php7.3-fpm # 查看服务状态 sudo systemctl status php7.3-fpm # 设置开机自启(可选,避免服务器重启后服务停止) sudo systemctl enable php7.3-fpm ``` #### 3.配置php-fpm 把监听端口改掉 ``` : listen = 127.0.0.1:9000 ``` #### 4.启动php-fpm ``` find / -name www.conf # 查找 /etc/php/7.3/fpm/pool.d# cat www.conf vim www.conf # 更改端口 sudo service php7.3-fpm start netstat -lnt | grep 9000 ``` 查看9000端口  ### 5.常见攻击方式 ##### 挂马 在别人的网站文件里面放入网页木马或者是将代码潜入到对方正常的网页文件里,使浏览者中马 ##### 挖洞 漏洞挖掘 --- 弱口令 ##### 加壳 利用特殊的算法,将exe可执行程序或者DLL动态连接库文件的编码进行修改(如实现压缩、加密),以达到缩小文件体积或者加密程序编码,甚至是躲过杀毒软件查杀的目的。 目前常用的壳有:UPX,ASPack,PECompact,UPack,免疫007,木马彩衣等等... ##### 溢出 简单的解释就是程序对输入数据没有执行有效的边界检测而导致错误,后果可能是造成程序崩溃或者是执行攻击者的命令 ##### 缓冲区溢出 攻击者向一个地址区输入这个区间储存不下的大量字符,在某些情况下,这些多余的字符可以作为"执行代码"来运行,因此足以使攻击者不受安全措施限制而获得计算机的控制权 ##### 注入 Web安全头号大敌,攻击者把一些包含攻击代码当作命令或者查询语句发送给解释器,这些恶意数据可以欺骗解释器,从而执行计划外的命令或者未授权访问数据 注入攻击漏洞往往是应用程序缺少对输入进行安全性检查所引起的,注入漏洞通常能在sql查询,ldap查询,os命令,程序参数等中出现 ##### SQL注入 注入攻击最常见的形式,主要是指Web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在Web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任查询或其他操作,导致数据库信息泄露或非授权操作数据表 ##### 注入点 即可以实行注入的地方,通常是一个涉及访问数据库的应用链接,根据注入点数据库的运行账号的权限的不同,你所得到的权限也不同 ##### 软件脱壳 顾名思义就是利用工具,把在软件"外面"起保护作用的"壳"程序去掉,还文件本来面目,这样再修改文件内容或进行分析解析就容易多了 ##### 免杀 通过加壳,加密,修改特征码,加花指令等技术来修改程序,使其逃过杀毒软件的查杀 ##### 暴力破解 简称"爆破",黑客对系统中账号都每一个可能的密码进行高度密集的自动搜索,从而破坏安全并获得对计算机的访问权限 ##### 洪水攻击 是黑客比较常用的一种技术,特点是实施简单,威力巨大,大多是无视防御的 从定义上说,攻击哲对网络资源发送过量数据时就发生了洪水攻击,这个网络资源可以是router,switch,host,application等 洪水攻击将攻击流量比作洪水,只要攻击流量够大,就可以将防御手段打穿 DDoS攻击便是洪水攻击的一种 ##### SYN攻击 利用操作系统TCP协调设计上的问题执行的拒绝服务攻击,设计TCP建立连接时三次握手的设计 ##### DoS攻击 拒绝服务攻击,攻击者通过利用漏洞或发送大量请求导致攻击对象无法访问网络或者网站无法被访问 ##### DDoS攻击 分布式DOS攻击,常见的UDP,SYN,反射放大攻击等等,就是通过许多肉鸡一起向你发送一些网络请求信息,导致你的网络堵塞而不能正常上网 ##### 端口扫描 端口扫描是指发送一组端口扫描消息,通过它了解到从到哪里可以探寻到攻击弱点,并了解其提供的计算机网络服务类型,试图以此侵入某台计算机 ##### 反弹端口 防火墙对于连入的连接往往会进行非常严格的过滤,但是对于连出的连接却疏于防范 于是,利用这一特性,反弹端口型软件的服务端(被控制端)会主动连接客户端(控制端),就给人被控制端主动连接控制端的假象",让人麻痹大意 ##### 网络钓鱼 攻击者利用欺骗性的电子邮件或伪造的Web站点等来进行网络诈骗活动 诈骗者通常会将自己伪装成网络银行,在线零售商和信用卡公司等可信的品牌,骗取用户的私人信息或邮件账号口令 受骗者往往会泄露自己的邮箱,私人资料,如信用卡,银行卡账户,身份证等内容 ##### 鱼叉攻击 鱼叉攻击是将用鱼叉捕鱼形象的引入到了网络攻击中,主要是指可以使欺骗性电子邮件看起来更加可信的网络钓鱼攻击,具有更高的成功可能性 不同于撒网式的网络钓鱼,鱼叉攻击往往更加具备针对性,攻击者往往"见鱼而使叉" 为了实现这一目标,攻击者将尝试在目标上收集尽可能多的信息,通常组织内的特定个人存在某些安全漏洞 ##### 钓鲸攻击 捕鲸是另一种进化形式的鱼叉式网络钓鱼,它指的是针对高级管理人员和组织内其他高级人员的网络钓鱼攻击 通过使电子邮件内容具有个性化并针对相关目标进行定制的攻击 ##### 水坑攻击 顾名思义,是在受害人必经之路设置了一个"水坑(陷阱)" 最常见的做法是,黑客分析攻击目标的上网活动规律,寻找攻击目标经常访问的网站的弱点,先将此网站"攻破"并植入攻击代码,一旦攻击目标访问该网络就会"中招" ##### 嗅探 嗅探指的是对局域网中的数据包进行截取及分析,从中获取有效信息 ##### APT攻击 即高级可持续威胁攻击,指某组织在网络上对特定的对象展开的持续有效的攻击活动 这种攻击活动具有极强的隐蔽性和针对性,通常会运行受感染的各种介质,供应链和社会工程学等多种手段实施先进的,持久的且有效的威胁和攻击 ##### C2 cs全称为:Command and Control,命令与控制,常见于APT攻击场景中,作动词解释时理解为恶意软件与攻击者进行交互,作名词解释时为攻击者的"基础设施" ##### 供应链攻击 是黑客攻击目标机构的合作伙伴,并以该合作伙伴为跳板,达到渗透目标用户的目的 一种常见的表现形式为,用户对厂商产品的信任,在厂商产品下载安装或者更新时进行恶意软件植入进行攻击 所以,在某些软件下载平台下载的时候,若遭遇捆绑软件,就得小心了 ##### 社会工程学 社会工程学是通过操纵人的心理、行为或信任来获取信息、权限等目标的非技术手段,核心作用是绕开技术防御达成目的 信息收集:通过伪装身份(如客服、同事)套取个人隐私、企业内部信息等关键数据。 突破防御:绕开防火墙、密码等技术屏障,让目标主动提供账号密码、打开恶意文件。 促成行动:诱导目标执行特定操作,比如转账、安装不明软件、泄露内部流程。 ##### 拿站 指得到一个网站的最高权限,比如说电脑非系统管理员就无法访问一些C盘的东西,而系统管理员可以,通过一定的手段让普通用户提升成为管理员,让其拥有管理员的权限,这就是提权 ##### 渗透 通过扫描检测你的网络设备及系统有没有安全漏洞,有的话就可能被入侵,就像一滴水透过一块有漏洞的木板,渗透成功就是系统被入侵 ##### 横向移动 攻击者入侵后,从立足点在内部网络进行拓展,搜寻控制更多的系统 ##### 跳板 一个具有辅助作用的机器,利用这个主机作为一个间隙工具,来入侵其他主机,一般和肉鸡连用 --- 用作代理服务器 ##### 网马--淘汰 在网页中植入木马,当打开网页的时候就运行了木马程序 --- 成功率几乎为0!!! ##### 箱子--淘汰 别人通过将木马挂在网页上然后别人点击了这个网页某些功能就中了木马,登录其他网站后木马就会记录这个人的账号密码然后发到挂木马这个人的指定的一个地方 ---- "黑吃黑" --- 小马(经典的php)拉大马(木马,选择使用必死无疑) ##### 黑页--淘汰 黑客攻击成功后,在网站上留下的黑客入侵成功的页面,用于炫耀攻击成果 ##### 暗链--淘汰 看不见的网站链接,"暗链"在网站中的链接做的非常隐蔽,短时间内不易被搜索引擎察觉 它和友情链接有相似之处,可以有效地提高网站权重 --- 黑帽seo ##### 拖库 拖库本来是数据库领域的术语,指从数据库中导出数据 在网络攻击领域,它被用来指网站遭到入侵后,黑客窃取其数据库文件 --- 要想富先拖库 ##### 撞库 撞库是黑客通过收集互联网已泄露的用户和密码信息,生成对应的字典表,尝试批量登录其他网站后,得到一系列可以登录的用户 很多用户在不同网站使用的是相同的账号密码,因此黑客可以通过获取用户在A网站的账户从而尝试登录B网站,这就可以理解为撞库攻击 ##### 暴库 入侵网站的一种手法,通过恶意代码让网站爆出其一些敏感数据来 ##### CC攻击 即Challenge Collapsar,名字来源于对抗国内安全厂商绿盟科技早期的抗拒绝服务产品黑洞,攻击者借助代理服务器生成指向受害者主机的涉及大量占用系统资源的合法请求,耗尽目标的处理资源,达到拒绝服务的目的 ##### WebShell 已app,php,jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称作是一种网页后门,可以上传下载文件,查看数据库,执行任意程序命令等 ##### 跨站攻击 简称XSS,是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料,利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式 ##### 中间人攻击 中间人攻击是一种"间接"的入侵攻击,这种攻击模式是通过各种技术手段将受入侵者控制的一台计算机虚拟放置在网络连接中的两台通信计算机之间,通过拦截正常的网络通信数据,并进行数据篡改和嗅探,而这台计算机就称为"中间人" --- 可能性越来越小 ##### 薅羊毛 指网赚一族利用各种网络金融产品或者红包活动推广下线抽成赚钱,又泛指收集各个银行等金融机构及各类商家的优惠信息,以此实现盈利的目的,这类行为就称为薅羊毛 ##### 商业电子邮件攻击(BEC) 也被称为"变脸诈骗"攻击,这是针对高层管理人员的攻击,攻击者通常冒充(盗用)决策者的邮件,来下达与资金、利益相关的指令;或者攻击者依赖社会工程学制作电子邮件,说服/诱导高管短时间进行经济交易 ##### 电信诈骗 指通过电话、网络和短信方式,编造虚假信息,设置骗局,对受害人实施远程,非接触式诈骗,诱使受害人打款或转账的犯罪行为,通常以冒充他人及仿冒、伪造各种合法外衣和形式的方式达到欺骗的目的 ##### 杀猪盘 网络流行词,电信诈骗的一种,是一种网络交友诱导股票投资、赌博等类型的诈骗方式,"杀猪盘"则是"从业者们"自己起的名字,是指放长线"养猪"诈骗,养的越久,诈骗的越狠 ##### ARP攻击 ARP协议的基本功能是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的进行 基于ARP协议的这一工作特性,黑客向对方计算机不断发送有欺诈性质的ARP数据包,数据包内含有与当前设备重复的mac地址,使对方在回应报文时,由于简单的地址重复错误而导致不能进行正常的网络通信 ##### 欺骗攻击 网络欺骗达到技术有:HONEYPOT和分布式HONEYPOT、欺骗空间技术等 主要方式:IP欺骗、ARP欺骗、DNS欺骗、Web欺骗、电子邮件欺骗、源路由欺骗(通过指定路由,以假冒身份与其他主机进行合法的通信或发送假报文,使受攻击主机出现错误动作)、地址欺骗(包括伪造源地址和伪造中间站点)等 ##### 域名劫持 域名劫持是通过拦截域名解析请求或篡改域名服务器上的数据,使得用户在访 问相关域名时返回虚假IP地址或使其用户的请求失败 ##### Shellcode 一段可以被操作系统无需特别定位处理的指令,通常在利用漏洞后执行的恶意代码,shellcode为二进制的机器码,因为经常让攻击者获得shell而出名 ##### 物理攻击 通俗易懂,即采用物理接触而非技术手段达到网络入侵的目的,最常见的表现为插u盘 著名的震网病毒事件即通过插u盘的形式感染了伊朗核设施 ##### 垃圾邮件 是指未经用户许可(与用户无关)就强行发送到用户邮箱中的电子邮件 ### 6.vscode中phpdebug环境配置 #### 1.基础的底层环境安装 phpstudy安装,vscode安装,在VSCode中安装PHP Debug插件 #### 2.具体措施 1.安装好phpstudy后部署好nginx环境和php环境 2.打开环境  3.打开php配置   4.然后进入网站,查看php版本,xedebug扩展是否打开,然后打开根目录创建一个新的test.php文件   5.打开创建的php文件,在其中输入\ /dev/null 5. sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io *** ** * ** *** #### 第二部分:核心难点------解决"拉取不到镜像" 这是所有国内 Docker 初学者遇到的**最大拦路虎** 。当你执行 `docker pull` 时,经常会卡住或报错 `TLS handshake timeout`。这是因为 Docker Hub 的官方服务器在海外。 > 出现的报错示例: > > root@gx-VMware-Virtual-Platform:\~# docker pull nginx Using default tag: latest Error response from daemon: failed to resolve reference "docker.io/library/nginx:latest": failed to do request: Head "[https://registry-1.docker.io/v2/library/nginx/manifests/latest](https://registry-1.docker.io/v2/library/nginx/manifests/latest "https://registry-1.docker.io/v2/library/nginx/manifests/latest")": dial tcp 128.242.240.117:443: connect: connection refused 针对这个问题,我为你整理了**三种**不同层级的解决方案: ##### 方案一:配置国内镜像加速器(基础方案) 这是最常规的方法,但近期国内很多镜像站(如阿里云、网易等)经常不稳定。建议优先尝试,不行再换方案二。 1. 创建或修改配置文件:(用vim编辑也可,只是需要apt-get install vim) ``` sudo mkdir -p /etc/docker sudo nano /etc/docker/daemon.json ``` 2. 在文件中粘贴以下内容(这里提供几个目前相对可用的): ``` { "registry-mirrors": [ "https://docker.m.daocloud.io", "https://huecker.io", "https://dockerhub.timeweb.cloud" ] } ``` 3. 保存退出(按 `Ctrl+O` 回车,再按 `Ctrl+X`)。 4. 重启 Docker 服务让配置生效: ``` sudo systemctl daemon-reload sudo systemctl restart docker ``` ##### 方案二:配置 Docker 代理(进阶稳妥方案) **如果你有自己的 VPN 或代理节点**(比如你的物理机上开了代理,或者局域网内有代理服务器),让 Docker 走代理是最稳的。 > **注意:** Docker 拉取镜像不走系统环境变量的代理,必须单独配置 systemd。 1. 创建配置目录: ``` sudo mkdir -p /etc/systemd/system/docker.service.d ``` 2. 创建代理文件: ``` sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf ``` 3. 粘贴以下内容(**假设你的代理在 192.168.1.100 的 7890 端口**,请根据实际情况修改): ``` [Service] Environment="HTTP_PROXY=http://192.168.1.100:7890" Environment="HTTPS_PROXY=http://192.168.1.100:7890" ``` 4. 重启服务: ``` sudo systemctl daemon-reload sudo systemctl restart docker ``` #### 第三部分:渗透测试常用 Docker 操作速查 搭建好环境后,我们来实战。不讲虚的,只讲你做实验、搭靶场最常用的命令。 ##### 1. 概念速解 * **镜像 (Image):** 相当于"光盘"或"安装包"。(只读的) * **容器 (Container):** 相当于"运行起来的系统"。(可读写的) ##### 2. 只有 5 个命令的"生存指南" 假设我们要搭建一个 `nginx` web服务器做测试。 **Step 1: 运行容器 (Run)** ``` # 格式: docker run -d -p [宿主机端口]:[容器内部端口] --name [起个名字] [镜像名] sudo docker run -d -p 8080:80 --name my-web nginx ``` * `-d`: 后台运行(不占用你当前的终端)。 * `-p 8080:80`: 最关键!把你的 Ubuntu 的 8080 端口映射给容器的 80 端口。 * **测试:** 打开浏览器访问 `http://localhost:8080`,你应该能看到 Nginx 欢迎页。 **Step 2: 查看正在运行的容器 (Ps)** ``` sudo docker ps ``` * 你能看到容器 ID、状态、端口映射情况。如果不加参数,只显示运行中的;`docker ps -a` 显示所有的。 **Step 3: 进入容器内部 (Exec)** 这就好比 SSH 连进了一台虚拟机,适合进去修改配置文件或查看 Flag。 ``` # 格式: docker exec -it [容器名/ID] /bin/bash sudo docker exec -it my-web /bin/bash ``` * 退出容器输入 `exit` 即可。 **Step 4: 停止与启动 (Stop/Start)** ``` sudo docker stop my-web # 关机 sudo docker start my-web # 开机 ``` Step 5: 删除容器 (Rm) 做完实验,清理现场。 ``` sudo docker stop my-web # 先停止 sudo docker rm my-web # 再删除 # 如果想连镜像也删了: docker rmi nginx ``` *** ** * ** *** #### 第四部分:常见"坑点"排雷指南 ##### 坑点 2:端口冲突 (Bind for 0.0.0.0:xx failed) 现象: 运行容器时报错:port is already allocated。 原因: 你指定的宿主机端口(冒号左边的端口)已经被别的程序占用了。 解决: 换个端口。比如原命令是 -p 80:80,改成 -p 8081:80 即可。 ##### 坑点 3:名字冲突 (The container name "/xxx" is already in use) 现象: 再次运行同一个 docker run 命令报错。 原因: 即使容器停止了,它还在那躺着(类似关机的电脑)。你不能创建一个同名的新容器。 解决: 1. 删除旧的:`docker rm [容器名]` 2. 或者给新的容器起个不同的名字:`--name my-web-2` #### 第五部分:vscode远程连接docker ##### 1.在vscode里面下载好相关的扩展程序  然后在vscode里面进行远程连接 ##### 2.虚拟机的远程连接  1.添加虚拟机的ip和正常外部连接一样 ``` ssh root@192.168.147.128 ``` 2.成功跳转以后输入虚拟机的密码 ##### 3.下载调试docker环境 1.下载已经Build好的镜像: ``` docker pull tuwen/phpsrc-debug:8.1-backdoor ``` 2.运行容器,在本地的docker仓库,查看客户机的端口是否被占用 ``` docker run -it --rm --name debug -p 8081:8080 -p 2222:22 docker.io/tuwen/phpsrc-debug:8.1-backdoor ``` 3.运行成功后,目标会启动ssh,并输出一个私钥(勿在生产环境下使用这个镜像,因为私钥是固定的)保存在自己主机windows下 private.key ``` -----BEGIN RSA PRIVATE KEY----- MIIEpQIBAAKCAQEA1ZswRub+3DvSEnBiyM5YRpRzRYV88vO1X2j867u6pyCHUNXv RRCr7ahMLPIVYsZwlHb4sF+Zb3DJOBH+E265o93chdMxbWG44k0spf10JRevA0JX NrEwHR8vesCR74e5MuddbSic88lsEqnnn+Fo3lStvE6nBp6tbqdEu7GhTtHSYejn wwINnA5ocsHkd1YE9L2Scqw1e4bXveTAQnSvhqe33QshGXFpt0tQwRWngah887f2 P54wFSm2C/UyFT7pvIjINKzIi4vUoXz/nU+V7neTmt3XDdjloYg3ycOaX4RSVneO HCf7hkcEKbzbPzzSrGAAYYC5UzFB+ImsIbtV2wIDAQABAoIBAQCjROxgtX2Gft7y Ix8Ol9IXmK6HLCI2XZt7ovb3hFWGGzHy0qMBql2P2Tzoed1o038Hq+woe9n+uTnE dtQ6rD6PByzgyW2VSsWTjCOdeJ5HH9Qw7ItXDZZWHBkhfYHOkXI4e2oI3qshGAtY NLALn7KVhioJriCyyaSM2KOLx5khcY+EJ1inQfwQJKqPGsdKc72liz07T8ifRj+m NLKtwrxlK3IXYfIdgLp/1pCKdrC80DhprMsD4xvNgq4pCR9jd4FoqM9t/Up5ppTm +p6A/bDwdIPh6cFFeyMP+G3+bTlW1Gg7RLoNCc6qh53WWVgEOQqdLHcQ8Ge4RLmb wLUmnRuRAoGBAPfXYfjpPZi8rPIQpux13Bs7xaS1/Fa9WqrEfrPptFdUVHeFCGY8 qOUVewPviHdbs0nB71Ynk9/e96agFYijQdqTQzVnpYI4i8GiGk5gPMiB2UYeJ/HZ mIB3jtWyf6Z/GO0hJ1a6mX0XD3zJGNqFaiwqaYgdO1Fwh9gcH3O2lHyjAoGBANyj TGDBYHpxPu6uKcGreLd0SgO61PEj7aOSNfrBB2PK83A+zjZCFZRIWqjfrkxGG6+a 2WuHbEHuCGvu2V5juHYxbAD/38iV/lQl/2xyvN1eR/baE3US06qn6idxjnmeNZDy DelAx1RGuEvLX1TNAzDTxBwYyzH3W2RpKAUAD11pAoGAN38YJhd8Pn5JL68A4cQG dGau/BHwHjAqZEC5qmmzgzaT72tvlQ0SOLHVqOzzHt7+x45QnHciSqfvxnTkPYNp FJuTGhtKWV12FfbJczFjivZgg63u/d3eoy2iY0GkCdE98KNS3r3L7tHCGwwgr5Xe T2Nz3BHHnZXYJVEuzcddeocCgYEAnhDjPAHtw2p0Inxlb9kPb6aBC/ECcwtBSUkL IOy/BZA1HPnxs89eNFAtmwQ8k2o6lXDDSJTJSuZj5CdGVKfuU8aOUJz/Tm2eudxL A/+jLJhJyCBthhcJyx3m04E4CAr+5ytyKeP9qXPMvoghcNg66/UabuKYV+CU+feX 8xUa7NkCgYEAlX8HGvWMmiG+ZRFB//3Loy87bBxGlN0pUtCEScabZxdB2HkI9Vp7 Yr67QIZ3y7T88Mhkwam54JCjiV+3TZbSyRMOjkqf7UhTCZC6hHNqdUnlpv4bJWeW i5Eun8ltYxBnemNc2QGxA4r+KCspi+pRvWNGzL3PFVBGXiLsmOMul78= -----END RSA PRIVATE KEY----- ``` 4.更改key文件的属性 右击-》属性==》安全==》高级    删除到只存在如下权限  点击确定 5.vscode右键使用管理员权限登录,然后用这个私钥连接Linux机器的2222端口: vscode安装插件  ``` ssh -p2222 -i e:/private.key root@192.168.147.128 ```  输入在上述搜索栏中(注意key文件的更改和ip地址的更改,ip地址是自己虚拟机的ip地址) 6.连接成功会打开个新窗口,此时会在容器的 /root/.vscode-server/ 中安装vscode server  7.然后打开文件夹,打开源码目录 /usr/src/php/ :  最后,为了调试C的代码,还需要安装vscode的扩展**C/C++**:  8.打开运行,添加一个debug配置  其中,program是二进制文件路径,我们填入 /usr/local/bin/php ,args是调试时传给二进制文件的参数,我们要启动一个PHP的Built-in Server进行调试,所以参数是 \["-S", "0.0.0.0:8080", "-t","/var/www/html"\] 。 9.然后在容器中写入hello world ``` echo '' > /var/www/html/index.php ``` 10.再点击VScode里的**Run and Debug**,启动调试进程 (问题查询,如果成功运行查看好端口映射是否无误) ``` docker ps ```  ##### 4.调试 1.在vscode中找到后门所在的代码ext/zlib/zlib.c:366,然后运行它   成功访问以后复现漏洞,进行抓包 2.然后repeater,发送查看  最后成功复现查看到后门 ### 2.实验复现 ## 三、第三天 ### 1.蚁剑 师承中国菜刀 #### 安装 ##### 1.加载器 [https://github.com/AntSwordProject/antSword/releases/tag/2.1.15](https://github.com/AntSwordProject/antSword/releases/tag/2.1.15 "https://github.com/AntSwordProject/antSword/releases/tag/2.1.15") ##### 2.安装成功后会出现以下页面  ##### 3.问题 出现解码失败以后先关闭防火墙和实时保护,然后在google里面关闭下载的安全保护,还是不行就手动下载源码进行解码 [https://www.yuque.com/r/goto?url=https%3A%2F%2Fgithub.com%2FAntSwordProject%2FAntSword%2Farchive%2Fmaster.zip](https://www.yuque.com/r/goto?url=https%3A%2F%2Fgithub.com%2FAntSwordProject%2FAntSword%2Farchive%2Fmaster.zip "https://www.yuque.com/r/goto?url=https%3A%2F%2Fgithub.com%2FAntSwordProject%2FAntSword%2Farchive%2Fmaster.zip") ##### 4.结果  全部安装完毕以后会提示手动重启然后直接进入主目录页面 ### 2.名词解释 #### 1.poc 漏洞测试,命令执行,不会进一步操作 #### 2.exp 会进一步利用,比如写入webshell网站后门 #### 3.payload webshell写好内容里面的源码 #### 4.shellcode 远程控制木马中,更多出现在机械码中 #### 5.php文件 进入到nginx页面 ``` cd /usr/local/nginx/html/ ``` 然后查看是否存在web.php文件,然后查看nginx是否运行,php是否打开 ``` ps -ef | grep nginx systemctl start php7.3-fpm.service ``` ### 3.php://filter #### 1.新建一个.php文件  在里面写入所需的内容 $content在开头增加了exit过程,导致即使我们成功写入一句话,也执行不了(这个过程在实战中十分常见,通常出现在缓存、配置文件等等地方,不允许用户直接访问的文件,都会被加上if(!defined(xxx))exit;之类的限制)。那么这种情况下,如何绕过这个"死亡exit"? 幸运的是,这里的$_POST\['filename'\]是可以控制协议的,我们即可使用 php://filter协议来施展魔法:使用php://filter流的base64-decode方法,将$content解码,利用php base64_decode函数特性去除"死亡exit"。 众所周知,base64编码中只包含64个可打印字符,而PHP在解码base64时,遇到不在其中的字符时,将会跳过这些字符,仅将合法字符组成一个新的字符串进行解码。 #### 2.理解正常的base64_decode ``` 以后,我们可以使用 php://filter/write=convert.base64-decode 来首先对其解码。在解码的过程中,字符\<、?、;、\>、空格等一共有7个字符不符合base64编码的字符范围将被忽略,所以最终被解码的字符仅有"phpexit"和我们传入的其他字符。 "phpexit"一共7个字符,因为base64算法解码时是4个byte一组,所以给他增加1个"a"一共8个字符。这样,"phpexita"被正常解码,而后面我们传入的webshell的base64内容也被正常解码。结果就是\没有了。 #### 3.效果 ### 4.封装协议--php伪协议 涉及的相关协议:file://、php://filter、php://input、zip://、compress.bzip2://、compress.zlib://、data://等 #### 1.【file://协议】 PHP.ini: file:// 协议在双off的情况下也可以正常使用; allow_url_fopen :off/on allow_url_include:off/on file:// 用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受allow_url_fopen与allow_url_include的影响  file:// \[文件的绝对路径和文件名
http://127.0.0.1/cmd.php?file=file://D:/soft/phpStudy/WWW/phpcode.txt

2.【php://协议】
条件:
不需要开启allow_url_fopen,仅php://input、 php://stdin、 php://memory 和 php://temp 需要开启allow_url_include。
php:// 访问各个输入/输出流(I/O streams),在CTF中经常使用的是php://filter和php://input,php://filter用于读取源码,php://input用于执行php代码。
参考自:http://php.net/manual/zh/wrappers.php.php#refsect2-wrappers.php-unknown-unknown-unknown-descriptioq
php://filter 读取源代码并进行base64编码输出,不然会直接当做php代码执行就看不到源代码内容了。
PHP.ini:
php://filter在双off的情况下也可以正常使用;
allow_url_fopen :off/on
allow_url_include:off/on

测试现象:
http://127.0.0.1/cmd.php?file=php://filter/read=convert.base64-encode/resource=./cmd.php

php://input 可以访问请求的原始数据的只读流, 将post请求中的数据作为PHP代码执行。
PHP.ini:
allow_url_fopen :off/on
allow_url_include:on

测试现象:
http://127.0.0.1/cmd.php?file=php://input
POST DATA\] \ 也可以POST如下内容生成一句话: \');?\>  #### 3.【zip://, bzip2://, zlib://协议】 **PHP.ini:** zip://, bzip2://, zlib://协议在双off的情况下也可以正常使用; allow_url_fopen :off/on allow_url_include:off/on zip://, bzip2://, zlib:// 均属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名。 参考自:[http://php.net/manual/zh/wrappers.compression.php](http://php.net/manual/zh/wrappers.compression.php "http://php.net/manual/zh/wrappers.compression.php")  **1.【zip://协议】** **使用方法:** zip://archive.zip#dir/file.txt zip:// \[压缩文件绝对路径\]#\[压缩文件内的子文件名
测试现象:
http://127.0.0.1/cmd.php?file=zip://D:/soft/phpStudy/WWW/file.jpg%23phpcode.txt
先将要执行的PHP代码写好文件名为phpcode.txt,将phpcode.txt进行zip压缩,压缩文件名为file.zip,如果可以上传zip文件便直接上传,若不能便将file.zip重命名为file.jpg后在上传,其他几种压缩格式也可以这样操作。
由于#在get请求中会将后面的参数忽略所以使用get请求时候应进行url编码为%23,且此处经过测试相对路径是不可行,所以只能用绝对路径。

2.【bzip2://协议】
使用方法:
compress.bzip2://file.bz2
测试现象:
http://127.0.0.1/cmd.php?file=compress.bzip2://D:/soft/phpStudy/WWW/file.jpg
or
http://127.0.0.1/cmd.php?file=compress.bzip2://./file.jpg

3.【zlib://协议】
使用方法:
compress.zlib://file.gz
测试现象:
http://127.0.0.1/cmd.php?file=compress.zlib://D:/soft/phpStudy/WWW/file.jpg
or
http://127.0.0.1/cmd.php?file=compress.zlib://./file.jpg

4.【data://协议】
经过测试官方文档上存在一处问题,经过测试PHP版本5.2,5.3,5.5,7.0;data:// 协议是是受限于allow_url_fopen的,官方文档上给出的是NO,所以要使用data://协议需要满足双on条件
PHP.ini:
data://协议必须双在on才能正常使用;
allow_url_fopen :on
allow_url_include:on
参考自:http://php.net/manual/zh/wrappers.data.php, 官方文档上allow_url_fopen应为yes。

测试现象:
http://127.0.0.1/cmd.php?file=data://text/plain,<?php phpinfo()?>
or
http://127.0.0.1/cmd.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=
也可以:
http://127.0.0.1/cmd.php?file=data:text/plain,<?php phpinfo()?>
or
http://127.0.0.1/cmd.php?file=data:text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=
