bugku杂项

1.签到

扫面二维码

2.这是一张单纯的图片

十六进制文本打开,发现html编码,复制打开得到flag

3.隐写

使用010编辑器,安装png模板,修改图片高度,得到flag

4.telnet

使用 wireshark搜索flag。

5.眼见非实(ISCCCTF)

二次解压,获得flag

6.啊哒

该题就有些难度了,

1.查看图片详细信息,照相机型号里面找到一串ascii码,解码得:sdnisc_2018

2。使用foremost从图片中剥离zip文件。用以上密码打开。

7.又一张图片,还单纯吗

使用foremost 分离出flag

8.猜

百度搜图,搜到是刘亦菲 。输入

9.宽带信息泄露

百度搜索路由配置解密工具:routerpassview,解密即可

10.隐写2

用foremost解析,得到一个zip,里面还有个压缩包和一个图片

图片提示密码三位数,爆破 fcrackzip 或者 ARCHPR都可以爆破,改文件实际是ZIP文件

得到3.jpg。在文件结尾得到flag字符串,但是最后还要进行一次base64

11.多种方法解决

把base64丢到网上去解码图片,扫描二维码拿到flag

12.闪的好快

1.修复图片高度为280
2.分割图片为单独图片,分别扫二维码得到flag

13.come_game

发现是个游戏,打开游戏桌面有个存档文件,对比存档文件发现第三个字节为关卡,慢慢修改按R,得到flag{6E23F259D98DF153}

奇怪的是无法提交,百度搜索一下发现 SYC{6E23F259D98DF153},官方无任何提示格式的地方。。。

14.linux

下载文件cat一下,拿到flag

15.隐写3

用010editor修改图片高度,拿到flag

16.做个游戏(08067CTF)

下载是个jar文件,使用jd-gui对其进行源代码查看,拿到flag,base64

17.想蹭网先解开密码

1.构造字典:根据题意用crunch工具构造字典

crunch 11 11 -t 1391040%%%% > 1.txt

2.利用kali工具爆破密码,可惜是wpa的,也只能是wpa的。

aircrack-ng -w 1.txt wifi.cap

18.Linux2

