第一次渗透作业

一、debug调试

1、定义

Debug,又叫断点调试,就是对写好的程序进行逐步运行、分解、调试的过程,通过这个过程,我们可以跟踪程序的详细运行过程, 是程序员的开发神器,也是开发必会的一个重要技能。

2、意义

(1)帮助我们追踪代码的执行流程、更好的理解复杂程序的执行逻辑。

(2)帮助我们快速的进行程序的异常定位或者线上问题追踪。

(3)帮助我们更好的去学习已有框架的源代码,让我们更清晰的了解源码的执行细节和处理逻辑。

3、虚拟环境

安装版本 python pycharm python3.10

conda env 虚拟环境 python2.7 python.3.10(互不影响)

二、ubuntu安装nginx以及php的部署

1、安装依赖包

bash 复制代码
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(源码编译安装/apt安装)

bash 复制代码
cd /usr/local
mkdir nginx
cd nginx
tar -xvf nginx-1.21.6.tar.gz

3、编译nginx

bash 复制代码
/usr/local/nginx/nginx-1.21.6
./configure    # 执行命令    
./configure --prefix=/home/centos/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module
make
make install

4、启动nginx

bash 复制代码
cd /usr/local/nginx/sbin
./nginx     # 启动nginx

5、安装PHP,先增加PHP源地址(源码编译安装/apt安装)

(1)apt安装PHP会自带依赖包,主要对源码编译进行说明,增加源地址进行安装

bash 复制代码
执行三条命令,添加php的源地址,更新,安装
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ondrej/php
sudo apt-get update

(2)在原地址增加完成后,因为nginx将请求代码先交给php-fpm,php-fpm在进行和后端的PHP代码进行交互,所以nginx使用PHP要使用到php-fpm,所以对php-fpm进行安装。

bash 复制代码
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

(3)配置php-fpm

因为php-fpm监听到的端口是自己的sock,所以要对监听端口进行修改 ,使监听的是自己本机的9000端口。

bash 复制代码
;listen = /run/php/php7.3-fpm.sock
listen = 127.0.0.1:9000

(4)启动php-fpm

bash 复制代码
sudo service php7.3-fpm start
netstat -lnt | grep 9000

(5)查看9000端口

bash 复制代码
root@gongxue:/usr/local/nginx/sbin# netstat -Lnt | grep 9000
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN
root@gongxue:/usr/local/nginx/sbin#

三、PHP底层调试

1、代码层次:xdebug+vscode

2、Docker定义

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可抑制的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器完全使用沙盒机制,相互之间不会存在任何接口。几乎没有性能开销,可以很容易的在机器和数据中心运行。最重要的是,他们不依赖于任何语言、框架或者包装系统。

3、编辑docker容器中的代码

(1)直接在容器里编辑【不推荐vim编辑器】

(2)将容器里的代码复制到物理机ubuntu【不方便】

(3)用vscode直接编辑【推荐】

4、Linux系统登录

(1)密码登录

(2)证书登录,私钥、公钥登录。RSA密码环境下最大破解了768

目前通用的RSA算法的密钥长度为2048 4096

四、PHP伪协议

1、PHP伪协议的定义

PHP 的伪协议是一种机制,允许开发者通过统一的文件访问函数,访问不同类型的数据源,包括本地文件、远程资源、内存数据、压缩包等。

allow_url_fopen :off/on ---允许或禁止打开URL文件

allow_url_include:off/on ---允许或禁止引用URL文件

2、PHP伪协议的原理

PHP 伪协议本质上是对路径的一种特殊格式扩展,它将以特定协议开头的路径重定向到不同的数据处理器。

3、什么时候用PHP伪协议

文件包含一下函数时用PHP伪协议:

1、include 2、require 3、include_once 4、require_once 5、highlight_file 6、show_source 7、flie 8、readfile 9、file_get_contents 10、file_put_contents 11、fopen

4、常见的PHP伪协议

file://、php://filter、php://input、zip://、bzip2://、zlib://、data://协议等

(1)file://协议

作用:file:// 用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受

(2)php://协议

作用:php:// 访问各个输入/输出流(I/O streams),在CTF中经常使用的是php://filter和php://input,php://filter用于读取源码,php://input用于执行php代码。

