Uncategorized
7.3k words
概述 1.两种信息流:数据信息流,控制信息流$\left { \begin{aligned} 指令信息\状态信息\时序信息 \end{aligned} \right.$ 2.五个部件:运算器,存储器,控制器,输入设备,输出设备 3.冯诺依曼体系结构计算机的特点: 硬件由五大部分组成运算器,控制器,存储器,输入设备,输出设备 软件以二进制表示 采用存储程序 所有的程序预先存放在存储器中 指令采用串行执行的方式 4.计算机系统的层次结构 graph BT; 数学模型,算法应用程序 --> 作为软件资源的应用程序 --> 语言处理程序 --> 操作系统级 --> 机器语言(指令系统) --> 微程序控制器,硬连逻辑部件 5.机器语言,汇编语言,高级语言 机器语言:二进制代码表示的机器语言,最底层,机器直接执行 汇编语言:一种需要助记符表示的与机器语言一一对应的语言,需要汇编后才能执行 高级语言:接近人类语言,与计算机结构无关,需要经过解释和编译 6.编译程序与解释程序最大区别在于:前者生成目标代码,后者不生成 7.汇编程序即汇编写的程序,与编译程序,...
Uncategorized
4.5k words
1.linux文件权限一共10位长度 第一段指文件类型 第二段指拥有者所具有的权限 第三段指所属组的成员对于这个文件具有的权限 第四段指其他人对于这个文件有没有任何权限 2.shell是一种命令解释程序 3.>将标准输出信息写入一个新文件(重定向),>>将标准输出信息添加到一个已存在的文件中 4.ctrl+alt+F1:图形界面切换到文字终端界面 5.whereis -b [filename]:查找系统中指定文件名的二进制文件 6.free显示系统中已用资源和空闲资源,m参数以mb为单位显示系统中的资源,t显示系统中的资源并最后进行统计 7.关闭linux的命令: halt:立刻关机 shutdown -h now:立刻关机(root) poweroff:立刻关机 8.less显示文件内容时可以上下滚动而more不可以 9./proc/cpuinfo获得CPU的相关信息 10.grub可以引导windows操作系统.grub是引导装入器,负责装入内核并引导Linux系统,也可以引导其他操作系统.如果引导器不能很好的工作或者不具有弹性,那么很可...
Uncategorized
2.9k words
Description 题目描述:忘了 附件内容: from Crypto.Util.number import * from random import * from libnum import * import gmpy2 from secret import x flag = b'?????????' m = bytes_to_long(flag) def obfuscate(p, k): nbit = p.bit_length() while True: l1 = [getRandomRange(-1, 1) for _ in '_' * k] l2 = [getRandomRange(100, nbit) for _ in '_' * k] l3 = [getRandomRange(10, nbit//4) for _ in '_' * k] l4 = [getRandomRange(2, 6) for _ in '_' *k] A = sum([l1[_] * 2 ** ...
Uncategorized
534k words
我是傻逼 Description 题目描述:忘了 附件内容 from secret import p, q, flag from Crypto.Util.number import bytes_to_long def gcd(a, b): s = 0 while b != 0: print(a, b) if isOdd(a): if isOdd(b): a = a - b a = rshift1(a) if a < b: a, b = b, a else: b = rshift1(b) if a < b: a, b = b, a else: if isOdd(b): ...
Uncategorized
2.3k words
前言 这题当时国赛的时候由于没有怎么碰过MISC,到最后一步没做出来,实在是难受,今天复盘了一下 Analyze 拿到题目附件是一个流量包,可以看到分别有2.4.0,2.3.0,2.2.0,2.10.0,2.8.1,2.8.0这些地址的USB流量,我们可以一个一个筛选出来,然后通过导出特定分组进行保存,用UsbKeyboardDataHacker来提取其中的信息,最终会发现2.10.1和2.8.1中有有效信息 这里展示一下2.8.1的提取过程 # usb.src=="2.8.1"||usb.dst=="2.8.1" 31 0.010805 2.8.1 host USB 35 URB_INTERRUPT in 32 0.010818 host 2.8.1 USB 27 URB_INTERRUPT in 33 0.110764 2.8.1 host USB 35 URB_INTERRUPT in 34 0.110777 host 2.8.1 USB 27 URB_INTERRUPT in 35 0.166...
Uncategorized
13k words
通过file指令可以看到程序编译的链接状态,在知道程序可以通过ROP来打的情况下,根据statically linked和dynamically linked两种链接方式来构造对应的ropchain和对应不同的攻击思路 dynamically linked 如果程序是动态链接的话,泄露程序函数的真实地址后拿到libc基址去得到例如system和/bin/sh的地址,这里不再赘述 statically linked 如果程序是静态链接,相对与动态链接就没有那么麻烦了,有的程序我们可以通过ROPgadget这个工具来帮助我们构造我们的ropchain ROPgadget --binary 程序名 --ropchain Example-inndyrop m1nus@ubuntu:~/elf/buu/inndy_rop$ file inndy_rop inndy_rop: ELF 32-bit LSB executable, Intel 80386, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.32, Buil...
Uncategorized
537 words
为什么需要stack pivoting 当stack overflow的空间不足时 怎么实现stack pivoting 通过将ebp覆盖成构造的fake_ebp,然后利用leave_ret这个gadget将esp劫持到fake_ebp的地址上,从而实现栈的迁移 为什么是leave ret leave: mov esp , ebp; pop ebp; ret: pop eip 实现过程 首先程序有stack overflow漏洞,我们将栈覆盖成下面的样子 执行完mov esp , ebp后 接着就是pop ebp,执行完后如图 由于esp是栈顶指针,当pop ebp后,栈顶的元素被弹给了ebp,所以esp应当向下移4个字节,也就是一个单位 下一步通过read()函数的ret来把内容输入到fake_ebp1地址上,这里主要是要将fake_ebp2的地址给到fake_ebp1的地址上 下一步就来到了leave_ret,也就是重复上方的mov esp,ebp pop ebp和pop eip mov esp,ebp 后 接着pop ebp,由于fake_...