ctfshow web入门(二) 持续更新


前言

本来是想把做的题目全部写在一篇里的,但是就在昨天晚上发生了十分悲惨的故事,我写的

最后一题,后面的部分被吃掉了……

所以今天再写一篇新的,记录新写下的题目,嘿嘿~

顺便放一下上一篇的链接:

https://blog.csdn.net/qq_45746876/article/details/123045818?spm=1001.2014.3001.5501


一、爆破 web23

这道题就是昨天被吃掉的那道题,先来看题目:
在这里插入图片描述
给了一串代码,放到编译器仔细阅读一波并加上注释:

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-03 11:43:51
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-03 11:56:11
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/
error_reporting(0); # 判断是否为空的函数

include('flag.php');
if (isset($_GET['token'])) {
    $token = md5($_GET['token']);   # token = token的md5值
    if (substr($token, 1, 1) === substr($token, 14, 1) && substr($token, 14, 1) === substr($token, 17, 1)) {    # 并且token的第1位 = 第14位 = 第17位,substr函数用于返回字符串的一部分
        # intval函数用于获取变量的整数值:
        if ((intval(substr($token, 1, 1)) + intval(substr($token, 14, 1)) + substr($token, 17, 1)) / substr($token, 1, 1) === intval(substr($token, 31, 1))) {
            echo $flag;
        }
    }
} else {
    highlight_file(__FILE__);

}


大致意思是get一个值 token,token的md5值满足条件: 第1位 = 第14位 = 第17位,并且取整后 第1位 + 第14位 + 第17位/第1位 === 第17位,此时就会输出flag。

然后再写一个python脚本爆破一下,这题写了很久的原因就是我想直接用在phpstorm上面把token爆破出来,但是php水平又很差,于是想了很久……

后来发现python好像也可以完成,然后又写了python脚本爆破:

# date:2022-2-24 23:25
# author:marxycj


from hashlib import md5
import string


alllist = '0123456789' + string.ascii_lowercase + string.ascii_uppercase

token_md5 = md5(alllist.encode("utf-8")).hexdigest()

for a in alllist:
    for b in alllist:
        token = str(a) + str(b)
        token_md5 = md5(token.encode("utf-8")).hexdigest()

        if token_md5[1] == token_md5[14] and token_md5[14] == token_md5[17]:
            # if int(token_md5[1]) + int(token_md5[14]) + int(token_md5[17]) / int(token_md5[1]) == int(token_md5[31]):	# 是照着条件写出来的,但是有问题,为了不耽误睡觉,就没有改着一行
            print('token:{}'.format(token))
            print('token+md5:{}'.format(token_md5))

但是由于有一个限制条件没有写出来,所以跑出来有几个结果:

在这里插入图片描述
然后再一个一个试(爆破又爆破),最后得到 ?token=3j 是正确的,得出flag。


二、命令执行 web29

先来看题目:
在这里插入图片描述

查找一下preg_match函数:

参考: https://www.php.cn/php-weizijiaocheng-381228.html

利用preg_match函数可以进行字符串匹配,!preg_match(“/flag/i”)说明传入的参数中不可以带有 ‘flag’,可以用占位符?或者*代替。

通过eval函数可以执行传入的c,比如传入c=phpinfo();

提示 由于在php环境下,传入的参数要带上 ;

在这里插入图片描述
查看当前目录下文件,发现flag.php:

在这里插入图片描述
将flag.php 复制到 f.txt:

payload:url?c=system(“cp fla*.php f.txt”);

得出flag:

在这里插入图片描述


三、命令执行 web30

参考链接:https://www.bilibili.com/video/av927657095/

先来看题目:在这里插入图片描述
相对于上一题,传参多过滤掉了 一个 ‘php’,但是在php中可以执行命令的函数有很多,由于对php不是很熟,所以去查了一下,参考链接:PHP命令执行函数

可以使用passthru函数来替代system函数,比如出传入?c=passthru(‘ls’);
(别忘记分号)

可以查看当前目录下的文件,有flag.php,但是flag和php都不可以用qaq
在这里插入图片描述
然后就暂时琢磨不明白了,看了狐狸师傅的视频才知道echo 加上两个`; 是可以执行``里的内容的。当然本题的payload有很多,可以多去尝试学习一些。
上一题是copy flag.php到f.txt,然后查看f.txt得出了flag。所以在本题中也可以将flag.php的内容复制到f.txt中:

构造payload(下方红色的字时由于``在博客里会把字体变红):

?c=echo cat ????.??? >> f.txt;

再访问f.txt即可得出flag:

在这里插入图片描述
为什么不直接cat ???.???呢,是因为flag是flag.php一个变量,cat ???.???会执行flag.php而不会输出其中的内容,是这样的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值