type
status
date
slug
summary
tags
category
icon
password
 
刚开始看到没什么有点懵,尝试了去爆破目录,用御剑,结果卡的要死,然后看到题目上写了包含文件,就直接尝试文件包含,无果,就想着去网页上看看源码有没有什么收获:
notion image
 
接着弹出select,点了发现
notion image
再点了一次也没什么收获,果断看看抓包文件(有时候网页上是没有显示的),看到一个php文件
notion image
 
访问一下该secr3t.php,回显了源码
notion image
 
接着就好办了,在该文件的基础上file=php://filter/read=convert.base64-encode/resource=flag.php
notion image
得到一串base64编码
接着进行解码得到html网页
notion image
可以看到flag为flag{41fb146f-a94a-41e9-b025-92e8dccacbf0}
 

 

[ACTF2020 新生赛]BackupFile

notion image
提示我们尝试找到源文件,搜寻了一番,没找到什么关键信息。
尝试dirsearch爆破目录
等着~~~
notion image
总算找到一个备份文件了,可以记录下ctf的备份文件(常见的www.zip)
 
找到源码:
!is_numeric($key)验证是否为数字
使用intval()key转换为整数类型。 将转换后的整数与字符串"123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3"进行比较。这里使用的是==而不是===,意味着 PHP 会进行类型转换后再比较。
 
关键在于 PHP 的弱类型比较特性:当使用==比较一个整数和字符串时,PHP 会尝试将字符串转换为整数。字符串转换为整数的规则是:从字符串开头提取数字部分,直到遇到非数字字符为止。对于字符串"123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3",转换后的整数为123
 
那么结果就不言而喻了
 
notion image
 

[极客大挑战 2019]PHP

 
notion image
常见的网站源码备份文件后缀:
tar.gz,zip,rar,tar
常见的网站源码备份文件名:
web,website,backup,back,www,wwwroot,temp
 
多年的经验告诉我,加个www.zip试试,很多ctf题就爱出这个
还真有
从里面找到源代码:
同时还有index.php
魔术方法
触发时机
主要用途
__construct()
对象创建时
初始化对象属性
__destruct()
对象销毁时
清理资源(如关闭文件)
__wakeup()
反序列化对象时
恢复对象状态
__sleep()
序列化对象前
准备需要序列化的属性
 
这里就是要求我们username=adminpassword=100,但是里面的username又会覆盖成guest
 
在 PHP 5.6.25/7.0.10 之前的版本中存在一个反序列化漏洞:
  • 当序列化字符串中声明的属性个数大于实际对象的属性个数时,__wakeup()方法会被绕过执行。
  • 在你的代码中,Name类实际有 2 个私有属性($username$password),但我们可以在序列化字符串中声明 3 个属性来触发漏洞。
 
 
所以我们先制造出序列化对象:
运行后为payload:
O:4:"Name":2:{s:14:"Nameusername";s:5:"admin";s:14:"Namepassword";i:100;}
该类中本来只有2个私有属性,我们需要声明大于实际属性个数
notion image
所以payload:
O:4:"Name":3:{s:14:"Nameusername";s:5:"admin";s:14:"Namepassword";i:100;}
同时,由于上述的是为私有属性,所以我们需要对该payload进行编码:
 
PHP 在序列化对象时,会根据属性的访问控制级别(public、protected、private)使用不同的前缀:
  • 公有属性(public):直接使用属性名(如 s:4:"name"
  • 受保护属性(protected):使用  作为前缀(如 s:6:"%00*%00name"
  • 私有属性(private):使用 类名 作为前缀(如 s:14:"%00ClassName%00name"
 
注意:这里需要先进行编码,后在Nameusername这些类和属性上加上%00
 
所以最终的payload:
O%3a4%3a%22Name%22%3a3%3a%7bs%3a14%3a%22%00Name%00username%22%3bs%3a5%3a%22admin%22%3bs%3a14%3a%22%00Name%00password%22%3bi%3a100%3b%7d
 
在 Python 中构造,需要使用 \x00 表示 NULL 字符,再进行 URL 编码
对应python的poc:
 
notion image
flag{79fde13f-5174-49ec-8f81-3751904addd0}

🤗 总结归纳

实操其实不难,难的是思路,多做题,思路就会顺其自然
BUUCTF-httpBUUCTF-sql注入合集
Loading...