natas(28-34)(终章)

本文介绍了natas系列挑战中28至34关的解决过程,涉及ECB加密模式的攻击、SQL注入等技术。作者通过分析源码和尝试不同payload,揭示了如何利用ECB加密的特性构造SQL注入,以及在后续关卡中利用Perl语言的特性进行命令注入和文件上传漏洞的利用,最终成功过关。

natas28
这题是真的难,密码不懂的我真的有点懵逼,好在Q童鞋不嫌我问题弱智,很耐心的替我解答,在此祝TA恭喜发财!

这题打开之后什么都没有,源码也看不到了,只有一个搜索框,而搜索的是笑话库,根据提交的字符串,随机返回含有字符串的笑话。
POST提交明文,返回一个GET的url,值是明文与sql语句组合后被加密的内容,随便提交几个值,会发现解码(url和base64)后的长度相同,然后不知道怎么进行下去了。查看外网的wp,看了很久才理解了一些。
https://blog.anshumanonline.com/natas29/
http://s0hungry.com/2017/08/27/over-the-wire-natas28-security-puzzle/
http://alkalinesecurity.com/blog/ctf-writeups/natas-28-getting-it-wrong/

视频:
https://www.youtube.com/watch?v=qpC2sNcRj5o

这是一个ECB加密的攻击

ECB(Electronic Codebook,电码本)模式是分组密码的一种最基本的工作模式。在该模式下,待处理信息被分为大小合适的分组,然后分别对每一分组独立进行加密或解密处理。
由于所有分组的加密方式一致,明文中的重复内容会在密文中有所体现,因此难以抵抗统计分析攻击。

对于这种加密可以利用其分组的特性来针对组来攻击。
首先我们要知道它的分组大小,一般AES是要求16个字节为一块的,而ECB属于AES加密。我们可以对其进行验证,构造‘A’64的提交数据,对返回值解密后找到重复的部分(’\xf63\xe6\xb0_\x86b&\xb8c\x81q\x12\xb1\xc9+\xf63\xe6\xb0_\x86b&\xb8c\x81q\x12\xb1\xc9+\xf63\xe6\xb0_\x86b&\xb8c\x81q\x12\xb1\xc9+’),长度为48,重复部分为163。由此可知加密是以16个字符为一组的。

后台构造的sql语句大概类似于SELECT * FROM TABLE where content like “$_REQUEST”,我们需要绕过引号来构造sql注入。

因为POST提交的数据是在引号内的,所以是做不了文章的。所以只能考虑GET部分,它的内容是POST返回回来的完整sql语句,这就意味着存在修改的可能性。

我们希望将其修改成SELECT * FROM TABLE where content like “$_REQUEST” Union SELECT password FROM USERS #

sql是明文的话,就直接修改即可。虽然被加密了,但ECB有个特性就是各组之间独立无关的,这就需要插入的内容必须为完成的若干组,同时需要把前后不足一组的地方给补齐了。

所以我们思路为:使【SELECT * FROM TABLE where content like “$_REQUEST”】为独立整组,然后得到【Union SELECT * FROM USERS #】被ECB加密后的内容,插入其中即可。

现在需要找出前半部分缺少多少个字符为一整组,胖友给我解释的是:多次输入可以看到解码后的值,前42个字符是相同的,由于块长是16,42=10+16*2,所以前面缺少的字符是10。但本人比较愚笨,不是很能理解这种方式。

于是找到了另一种其他博主提供的方式:
之前构造’a’ * 64已经知道了’a’ * 16被ECB加密的内容STR(b64解密后的)
  如果放入’a’ * (16 + b)时(b64解密后的)query中恰好出现了STR,那么就可以证明前半部分缺b个字符
  因为此时b个’a’正好填补了之前的组,使得恰好有’a’ * 16被独立成组加密了。
  b的取值范围为0-15,爆破可知得10

而且前半部分为3组48个字符。

这样就可以构造‘a’*(10-sql语句后部)就可以满足所需为整组了。这里的sql语句后部为两个字符(%’),它实际执行的是类似于“… WHERE joke_body LIKE’%{escaped_query}%’…”

提交后记下base64解码后的query。

下一步就是将我们的payload加密后的内容和前面进行拼接了。

我们添加的内容也需要是整组的,因此我们需要对payload进行添加字符(其实并没有影响,payload后面有注释符),提交’a’*10 +payload +offset
然后截取返回值base64解码后的第48个字符起(前三组),长度len(payload+offset)的字符,把截取部分插入到之前query的第48个字符后,提交即可。

脚本是网上大大提供的:

import base64
import requests
from urllib.request import quote, unquote
import re

#from pwn import *

natas_url = "http://natas28.natas.labs.o
(1)普通用户端(全平台) 音乐播放核心体验: 个性化首页:基于 “听歌历史 + 收藏偏好” 展示 “推荐歌单(每日 30 首)、新歌速递、相似曲风推荐”,支持按 “场景(通勤 / 学习 / 运动)” 切换推荐维度。 播放页功能:支持 “无损音质切换、倍速播放(0.5x-2.0x)、定时关闭、歌词逐句滚动”,提供 “沉浸式全屏模式”(隐藏冗余控件,突出歌词与专辑封面)。 多端同步:自动同步 “播放进度、收藏列表、歌单” 至所有登录设备(如手机暂停后,电脑端打开可继续播放)。 音乐发现与管理: 智能搜索:支持 “歌曲名 / 歌手 / 歌词片段” 搜索,提供 “模糊匹配(如输入‘晴天’联想‘周杰伦 - 晴天’)、热门搜索词推荐”,结果按 “热度 / 匹配度” 排序。 歌单管理:创建 “公开 / 私有 / 加密” 歌单,支持 “批量添加歌曲、拖拽排序、一键分享到社交平台”,系统自动生成 “歌单封面(基于歌曲风格配色)”。 音乐分类浏览:按 “曲风(流行 / 摇滚 / 古典)、语言(国语 / 英语 / 日语)、年代(80 后经典 / 2023 新歌)” 分层浏览,每个分类页展示 “TOP50 榜单”。 社交互动功能: 动态广场:查看 “关注的用户 / 音乐人发布的动态(如‘分享新歌感受’)、好友正在听的歌曲”,支持 “点赞 / 评论 / 转发”,可直接点击动态中的歌曲播放。 听歌排行:个人页展示 “本周听歌 TOP10、累计听歌时长”,平台定期生成 “全球 / 好友榜”(如 “好友中你本周听歌时长排名第 3”)。 音乐圈:加入 “特定曲风圈子(如‘古典音乐爱好者’)”,参与 “话题讨论(如‘你心中最经典的钢琴曲’)、线上歌单共创”。 (2)音乐人端(创作者中心) 作品管理: 音乐上传:支持 “无损音频(FLAC/WAV)+ 歌词文件(LRC)+ 专辑封面” 上传,填写 “歌曲信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值