第三周学习

upload-labs环境搭建

kali中的docker部署

在kali中进入超级用户

输入

docker search upload-labs
docker pull c0ny/upload-labs

直接拉取c0ny/upload-labs镜像

image-20231107165738265

接着使用

docker images

列出镜像列表,然后直接使用生成一个容器

docker run  -d -p 80:80 c0ny1/upload-labs

再使用以下这个命令列出容器列表

docker container ls -a     

直接使用来运行容器

docker start <容器ID或容器名>

image-20231107194012690

接着打开这个容器映射的端口即可

image-20231107194116596

这样就成功了一半,环境中文件无法上传(需要创建一个upload文件夹并将此目录下的所有档案与子目录的拥有者皆设为www-data群体的使用者www-data)

找到c0ny1/upload-labs的容器ID,使用时采用前三位395就可以,

docker exec -it e78 /bin/bash

进入upload-labs容器,可以理解为进入操作系统进行操作,/var/www/html 是当前容器内网站的根目录

创建upload文件夹

mkdir upload

文件详细信息可通过查看

ls -l

将权限变更为www-data

chown www-data:www-data upload

image-20231107195032211

完成

phpstudy搭建

首先在传送门中下载upload_labs包,在phpstudy中搭建一个新网站,然后将upload_labs包解压到www的目录下,在新建网站的管理–修改中把路径选为D:\phpstudy_pro\WWW\uploadLabs-main最后直接启动WNMP服务即可。

image-20231107200019595

image-20231107195947637

攻防世界

PHP2

image-20231108192453829

F12没有提示,进一下index.php试还是没有变化,就算有变化可能也是被藏起来了,再试试有没有源代码.phps文件,发现有源代码,接下来就是审计环节了。

在PHP中,文件的扩展名通常是 .php,而不是 .phps。文件扩展名 .phps 通常用于PHP源代码的显示,而不是执行。当你在Web服务器上访问一个 .phps 文件时,它会显示PHP代码的源代码,而不会执行它。

image-20231108192526960

image-20231108193239221

  1. 首先,代码使用 if("admin"===$_GET[id]) 来检查是否传递了名为 “id” 的参数,并且该参数的值是否等于 “admin”,如果满足这个条件,它会输出 “

    not allowed!

    ” 并终止脚本执行。
  2. 如果参数 “id” 存在但不等于 “admin”,那么接下来的代码会尝试对 “id” 参数进行URL解码,使用 urldecode($_GET[id])
  3. 然后,它再次检查解码后的 “id” 参数是否等于 “admin”,如果满足条件,它会输出 “

    Access granted!

    ” 和一个密钥(这里用 “xxxxxxx” 代替)。

这段代码检查传递的参数是否为 “admin”,如果是,拒绝访问;否则,允许访问。

image-20231108193754215

当你使用 ?id=admin 作为查询参数访问这个脚本时,因为 $_GET[id] 的值等于 “admin”,所以代码会执行以下操作:

  1. 首先,代码会进入第一个条件 if("admin"===$_GET[id]),并检查是否 $_GET[id] 的值等于 “admin”,这是为真的。
  2. 因为条件为真,代码会执行以下操作:
    • 输出 “

      not allowed!

    • 然后调用 exit() 函数,终止脚本的执行。

所以,当你传递 ?id=admin 时,脚本会输出 “not allowed!” 并终止执行,不会进入第二个条件,也就不会显示 “Access granted!” 或密钥。

urldecode 是PHP中的一个函数,用于解码经过URL编码的字符串。URL编码通常用于将特殊字符或空格转换成URL安全的格式,以便在URL中传递参数或数据。

urldecode 函数将已编码的字符串还原为原始的非编码字符串。它会将 % 符号后面的十六进制数值转换成对应的字符。

在传入参数时,浏览器会对非ASCII编码进行一次urlencode,结果在代码执行时,相当于id还是admin,所以我们在传参时需要进行两次URL编码

“admin” 的 URL 编码为 %61%64%6D%69%6E

"%61%64%6D%69%6E"的URL编码为 %2561%2564%256D%2569%256E

最终结果如下:

image-20231108195145208

backup

image-20231108200840390

点开后找备份文件,注意:

  1. .bak:通常用于数据库备份文件,如 SQL Server 数据库备份文件。
  2. .zip.tar.gz:这些是用于压缩和打包文件和文件夹的文件格式,它们也可以用于备份文件。
  3. .old.backup:有时人们会将备份文件保存为原始文件的备份,例如 example.txt 的备份文件可以命名为 example.txt.old
  4. .bak1.bak2 等:一些人会在备份文件的文件名中添加数字后缀,以区分不同的备份版本。
  5. .db:用于数据库文件备份,如 SQLite 数据库备份。
  6. .bakup:有些人可能使用不常见的拼写变体,如 “bakup”,来表示备份文件。

因此在地址栏加上/index.php.bak回车

会下载一个文件

image-20231108201520882

答案便是.bak文件中的flag

weak_auth

开始随便输,点击登录

它告诉我们用户名是admin,所以我们使用admin登录

image-20231108202430254

然后它告诉我们密码错误,使用采用burp爆破

打开burp抓此页面

image-20231108202616820

然后发送到intruder

载入一个密码字典进行爆破

image-20231108202836802

结果根据长度排序

image-20231108202940010

发现一个437长度的结果,其对应的密码为123456

image-20231108203057485

simple_php

打开显示

image-20231108203254821

分析以上代码:

  1. show_source(__FILE__);:这行代码用于显示脚本的源代码。它会将脚本文件本身的内容输出到浏览器,用于调试或学习目的。
  2. include("config.php");:这行代码用于包含名为 “config.php” 的外部文件,通常用于设置和配置脚本所需的参数和变量。
  3. 接下来,脚本通过 $_GET 获取了两个参数 $a$b,并将它们分别赋值给 $a$b$_GET 用于获取来自URL查询字符串的参数。
  4. 脚本接着执行了一系列条件检查:
    • 如果 $a 的值等于 0 且不为假(即 $a 不是布尔假值),则输出 $flag1
    • 如果 $b 是一个数字(使用 is_numeric() 函数进行检查),则脚本退出(不再执行后续代码)。
    • 如果 $b 大于 1234,则输出 $flag2

根据这个脚本的逻辑,根据传递给 $a$b 的值,可能会输出 $flag1$flag2

所以,地址后面直接加/?a=abcd &b=4000k传参即可,结果如下:

image-20231108204703510

baby_web

打开发现只有这个页面,源代码也看不出来,访问index.php时发现他自动跳转回了1.

用burp抓包

image-20231108205322294

对该页面抓包,发送到重发

image-20231108205553523

把1.php改为index.php,发送,发现回复最下面有消息:Flag is hidden

查看16Hex发现

image-20231108210014249

由此可得

网络分析

访问index.php它回跳到了1.php

index.php的状态码为302

HTTP 302 Found 重定向状态码表明请求的资源被暂时的移动到了由该 HTTP 响应的响应头 Location 指定的 URL 上。浏览器会重定向到这个 URL,但是搜索引擎不会对该资源的链接进行更新 (In SEO-speak, it is said that the link-juice is not sent to the new URL)。

Location是1.php,

表示网页请求的重定向,

也就是从index.php重定向至1.php去了。

image-20231108210636665

这样也可以得到flag

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦择懿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值