题目链接

http://ctf5.shiyanbar.com/web/jiandan/index.php

有源码在test.php页面

分析代码过程

如果post id,将id转字符串,然后进入sqliCheck函数,

如果函数返回true,就停了,

否则,将id转成array

然后到login函数

这里将$info序列化,然后aes加密,进行base64后,进行setcookie

这里也就得到了,抓包发现的那个

这里要注意的是,它的逻辑是,如果你输入有id,那是不会检查你的cookie的,也就是说,有id的情况下,是不会执行sql语句的,也就是会一直显示那个Hello

如果没有post id,那就检测cookie,

如果存在iv,和cipher 那就进入show_homepage();

将两个参数base64解密,然后用openssl_decrypt()将密文解密,再进行反序列化,然后进行sql查询

进过上面的分析得知,过滤了很多函数,其实最重要的是过滤了#号和-号,这样子就无法

将那段sql语句后面的,0注析掉了

所以只能在cookie处入手

这里用到CBC反转攻击

参考文章http://sec.chinabyte.com/228/13511728.shtml

文章的例子

第一块的密文用来生成后一块明文

也就是说要修改第一块的密文

6对应的第一块的明文是2,偏移量为2

在题目中,我们知道的是密文,还有偏移量,第一段的明文,那就可以修改明文的数据

参考P神的writeup中的,输入id = 12

得到的$info和$cipher

得到偏移量为4

相对应的第一块为}

我们尝试将2换成#,起到注析后面语句的作用

得到新的cipher

返回源码看

是无法进行序列化

并得到了一个新明文

无法进行序列化是因为iv不正确

那根据 新iv = 原iv^原明文^新明文  可以得到新的iv

也就是成功将2修改成#号了

但是这里有一个问题就是,虽然#号可以注析后面的语句,但是一旦我们的语句很长,那我们要修改的密文就可能不是第一块了,那就会导致翻转很麻烦,那就是想办法用其他方式注析掉后面的语句,这里可以用%00截断(和改包上传的原理一样),这里不可以直接将%00写到payload里面去,因为会被解码的,所以可以当是一个不可见字符,用python的chr(0)写入。

将上面的逻辑整理一下

1、输入id,访问得到iv和cipher

2、将cipher内容改变,然后去掉id,将iv和新cipher加到cookie里面去访问,显示无法序 列化,得到明文,然后要获取新iv  新iv = 新明文^原明文^原iv

3、将新cipher和新iv添加到cookie里面,再次访问,成功反序列化,进行sql查询

按照上面的思路,写脚本

第一次获取iv和cipher

访问请求得到新明文

获取新iv

再次访问Niepost执行SQL语句

所以程序运行顺序就是

(这是本地搭建的)

详细代码在我的GitHub: https://github.com/niechaojun/CBC-flip-attack/

