Code's principle

Hex编码

编码原理

Hex编码就是把一个8位的字节数据用两个十六进制数展示出来,编码的时候,将8位二进制码重新分组成两个4位字节,其中一个字节的低4位是原来字节的高4位,另外一个字节的低4位是原来数据的低四位,高4位都补零,然后输出这两个字节的对应16进制数字作为编码。Hexo编码后的长度是源数据的2倍。
C:\Users\hp\MyEclipse\Common\binary\com.sun.java.jdk.win32.x86_64_1.6.0.013\bin\javaw.exe

  1. Hex编码的编码表
    在这里插入图片描述
  2. **ASCII码A的 Hex编码的过程
    在这里插入图片描述

    编码

    bin码

    bin码就是二进制码,文件名的后缀为 .bin

    ASCII码

    ASCII码就是把他们看成字符来对待,每8个bit位来存储一个字母,所以说一个字母占用一个字节,同样由于编码原因,一个汉字占用两个字节。

    BCD码

    BCD码就是从低位开始,每4个bit表示一个位数,BCD码就是十进制的二进制数。

    Base 64

    Base 64编码就是要求把3个8位字节,转化为4个6位字节,之后在6位的前面补两个0,形成8位一个字节的形式。
    例如
    11010101 11000101 00110011
    转化后:
    00110101 00011100 00010100 00110011
    用十进制表示即为: 53 34 20 51
    这个并不是最终的结果,还需要根据Base 64的编码表 查询转换后的值,
    下面就是Base 64 的编码表:
    在这里插入图片描述
    以上一共是64个编码,这也是Base 64 的名称的由来,编码的编号对应的是得出的新字节的十进制值。因此,上例中字符串经过编码后就变成了字符串 “liuz”了。
    当编码量不是3的整数倍的时候,代码量/3的余数就是2或者1了。转换的时候,结果不够6位的用 0 来补上相应的位置,之后在6位的前面补两个0。转换完空的结果就用“=”来补位了。

Exif

Exif图片隐写

对于这一道题目,我先是在网上查找了exif的在线转换器,然后并没有发现什么特殊的信息,通过提示然后,使用ExifTool进行解决题目

首先是什么是Exif
可交换图像文件格式常被简称为Exif(Exchangeable image file format),是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。Exif 可以被附加在 JPEG、TIFF、RIFF 等文件之中,为其增加有关数码相机拍摄信息的内容和缩略图或图像处理软件的一些版本信息。

ExifTool的安装

百度搜索即可找到
下载之后,在安装的文件夹下,执行exiftool的命令
1、先是打开图片文件
exiftool 图片路径/图片名.jpg
可以查看到图片的信息
在这里插入图片描述

#解析出来的信息的理解
查看网上的信息,解释的这种类似题目的解题思路一般是查看File Type,对比自己解析出来的信息,File Type并没有什么特殊的地方,这个题目是编码的问题。
于是仔细的查看解析出来的数据,根据自己对编码的理解进行对照,找到了跟ASCII码最为相似的Credit .
于是尝试破解:

   #include <iostream>
   using namespace std;

    int main()
 {
int arr [22] = {102,108,97,103,123,101,120,105,102,95,
104,105,100,100,101,110,95,102,108,52,103,125};

for(int i =0;i<22;i++)
{
    char a = arr[i];
    cout<<a;
}
return 0;
}

尝试执行后:flag{exif_hidden_fl4g}

git+hexo

#git 上面部署hexo

##准备工作
首先安装好npm,git的客户端,在git上面搭建一个最基本的blog,
配置好ssh key,确保可以正常连接git,这个就不多说了,网上有很多相关的资源,
这里主要说一下在git上面部署hexo的过程以及出现的问题。

##安装hexo
执行命令 npm install -g hexo

##初始化
在电脑的某个地方新建一个名为hexo的文件夹(名字 可以随便取),比如我的是D:\hexo,由于这个文件夹将来就作为你存放代码的地方,所以最好不要随便放,执行以下代码:

$ hexo init

hexo会自动下载一些文件到这个hexo的文件夹内,我们主要 用到的是source(用来存放博客),themes(用来存在主题),_config.yml (配置文件)。
执行以下语句
$ hexo g

$ hexo d
最后执行
$ hexo s
启动本地预览服务,然后浏览器输入 localhost:4000就可以看到预览效果了
【注意事项】如果是不能预览,一直在打转很有可能是4000端口被占用,这时候就要修改一下端口
$ hexo server -p 5000
可以访问到最基础的hexo已经帮你写好的博客。

##修改主题

  1. 首先是去官网找到自己喜欢的那一个主题 https://hexo.io/themes/
  2. 然后执行代码
    $ git clone 主题的连接
    下载后的主题在theme里面(在寻找主题的时候,里面都有说明如何复制主题过去)
  3. 配置文件
    修改_config.yml中的theme: landscape改为theme: yilia,然后重新执行hexo g来重新生成。这时候就会出现public文件夹。
    配置_config.yml中有关deploy的部分:
    deploy:
    type: git
    repository: git@github.com:CattleZ/CattleZ.github.io.git
    branch: master
  4. 此时直接执行hexo d的话一般会报如下错误:
    Deployer not found: github 或者 Deployer not found: git
    【解决方法】
    1. 安装插件
      npm install hexo-deployer-git –save
    2. 查看自己的hexo的版本
      文档说hexo3.0后需要在 _config.yml 中设置 deploy中的type为git(过去是github
  5. 然后执行hexo d 就可以啦

对于XSS的学习过程,已经更新在CSDN博客

题目分析

这道题目告诉我们flag在admin.php中,只有admin才能获取它,我们点击进去之后发现并没有flag,这是为什么呢?因为我们不是admin,因此,我们必须伪装成admin。
题目的下面有一行代码,substr((md5(‘proof of work’),0,6) === ‘4b3392’)
这一行代码的意思是截取经过MD5编码的工作量的前6个数字。
proof of work百度的是区块链中的工作量证明:在区块链中,Pow代表的是一种运作机制,这种机制强制要求财富的获取方式只能是通过劳动所得,也就是算力运算-挖矿。我的理解就是得到的结果是通过大量的运算得来的。
这块也是参考了很多的资料,因为对这一部分不是特别的理解。
在这里插入图片描述
这块是随机的,我们接下里破解一下

  • 尝试使用proofofwork这个软件破解来着,但是没有安装成功。(明天更新了python在试一下)
  • itertools暴力解决
1
2
3
4
5
6
7
8
9
10
11
12
import hashlib
from itertools import count

mes = 'admin'
for i in count():
md = hashlib.md5()
str1 = str(i)
md.update(str1.encode('utf-8'))
hashid = md.hexdigest()
if hashid.startswith('384216'):
print(str1)
break

将跟随机产生的字符串能匹配上的字符串打印出来,输入到MD5的输入框里面
就显示,提交成功了。
但是点击之后是空白的界面。
在这里插入图片描述

  • token了解
    token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。
    当用户第一次登录后,服务器生成一个token并将此token返回给客户端,以后客户端只需带上这个token前来请求数据即可,无需再次带上用户名和密码。
    简单token的组成;uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token的前几位以哈希算法压缩成的一定长度的十六进制字符串。为防止token泄露)。
  • 获取token
    通过在线注册XSS平台,在怀疑会出现XSS的地方植入代码,获得token信息。
  • 假冒admin,更改cookie的信息

    通过使用burp抓包

    使用过程简略,找到cookie之后,我们要在把token的值拼接上去,forward就可以了,在admin界面中就会出现Cookie的值。