1.用foremost打开,发现个假flag
2.用cat flag | grep -a KEY{ 找到flag

19.账号被盗了

1.抓包发现Cookie: isadmin=false 改为true,给个下载地址

下载文件后使用,WSExplorer 1.3抓包,得到网易邮箱账号密码,登录后得到flag。

20.细心的大象

1.foremost 得到rar但没有密码
2.把图片丢到linux grep 一下key 发现个base64的密码。
3.解压缩rar得到3.png,修改图片高度得到flag

21.爆照(08067CTF)

1.用foremost找到zip,很多个8的图片
2.二维码2张 图片信息包含base64一张。
得到flag{bilibili_silisili_panama}

脑洞有点大

22.猫片(安恒)

提示为LSB BRG NTFS

这题就比较牛逼了,先用Stegsolve,发现LSB,BGR里面藏有一个png图片,然后得到一张二维码,用010editor修复后反色扫描。

得到一个url,打开下载后告诉你这不是flag,然后还必须用WinRAR解压压缩包,得到一个flag.txt,接着用NtfsStreamsEditor2找到隐写的flag.pyc,通过网上解密程序得到python源文件,然后读代码编写解密脚本得到flag!!!!

23.多彩

1.通过Stegsolve查看得到PK.zip

发现压缩包里面有个flag.txt 还要输入密码,双击打开提示压缩包损坏,怀疑压缩包被修改

放弃,这题看了题解,目前觉得这题脑洞太大,我暂时接受不了。

24.旋转跳跃

这题纯粹考验工具会不会用。。。

使用 MP3Stego

Decode.exe -X -P syclovergeek sycgeek-mp3.mp3 得到flag

25.普通的二维码

二维码丢到十六进制文本编辑器当中,文件后面发现一串八进制代码,解码得到flag

26.乌云邀请码

LSB 隐写。勾选000 和 BGR得到flag

27.神秘的文件

明文破解zip使用工具:Advanced Zip Password Recovery || 又称 AZPR

zip密码通过对比正确文件爆破 得到.docx 改成.zip解压,base64后得到flag

28.图穷匕见

  1. jgp文件结尾:FF D9 后面跟着一大串数字,ASCII解码一下,得到一堆坐标数据

运行 gnuplot

执行 plot “point.txt”
内容按照格式
x y
x y
去掉逗号和括号

29.convert

1
2
3
4
5
6
import struct
aa="01110101字节"
with open ("1.txt","wb+") as f:
for i in range(0,int(len(aa)/8)):
s = int(aa[i*8:i*8+8],2)
f.write(struct.pack('B',s))

编写脚本将数据转16进制再写入到文件,发现是个rar压缩包,解压得到key.jpg,在详细信息找到个base64解码得到flag

30.听首音乐

1.用音频工具打开文件,发现莫斯编码,解码后得到flag

31.好多数值

看到一堆rgb,用脚本跑出图片长和宽,再用脚本显示图片:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from PIL import Image
##2 30683.0
##61 1006.0
##122 503.0
##503 122.0
##1006 61.0
im = Image.new("RGB",(503,122))
file = open('color.txt') #打开rbg值文件
for i in range(503):
for j in range(122):
s=file.readline()
s=s.split(",")
im.putpixel((i,j),(int(s[0]),int(s[1]),int(s[2])))
im.show()

32.很普通的数独(ISCCCTF)

这题脑洞真大。5X5 一共 25张数独,是一个二维码阵列。。

33.PEN_AND_APPLE

ntfs流,用到工具AlternateStreamView,但是似乎是题目有问题,给的一个mp4.应该给一个rar才对。

34.color

给了7张图片,用stegsolve打开每张图片,得到提示 makemetall,加高图片长度,得到7个字节的排列。转ascii码 得到flag

35.好多压缩包

该题太难。。。。

36.一个普通的压缩包

看了writeup,不知道为什么是改那一位 现在记下来:

7c改为74 即可

bugku 流量分析

1.flag被盗了

拿到一个key.pcapng

首先是熟悉Wiresharrk这个软件,可以通过追踪http流,发现传输一个text文件,才从里面发现flag

2.中国菜刀

该题考点是流量分析,找到最后一个http,进行追溯,发现一串base64,查看执行代码。

得到X@Y + flag.tar.gz + X@Y

提取解压

3.这么多数据

1.len为0的不看,为端口扫描数据
2.追踪过的端口不再追踪
3.注意wireshark的颜色变化

4.手机热点

1.用foremost直接拿到rar里面的flag
2.用wireshark分析里面存在一个secret.rar ,提取数据,找到flag图片

5.抓到一只苍蝇

搜索flag.,发现用户上传一个fly.rar,大小为527521字节

{“path”:”fly.rar”,”appid”:””,”size”:525701,”md5”:”e023afa4f6579db5becda8fe7861c2d3”,”sha”:”ecccba7aea1d482684374b22e2e7abad2ba86749”,”sha3”:””}

跟踪流将文件下载,提取去掉包头,拼接得到rar

下载文件时发现大小为 529341 字节

计算得到包头大小 364字节

使用dd命令切掉包头

dd if=输入文件名 bs=1 skip=364 of=输出文件名

将结构拼接成rar,打开发现报错。

发现md5值与文件对不上,发现第17位为84,可能是伪加密,将其改为80,解压得到flag.txt

查看文件结果是个exe可执行文件,用二进制文件编辑器打开,拖至最后,发现一张png图片,扫码得到flag。

注:期间使用foremost提取rar得到一个有问题的rar

最后也可以将图片丢到foremost里面,提取出二维码

PHP超全局变量

$GLOBALS

$GLOBALS : 引用全局作用域中可用的全部变量

举例:

1
2
3
4
5
6
7
8
9
10
<?php
function test() {
$foo = "local variable";
echo '$foo in global scope: ' . $GLOBALS["foo"] . "\n";
echo '$foo in current scope: ' . $foo . "\n";
}
$foo = "Example content";
test();
// 通过 $GLOBALS 可以访问之前已经定义的全局变量。
?>

QML介绍

1 什么是QML

QML是一种描述应用程序用户界面的声明式变成语言,使用一些可视化组件以及折现组件之间的交互来描述用户界面。QML一种可读性很高的语言,可以使组件以动态方式进行交互,并且允许组件在用户界面中很容易地实现复用和定义。

2 什么是Qt Quick

Qt Quick 是QML的一个数据类型和功能的标准库,包含了可视化类型、交互类型、动画、例子特效和渲染特效等。在QML应用,可以通过一个简单的import语句来使用该模块提供的所有功能。Qt Quick在Qt5中由Qt Quick 模块提供。

2018年9月28日13:35:37

前段时间发现markdown写笔记真方便,果断弃了WordPress和OneNote,这现在使用atom + git + hexo 来完成我的笔记大业,之前用OneNote写了几篇笔记,这几天把笔记慢慢慢慢转为markdown可真特么累!

这几天用了markdown,连数学公式完全OK,要逆天的节奏。

PHP简介

问题1:php能做什么

PHP主要用于以下3个领域:

  • 服务端脚本 (主要)
  • 命令行脚本(执行shell脚本等)
  • 编写桌面应用程序

对于编写桌面应用程序,PHP可能不是最适合的一门语言,但若是用户非常精通PHP脚本语言,并希望在客户端应用程序中使用PHP的一些高级特性,可以利用PHP-GTK 来编写这些程序。

注:PHP从5.0版本开始支持面向对象语言开发。

PHP 最强大最显著的特性之一,是它支持很大范围的数据库。使用任何针对某数据库的扩展(例如 mysql)编写数据库支持的网页非常简单,或者使用抽象层如 PDO,或者通过 ODBC 扩展连接到任何支持 ODBC 标准的数据库。其它一些数据库也可能会用 cURL 或者 sockets,例如 CouchDB。

TensorFlow MNIST进阶

之前MNIST 入门教程的时候,将28*28的图片直接拉伸成784维的向量有些不妥

因为图片是个二维数据,因此我们上一个MNIST入门的算法准确度只有91%

这里我们采用对图像进行卷积和池化等操作,将图片特征提取成1024 维度的图片立体数据

注:这里784维度进行卷积池化2次,第一次特征值转为32组,第二次转为64组,所以这里才是1024维度的图片数据。

TensorFlow MNIST数据集的使用

教程地址:http://www.tensorfly.cn/tfdoc/tutorials/mnist_download.html

首先需要下载input_data.py文件(其实这个input_data文件在TensorFlow中也存在)

将文件放到你的python项目目录下

再使用 以下代码 完成数据集下载:

1
2
import input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

关于MNIST数据集的介绍:

MNIST 是一组数据集,其中包括12W个手写数字的图片和正确答案(6W训练图片和答案,6W评估图片和答案)。

其图片格式和答案格式如下:

TensorFlow MNIST入门

经过整合的一段TensorFlow训练数据并测试的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import input_data
import tensorflow as tf
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
//-----------------------------以上代码主要是为了导入mnist数据-----
x = tf.placeholder("float", [None, 784])
W = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10]))
y = tf.nn.softmax(tf.matmul(x,W) + b)
y_ = tf.placeholder("float", [None,10])
//---------------------------定义各个数据的关系,以及数据的张量模型-----
cross_entropy = -tf.reduce_sum(y_*tf.log(y))
//----------------这里我们用交叉熵算法计算来预定于交叉熵变量的值--
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
//-------------梯度下降算法------最小化交叉熵----
init = tf.initialize_all_variables()
//----------初始化所有变量----------------
sess = tf.Session()
sess.run(init)
//----------创建图----启动图-----
for i in range(1000):
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
//---------------训练数据----将 100条mnist的数据读取之后 放到 batch_xs, batch_ys
//--------------- 传递给参数 x 和 参数 y -----------
//我们在上面预定义了X 张量为一个 784 — ∞ 维度的张量,代表着输入,
我们可以输入无数张图片,每张图片784个像素点
// 我们定义了一个特征值 W 张量,是一个 78410 维度的张量