CBC翻转攻击(实验吧_简单的登陆题)的更多相关文章

  1. 于bugku中游荡意外得到关于CBC翻转攻击思路

    个人简介:渣渣一枚,萌新一个,会划水,会喊六六今天在bugku遇到关于CBC翻转攻击的题目,总结了一下关于CBC翻转攻击的原理,以及关于这道题目的解题思路个人博客:https://www.cnblog ...

  2. CTF实验吧-WEB题目解题笔记(1)简单的登陆题

    1.简单的登陆题 解题链接: http://ctf5.shiyanbar.com/web/jiandan/index.php  Burp抓包解密 乱码,更换思路.尝试id intruder 似乎也没什 ...

  3. 实验吧_简单的sql注入_1、2、3

    简单的sql注入1 看着这个简单的界面,一时间没有特别好的思路,先输入一个1',发生了报错 初步猜测这是一个字符型的注入,他将我们输入的语句直接当成sql语句执行了,按题目的意思后面肯定过滤了很多注入 ...

  4. Padding Oracle 和 CBC字节翻转攻击学习

    以前一直没时间来好好研究下这两种攻击方式,虽然都是很老的点了= =! 0x01:Padding oracle CBC加密模式为分组加密,初始时有初始向量,密钥,以及明文,明文与初始向量异或以后得到中间 ...

  5. 实验吧之【简单的登录题(】CBC字节反转攻击)

    开始刷ctf题吧  慢慢来. 实验吧---简单的登录题 题目地址:http://ctf5.shiyanbar.com/web/jiandan/index.php 随便提交一个id,看到后台set了两个 ...

  6. CBC字节翻转攻击

    iscc2018线上赛开始两周多了,学到了很多,写几篇文章总结一下遇到的知识点,做一个归纳,方便以后查找. web300-----CBC字节翻转攻击 cbc是AES加密的cbc模式 即密码分组链模式: ...

  7. CSAPP缓冲区溢出攻击实验(上)

    CSAPP缓冲区溢出攻击实验(上) 下载实验工具.最新的讲义在这. 网上能找到的实验材料有些旧了,有的地方跟最新的handout对不上.只是没有关系,大体上仅仅是程序名(sendstring)或者參数 ...

  8. CSAPP缓冲区溢出攻击实验(下)

    CSAPP缓冲区溢出攻击实验(下) 3.3 Level 2: 爆竹 实验要求 这一个Level的难度陡然提升,我们要让getbuf()返回到bang()而非test(),并且在执行bang()之前将g ...

  9. CSAPP lab3 bufbomb-缓冲区溢出攻击实验(上)smoke fizz

    前言 完成这个实验大概花费一天半的时间,看了很多大佬的博客,也踩了很多的坑,于是打算写一篇博客重新梳理一下思路和过程,大概会有两篇博客吧. CSAPP lab3 bufbomb-缓冲区溢出攻击实验(上 ...

随机推荐

  1. MYSQL数据库学习十四 存储过程和函数的操作

    14.1 为什么使用存储过程和函数 一个完整的操作会包含多条SQL语句,在执行过程中需要根据前面SQL语句的执行结果有选择的执行后面的SQL语句. 存储过程和函数的优点: 允许标准组件式编程,提高了S ...

  2. 理解python的元类

    看了一篇文档,借鉴一下!写下自己对python元类的理解,欢迎各位大神给出意见. 我的理解就是 type用来创建元类,元类用来创建类,类用来创建实例 这样一想,是不是可以认为元类创建类的过程等同于类创 ...

  3. C#设置和获取系统环境变量

    C#设置和获取环境变量 1.前言 本来想拿学校机房的Android编辑器直接粘到自己电脑上用,发现它的eclipse是 32位的,而我的JDK是64位的,于是想到干脆装两个JDK,用C#做一个能够更改 ...

  4. 如何在IOS上调试Hybrid应用

    最近在找关于在xcode上调试Hybrid应用的方法,比如我想进行断点调试.日志打印.屏幕适配等等,刻意去搜了下方法,虽然之前已经大致知道了,这里系统归纳一下,原文在https://developer ...

  5. Sweet Butter 香甜的黄油

    Sweet Butter 香甜的黄油 题目大意:m个点,n头奶牛,p条边,每一头奶牛在一个点上,一个点可以有多只奶牛,求这样一个点,使得所有奶牛到这个点的距离之和最小. 注释:n<=500 , ...

  6. Loadrunner使用时IE浏览器打不开怎么办

    1.ie浏览器去掉启用第三方浏览器扩展 2.loadrunner11 键盘F4,在browser Emulation点击change,在弹出的提示框中Browser version 选择8.0,pla ...

  7. C语言博客作业--嵌套循环

    一.PTA实验作业 题目1:7-4 换硬币 2 .设计思路 第一步:定义3个整型变量i,j,k用于循环,定义3个整型变量x,count,total分别用于储存零钱数额,换法个数,硬币数量: 第二步:输 ...

  8. Alpha集合

    项目名称:城市安全风险管控系统 小组成员: 张梨贤.林静.周静平.黄腾飞 Alpha冲刺随笔 Alpha冲刺Day1 Alpha冲刺Day2 Alpha冲刺Day3 Alpha冲刺Day4 Alpha ...

  9. Beta预备会议

    1. 讨论组长是否重选的议题和结论. 我们小组决定组长更换为林洋洋同学,他Web开发经验比较丰富,对任务的分配会更加明确,由于上一阶段中存在进度偏慢的问题,我们希望在Beta阶段通过更好的分工安排来保 ...

  10. xcode进行代码覆盖率测试

    去年写的文章,搬到cnblog 本文所述的方法只对xcode5做过测试,xcode6是否可行尚未可知. 配置编译选项 首先请参考苹果官方的文档Configuring Xcode for Code Co ...