①php://filter

作用:在数据流打开时应用过滤器。

php://filter在双off的情况下也可以正常使用;

②php://input

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

(3)zip://, bzip2://, zlib://协议

zip://, bzip2://, zlib:// 均属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名。

①zip://协议

作用:访问 ZIP 压缩包内部的文件,而 无需手动解压。

使用方法:zip://archive.zip#dir/file.txt

zip:// [压缩文件绝对路径]#[压缩文件内的子文件名]

②bzip2://协议

作用:用于读取.bz2 压缩文件,读取时自动解压。

使用方法:compress.bzip2://file.bz2

③zlib://协议

作用:读取gzip/deflate压缩数据

使用方法:compress.zlib://file.gz

自动解压压缩包 然后把压缩包的文件放下include 进行文件包含

(4)data://协议

作用:内联数据流(RFC 2397)。

五、CTF中文件包含漏洞

1、定义

SQL注入等攻击方式一样,文件包含漏洞也是一种注入型漏洞,其本质就是输入一段用户能够控制的脚本或者代码,并让服务端执行。

2、常见的文件包含函数

php中常见的文件包含函数有以下四种:

require():找不到被包含的文件会产生致命错误,并停止脚本运行

include():找不到被包含的文件只会产生警告,脚本继续执行

require_once():与require()类似,唯一的区别是如果该文件的代码已经被包含,则不会再次包含

include_once():与include()类似,唯一的区别是如果该文件的代码已经被包含,则不会再次包含

3、文件漏洞与PHP伪协议的关系

(1)php://input

可以访问请求的原始数据的只读流,将post请求的数据当作php代码执行。当传入的参数作为文件名打开时,可以将参数设为php://input,同时post想设置的文件内容,php执行时会将post内容当作文件内容。从而导致任意代码执行。

(2)php://filter

可以获取指定文件源码。当它与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,让其不执行。从而导致任意文件读取。

(3)zip://

可以访问zip压缩包里面的PHP文件。当它与包含函数结合时,zip://流会被当作php文件执行。从而实现任意代码执行。

(4)data://和phar://

data:// :同样类似与php://input,可以让用户来控制输入流,当它与包含函数结合时,用户输入的data://流会被当作php文件执行。从而导致任意代码执行。

phar://:触发PHP反序列化漏洞

4、包含APACHE日志文件

WEB服务器一般会将用户的访问记录保存在访问日志中。那么我们可以根据日志记录的内容,精心构造请求,把PHP代码插入到日志文件中,通过文件包含漏洞来执行日志中的PHP代码。

5、包含SESSION

可以先根据尝试包含到SESSION文件,在根据文件内容寻找可控变量,在构造payload插入到文件中,最后包含即可。

(1)利用条件

①找到Session内的可控变量

②Session文件可读写,并且知道存储路径

(2)session常见存储路径

①/var/lib/php/sess_PHPSESSID

②/var/lib/php/sess_PHPSESSID

③/tmp/sess_PHPSESSID

④/tmp/sessions/sess_PHPSESSID

(3)session文件格式

sess_[phpsessid] ,而 phpsessid 在发送的请求的 cookie 字段中可以看到。

6、包含/PROC/SELF/ENVIRON

proc/self/environ中会保存user-agent头,如果在user-agent中插入php代码,则php代码会被写入到environ中,之后再包含它,即可。

7、包含临时文件

php中上传文件,会创建临时文件。在linux下使用/tmp目录,而在windows下使用c:\winsdows\temp目录。在临时文件被删除之前,利用竞争即可包含该临时文件。

8、包含上传文件

很多网站通常会提供文件上传功能,比如:上传头像、文档等,这时就可以采取上传一句话图片木马的方式进行包含。

9、包含SMTP(日志);xss

相关推荐
BingoGo5 小时前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack5 小时前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack1 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo1 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack2 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理3 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
一次旅行3 天前
网络安全总结
安全·web安全
QQ5110082853 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
WeiXin_DZbishe3 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5
一名优秀的码农3 天前
vulhub系列-14-Os-hackNos-1(超详细)
安全·web安全·网络安全·网络攻击模型·安全威胁分析