TensorBoard 用法简单解析

介绍

TensorBoard是谷歌开发的一个用于实时监控Tensorflow运行状态的一款工具,它能够实时监控Tensoflow 运行过程中的计算图、各种指标随时间变化的趋势以及我们想要让他显示的各项数据。

简单的例子

在学习卷积过程中,我虽然明白了卷积的过程是为了泛化图像信息,但总是想把卷积操作后的图像显示出来,看看卷积之后得到的数据和原始图像之间是否有一些这样那样的关系。

于是乎,当我接触到TensorBorad的时候就开始研究如何显示图像,以下是一段利用TensorFlow 生成图像日志信息,采用TensorBoard显示的一段代码:

scikit-learn-常用库函数解析

scikit-learn 介绍

由于TensorFlow当前还没有集成易于生成人工数据集的方法,因此,我们可以使用scikit-learn 库来帮助我们生成人工数据集。

sklearn.datasets 模块生成数据集

sklearn.datasets.make_blobs()

地址:http://sklearn.apachecn.org/cn/0.19.0/modules/generated/sklearn.datasets.make_blobs.html#sklearn.datasets.make_blobs

简单说明: 该函数生成块状数据集,较适合训练聚类算法。

生成数据集分布类似于下图:

参数:

n_samples : int, #可选项,默认值100 # 生成样本总数量

n_features : int #可选项,默认值2#生成样本的特征(维度)

centers : int #可选项, 默认值 3 #类型表示质心数量, array 表示提供质心,如: [n_centers, n_features],

cluster_std : float or sequence of floats #可选项,默认值 1.0#标准偏差

center_box : pair of floats (min, max), 可选项 default=(-10.0, 10.0)#波动区间

shuffle : boolean, #可选项,默认True #是否将群圈起来

random_state : int, RandomState instance or None, optional (default=None)

Returns:
X : array of shape [n_samples, n_features]#生成的数据

y : array of shape [n_samples] #生成数据所属的群

使用案例

sklearn.datasets.make_blobs(n_samples=100, n_features=2, centers=3, cluster_std=1.0, center_box=(-10.0, 10.0), shuffle=True, random_state=None)

聚类与K最近邻

聚类的概念

对于没有分类的数据,首先要做的就是寻找具有相同特征的数据,将他们分配到相同的组。

为此,数据集可以分成任意数量的端,其中每个段都可以用它的成员的质量中心(质点)来表示。

为了将不同的成员分配到相同的组中,需要定义一下怎样表示不同元素之间的距离。在定义距离之后,可以说相对于其他质心,每个类成员都更靠近自己所在类的质心。

K均值

K均值(K-means)是一种常见的聚类算法,并且比较容易实现。它非常直接,一般用于分析数据的第一步。经过该处理,我们能够得到一些相关数据集的先验知识。

K均值的机制

K均值算法师徒给给定的数据分割K个不相交的组,每个组的指标就是该组所有成员的均值。这个点通常称为质心,指具有相同名称的算术实体,并且可以被表示为任意维度的向量。

如何的优雅的使用Atom写博客

1. Atom 插件配置

1
2
安装language-makrdown插件,将滚动条可以设置为可以超过最后一样
安装markdown-image-assistant 修改配置文件,令其格式满足hexo标准

2. Atom配置markdown

第七题 input

远程连接之后看到代码的我是一脸懵逼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>

int main(int argc, char* argv[], char* envp[]){
printf("Welcome to pwnable.kr\n");
printf("Let's see if you know how to give input to program\n");
printf("Just give me correct inputs then you will get the flag :)\n");

// argv
if(argc != 100) return 0;
if(strcmp(argv['A'],"\x00")) return 0;
if(strcmp(argv['B'],"\x20\x0a\x0d")) return 0;
printf("Stage 1 clear!\n");

// stdio
char buf[4];
read(0, buf, 4);
if(memcmp(buf, "\x00\x0a\x00\xff", 4)) return 0;
read(2, buf, 4);
if(memcmp(buf, "\x00\x0a\x02\xff", 4)) return 0;
printf("Stage 2 clear!\n");

// env
if(strcmp("\xca\xfe\xba\xbe", getenv("\xde\xad\xbe\xef"))) return 0;
printf("Stage 3 clear!\n");

// file
FILE* fp = fopen("\x0a", "r");
if(!fp) return 0;
if( fread(buf, 4, 1, fp)!=1 ) return 0;
if( memcmp(buf, "\x00\x00\x00\x00", 4) ) return 0;
fclose(fp);
printf("Stage 4 clear!\n");
<!--more-->
// network
int sd, cd;
struct sockaddr_in saddr, caddr;
sd = socket(AF_INET, SOCK_STREAM, 0);
if(sd == -1){
printf("socket error, tell admin\n");
return 0;
}
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr = INADDR_ANY;
saddr.sin_port = htons( atoi(argv['C']) );
if(bind(sd, (struct sockaddr*)&saddr, sizeof(saddr)) < 0){
printf("bind error, use another port\n");
return 1;
}
listen(sd, 1);
int c = sizeof(struct sockaddr_in);
cd = accept(sd, (struct sockaddr *)&caddr, (socklen_t*)&c);
if(cd < 0){
printf("accept error, tell admin\n");
return 0;
}
if( recv(cd, buf, 4, 0) != 4 ) return 0;
if(memcmp(buf, "\xde\xad\xbe\xef", 4)) return 0;
printf("Stage 5 clear!\n");

// here's your flag
system("/bin/cat flag");
return 0;
}

第五题 passcode

分数越来越高了,第五题居然有10分。。先远程连接服务器看看。

还是熟悉的配方,通过读C 文件/(逆向执行文件)找漏洞。

第四题 Flag

看到题目,有7分,应该很难的样子?只给了个二进制文件。

直接对到ida里面,发现加密了(一般非加密程序有非常多的函数)

Shift + f12 发现是个 upx的加密壳

第三题 bof

题目给了程序和代码。告诉我们程序运行在9000端口。我们用nc命令连接一下看看。

发送一串hello字符,返回 一段回复。。