ctf2

F12发现只能上传,jpg,png文件,

且给出提示,python 的文件
<!-- Give me the file, and I will return the Running results by python to you! -->
确实应该想到写一个python然后在重名为png格式提交
但是即便这样可能写代码还是不知道写什么上去
import os
os.system('find /* | grep flag')
解释:
os 是python 的一个头文件,主要操作文件,文件夹
下面列出一些函数:
os.getcwd() 获取当前工作的路径
os.listdir(path) 传入任意一个path路径,返回的是该路径下所有文件和目录
组成的列表
os.walk(path) 传入任意一个path路径,深层次遍历指定路径下的所有子文件夹,返回的是一个由路径、文件夹列表、文件列表组成的元组。
os.mkdir(path) 传入路径创建文件夹
os.rmdir(path) 传入一个path路径,删除指定路径下的文件夹
os的system原理:
system函数可以将字符串转化成命令在服务器上运行;其原理是每一条system函数执行时,其会创建一个子进程在系统上执行命令行,子进程的执行结果无法影响主进程
用来解释命令很合适,find /* | grep flag 表示在根目录下,通过管道来寻找有关flag的目录文件

<!-- /flag
/proc/sys/kernel/acpi_video_flags
/proc/sys/kernel/sched_domain/cpu0/domain0/flags
/proc/sys/kernel/sched_domain/cpu0/domain1/flags
/proc/sys/kernel/sched_domain/cpu1/domain0/flags
/proc/sys/kernel/sched_domain/cpu1/domain1/flags
/proc/sys/kernel/sched_domain/cpu2/domain0/flags
/proc/sys/kernel/sched_domain/cpu2/domain1/flags
/proc/sys/kernel/sched_domain/cpu3/domain0/flags
/proc/sys/kernel/sched_domain/cpu3/domain1/flags
/proc/kpageflags
/sys/devices/pnp0/00:04/tty/ttyS0/flags
/sys/devices/pnp0/00:05/tty/ttyS1/flags
/sys/devices/virtual/net/lo/flags
/sys/devices/virtual/net/eth0/flags
/sys/devices/platform/serial8250/tty/ttyS2/flags
/sys/devices/platform/serial8250/tty/ttyS3/flags
/sys/module/scsi_mod/parameters/default_dev_flags -->
大致会出来这些东西,然后看到/flag
写一个os.system('cat /flag')即可继续提交
看到

就可以了
简单的图片
下载后,用记事本打开,
&#107;&#101;&#121;&#123;&#121;&#111;&#117;&#32;&#97;&#114;&#101;&#32;&#114;&#105;&#103;&#104;&#116;&#125
而&#xxx; 著名的html实体编码所以接下来在改成html
打开之后可得

隐写
给了这么一个图片,让你找flag
我看到预览图后面确实有字,但是打开之后就没了

一般我们会想到图片的高度的问题
使用的工具一般提及的是
winhex以及tweakpng
这两个工具,下载的话,网上搜索的话是很容易的,当然我还留着的话你问我我可以给的
那么怎么写这个题呢,我第一开始的思路,是换成文本看看
发现并没有什么可以看到的有用的信息,基本是乱码
那么评论说使用winhex看看,我试试
WinHex打开图片,“89504E0D0A1A0A”说明这是PNG图片,“0000000D”表示IHDR头部是13个字节,“000001F4”是宽度,“000001A4”是高度(以像素为单位),修改A4为F4,保存查看图片

修改之后就有了

补充:
winhex到底是这个什么工具呢,能干设么呢
看二进制数据的
可能有部分的数据损坏了,对其二进制数据进行修改可以修复或者有不一样的效果
图像二进制文件在表达什么:
直接看博客学习就好,了解
给出一些例子
2.2.1、第0行开始:

文件署名域:开头"8950 4e47 0d0a 1a0a"固定数据表示文件格式是PNG ;
第一个数据块:文件头数据块IHDR(含有PNG文件中存储的图像数据基本信息,是关键数据块):
Length:前4个字节"0000 000d"代表IHDR块长度为13字节(可变);
Chunk Type Code:固定4个字节数据为"4948 4452"(为IHDR标识,该ASCII码代表英文字符"IHDR");
Chunk Data:IHDR数据块的具体内容如下:
0000 04D0图像的宽,1232像素
0000 0404图像的高,1028像素
08 表示色深,这里是2^8=256,即这是一个256色的图像
00 颜色类型,查表可知这是灰度图像
00 PNG Spec规定此处总为0(非0值为将来使用更好的压缩方法预留),表示使压缩方法(LZ77派生算法)
00 同上
00 非隔行扫描
可知总长度正好是13字节。
CRC校验码:最后4个字节为:9E F6 B9 00
2.2.2、第20行,offset=01开始:tIME数据块(辅助数据块),包含文件最后修改时间信息;只需该知道数据块长度为7,数据块类型码为"74 49 4D 45",跳过7(data)+ 4(CRC)个字节后是新的数据块IDAT;

2.2.3、第30行,offset=04开始:IDAT数据块(关键数据块),包含最重要的图像实际内容。长度为"00 00 20 00",8192个字节;数据块类型码为"49 44 41 54";注意由于图片总共有1232x1028个像素,每个像素占1字节,因此应当有1232x1028/8192 = 155 个IDAT数据块,每个数据块后都有4个字节的CRC校验码;
2.2.4、第33029行,offset=02开始:实际数据长度为0的IEND数据块(关键数据块),代表文件内容的结束,通常固定为"00 00 00 00 (数据块长度)49 45 4E 44(数据块类型码) AE 42 60 82(CRC)"。PS:在IEND块后面添加任何的字符都不会对文件打开造成影响。

3.bmp格式
注意:文件中所有数据都是以字节为单位,低位在前,读实际数据时需要以字节为单位反序读取。

数据段名称 大小(Byte)
bmp文件头 14
bmp信息头 40
调色板信息 由颜色索引数决定
位图数据(有效数据) 由图像真实分辨率决定
bmp文件头数据结构:
bmp信息头数据结构:
文件中具体内容:

在读取真实像素数据时,参数bfOffbits是最重要的,能快速定位数据所在位置,这对于实际应用来说最直截了当。如图中地址偏移量(红色框)实际为0x00_00_04_36 = 1078d,水平方向像素个数为0x00_00_04_D0 = 1232d,垂直方向像素个数为0x00_00_04_04 = 1028d,灰度图位深为8,符合要求-》https://blog.csdn.net/swordjun/article/details/108667926
1和0 的故事
给的是一个文本文件

首先我想的是看看图片文件如何
是破损的文件,不太适合,毕竟都是0和1,二进制文件?
评论说放在excel里面,我试试(还有说用python暂时不研究,不够都挺神奇的)
数据是25行25列 -》想到二维码
以字符串的形式放在excel里面
那么使用excel的一些方法将睡着分裂


然后设置行高15.1,列宽2

使用ctrl+H 替换


使用查找的时候,在下拉框中选中所有,即可定位所有的1
然后将选中的1替换背景为黑色
如图:

这里如果有左上角的绿三角的话,一般是类型错误,可以全选然后忽略就好
然后就可以扫码了,如果不可以扫的话,那么你可以试试调整行高
二维码是怎么生成:
二维码原理: