open(10,file=out(1:index(out,' ')-1)//'.dat'中out后面括号里是什么意思?

汇编语言常见错误信息解释 22:53汇编程序在对源程序的汇编过程中 ,若检查出某语句有语法错误 ,随时在屏幕上给出出错信息 .如操作人员指 定的列表文件名 (即.LST), 汇编程序亦将在列表文件中出错的下面给出出错信息,以便操作人员即时查找错误,给予更正 .MASM5.0 出错信息格式如下 :源程序文件行 :WARNING/ERROR 错误信息码 :错误描述信息其中 .同一标识符在两个位置上定义 .在汇编第二遍扫描时 , 每当遇到这个标识符都给出这个错误 6Phase error between passes两次扫描间的遍错 .一个标号在二次扫描时得到不同的地址值,就会给出这种错误 .若在启动 MASM 时使用 /D任选项 ,产生第一遍扫描的列表文件 , 它可帮助你查找这种错误7Already had ELSE clause已有 ELSE 语句 这样的定答:指的定义数据或定义符号的名字时使用了保留字。如在数据段中出现了: 义时就会产生警告,因 LENGTH 是取值运算符,作为保留字不应标识名字。4 在程序中定义了数据段, 并且以 VAR 命名的表中设有 0 .9十个数据,为什么开始的语句: MOV AL, VAR 执行结果不正确?答:如果代码段起始没有将数据段基址赋给 DS 寄存器,将会产生此类运行错误,因段基址不是所设定的 的表中存有字符串 'Hello ctec!,后'设名为 BUF2 的表长度为 11个字符, 初始值设 0,在代码段中使用串传送指令实现 BUF1 BUF2 的传送,没有发现语法和控制结构的错误, 为什么结果不对?答:如果控制结构和指令形式都没有错,就要检查是否定义 ES段, MOVS 指令要求源指针为 DS : SI , 目的指针为 ES : DI ,因此应定义 ES 段;当然, DS 段和 ES 段可为同一个段。7 在编译中指出某行产生 “ Immediate mode illegal错误是”什么原因?答:指立即数出现在非法的指令形式中,举例来说,如果在数据段定义有: LENG EQU 1000H; 在代码段 中有:LEA BX, LENG 这样的语句即会出现这类错误, 因为 EQU 伪指令使得编译时将代码中所有的 LENG 符号用立即数 1000H 替代,而指令: BL /运行时报告算术溢出,为什么?怎样解决?答:除法指令 DIV 规定,如果除数字长为 8 位,商的字长超过了 8 位二进制数的表示范围则为溢出。上文 中被除数为 8000H,除数为 4,结果: 2000H 超过了 8 位二进制数,即产生溢出错误。为避免这种情况, 可采用移位或减法指令替代除法指令。10 在程序中有语句: JC NEXT, 引起编译错误 “Jump out of 是错误的?答:前者是取值语句,功能是将 ADDR 的偏移地址值送到寄存器 AX ;后者将 AX 寄存器作为间接寻址寄 存器使用,这在 指令中是不允许的。12 利用 9 号 DOS 功能调用显示一个字符串,为什么会显示乱码?答:常见的情况是定义字符串缺少结尾标志 “$”,功能子程序执行时找不到结尾,更正办法是在定义的字符 串后面加 “$”或 ASCII 码形式的 24H 的运行程序窗口中不出现数字结果怎么办?答: 1 首先保证显示数字为标准 ASCII 码;2设置运行程序的属性为:全屏幕显示,退出时不关闭窗口15 实现两个 BCD 码表示的十进制数如 34 和 56 相加,要求输出 BCD 码结果;为什么输入数据应为 34H 和 56H?答:BCD 码是由四位二进制数码表示一个十进制数字,十进制数34 用 BCD 码表示为 B ,写为十六进制数即 34H; 而加法计算的实际结果为十六进制数34H 与 56H 相加的结果,故需要调整指令 DAA 将其调整为预期结果的 BCD 码: 90H。16 使用 DOS 功能调用 2号功能显示数字,有语句: / MOV DL, CL /MOV AH, 2 /INT 21H /为什么显示不出结果?答:参数 DL 应放置数字的 ASCII 码,而不是数字本身,以上程序中,若 CL 内是 0 9的数值,应添加语 句: ADD DL, 30H 。17使用算术右移指令 SAR 移位一次,会影响 OF 吗?答:在 MASM 宏汇编环境中不会,因为算术右移不改变符号位,符号位被复制到下一位,故最高位和次高 位相等,而判断是否溢出的条件是双高位不相等,OF 不会被置 1。18 如何编程实现一块内存储区的奇偶校验?答:先使用如下程序段: MOV AL, SI / AND AL, TD 后,按 Alt-F 键打开 File 菜单,选择 Open,在文件对话框中输入要调试的程序名,按回车方法 2:转到 TD.EXE 所在目录,在 DOS 提示符下键入以下命令(假定要调试的程序名为 HELLO.EXE )C:ASM >TD HELLO.EXE 方法 3:在 Windows 操作系统中,打开 TD.EXE 所在目录,把要调试的程序图标拖放到 TD 的图标上2 在 TD 环境下如何输入 编辑汇编指令?答(1)用 Tab 键选择代码区为当前区域;2)用方向键把光标移到期望的地址处,如果是输入一个新的程序段,建议把光标移到CS:0100H 处;3)打开指令编辑窗口,有两种方法:一是在光标处直接键入汇编指令,在输入汇编指令的同时屏幕上就会自动弹出指令的临时编辑窗口二是用 Alt-F10 键激活代码区局部菜单,选择其中的汇编命令,屏幕上也会自动弹出指令的临时编辑窗口(4)在临时编辑窗口中输入 /编辑指令,每输入完一条指令,按回车,输入的指令即可出现在光标处(替 换掉原来的指令),同时光标自动下移一行,以便输入下一条指令。3 在 TD 环境下如何查看 /修改数据段的数据?答:( 1)用 Tab键选择数据区为当前区域;(2)使用局部菜单中的 “Goto”命令并结合使用方向键把光标移到期望的地址单元(注意数据区的光标是一 个下划线),数据区就从该地址处显示内存单元的内容。3)若要修改该地址处的内容,则需打开数据编辑窗口。有两种方法:一是在光标处直接键输入数据,在输入数据的同时屏幕上就会自动弹出数据编辑窗口二是用 Alt-F10 键激活数据区局部菜单,选择其中的 “Change”命令,屏幕上也会弹出数据编辑窗口4)在数据编辑窗口中输入所需的数据,输入完后,按回车,输入的数据就会替代光标处的原始数据。4 在 TD 环境下如何修改寄存器内容?答:( 1)用 Tab键选择寄存器区为当前区域;2)用方向键把光标移到要修改的寄存器上;3)打开编辑输入窗口。有两种方法:一是在光标处直接键入所需的值,在键入的同时屏幕上就会自动弹出编辑输入窗口二是用 Alt-F10 键激活寄存器区局部菜单,选择其中的 “Change”命令,屏幕上也会弹出编辑输入窗口4)在编辑输入框中键入所需的值,然后回车,这个新的值就会取代原来该寄存器的内容。5 在 TD 环境下修改某个标志位内容,怎样操作?答:( 1)用 Tab键选择标志区为当前区域;2)用方向键把光标移到要修改的标志位上;6 指定程序的起始执行地址怎样操作?答:方法一:1)用 Tab 键选择代码区为当前区域;2)用 Alt-F10 键激活代码区局部菜单,选择局部菜单中的“New CS:IP”命令。方法二:1)用 Tab 键选择寄存器区为当前区域;2)用方向键把光标移到 CS 寄存器上,输入程序起始地址的段地址3)用方向键把光标移到 IP 寄存器上,输入程序起始地址的偏移量7 在 TD 环境下怎样单步跟踪程序的执行?答:( 1)用上述第 6 条中的方法首先指定程序的起始执行地址;(2)按 F7 或 F8 键,每次将只执行一条指令。注:若当前执行的指令是CALL 指令,则 F7 将跟踪进入被调用的子程序,而F8则把 CALL 指令及其调用的子程序当作一条完整的指令, 要执行完子程序才停在 CALL 指令的下一条指令上8 在 TD 环境中,若只执行程序的某一部分指令,怎样处理?答:方法一:用设置断点的方法。1)用上述第 6 条中的方法首先指定程序的起始执行地址;(2)用方向键把光标移到要执行的程序段的最后一条指令的下一条指令的起始处(注意, 不能移到最后一条指令上,否则最后一条指令将不会被执行),按 F2 设置断点。也可按 Alt-F2 键,然后在弹出的输入窗 口中输入断点地址。3)按 F9 键执行,程序将会停在所设置的断点处。方法二:用 “运行程序到光标处 ”的方法。1)用上述第 6 条中的方法首先指定程序的起始执行地址;2)用方向键把光标移到要执行的程序段的最后一条指令的下一条指令上(注意,同方法一)3)按 F4 键执行程序,程序将会执行到光标处停下。

[版权声明] 本站所有资料由用户提供并上传,若内容存在侵权,请联系邮箱。资料中的图片、字体、音乐等需版权方额外授权,请谨慎使用。网站中党政主题相关内容(国旗、国徽、党徽)仅限个人学习分享使用,禁止广告使用和商用。

F12查看源码发现一个文件名奇怪的js,功能是定时发送请求.

请求内容比较奇怪,猜测就是考点,xxe了.

随便改了下xml,就发生500报错.

尝试了下常见的payload,猜测逻辑,如果xml合法则无返回,xml异常则500报错.

网上翻相关资料,找到关键点

文件不存在,那就找一个linux系统默认存在的,直接去linux全局文件搜索

找一个可以用的,报错xxe成功获取flag

随便测试了一下,发现[[9*9]]中的内容被执行了输出了49.

网上搜索发现了几个可用的payload

然后队内师傅提醒下,直接读文件.

绕过思路和ciscn的一样,就是没回显

百度一下oppo cattch,原来是个手机的宣传语

由于check使用的是read函数,则我们可以直接输入开头的字符串来进行绕过,然后strlen的长度就为0,则后面的strncmp判断必定成功。

之后的漏洞函数中,a1是我们之前输入的第八个字符,如果我们输入\xff时,则在reada1会进行符号填充,那么我们就可以读入-1)个字节,这将直接导致栈溢出,之后就行常规的ROP

第二道签到题,靶机环境是glibc-2.23。

内置一大堆漏洞,这里我用最简单的heap overflow

Add_text功能中,size的大小是由用户决定的。

而且由于Text结构的输入没有null截断,我们可以直接泄露libc地址

因为劫持Text结构体更简单,而且可以实现任意地址读写,我们只需要提前布置好heap 结构就行。

要是能开启PIE并且使用glibc-2.23.so的话,相信能成为更优质的挑战。

程序流还是非常清晰明了的。

Free功能中,虽然将malloc_ptr置为0,但是并没有将ptr_array置为0,则我们可以直接输入index为0,这样会直接导致double

  • 修改stdout结构体为了泄露地址信息

一般在有PIE的情况下,我们需要利用chunk残余的fdbk来对stdout的地址进行爆破,但是这里没有PIE,而且stdout的地址就在bss上,我们可以直接利用tcache

byte,而且修改stdout地址的话,调用printf函数时会发生阻塞现象,所以我们只能爆破对程序基本没有影响的stderr的地址了,下面的代码功能就是爆破bssstderr的地址的低二位字节,使其指向stdout->_IO_write_base的地址,这里是1/16的几率。

之后将地址指向我们要泄露的信息,通过调试可得:

其实漏洞非常简单,只不过其中大量的结构体一开始就吓跑了很多人,刚开始看到这么复杂的结构体我自己也吓了一跳,但是随着仔细的分析,程序慢慢变得简单。

下面是程序要用到的结构体:

这是我乱打payload无意间发现的,下面是我的payload:

分析了Handle功能之后,发现其三个结构都有一个致命的UAF漏洞。

Handle功能中,处理的数目是由用户来确定的,但是当number为0时,悲剧就发生了。

由于源程序代码复杂功能简单,所以脚本我也就写的简单一点。

由于使用的calloc函数,它不会从tcache里面拿chunk,所以我们必须要先绕过tcache,方法也很简单,就是不停的free就行。

这里需要进行利用realloc来进行栈调整,才能执行one gadget

题目给了一个压缩程序,但是没有相对应的解压程序,还给了一个压缩过的文件,要求我们根据分析压缩程序的算法写出相对应的解压程序即可。

根据IDA还原的算法源码:

通过下面测试,已经和原先的程序行为基本一致:

分析代码可得,这是一个根据重复字符来压缩的算法,但是其长度和举例都是有限的,其长度是17,也就是byte_202040的长度,而最大距离则正好是buf0x1000

buf为该压缩算法的缓冲区,大小为0x1000,其压缩的目的也主要取决于该缓冲区。

这是一个按位压缩的算法,从compress函数的上面代码可知,该协议分为标志位和携带内容,当标志为1时,其协议长度分为9 bit, 第一个bit为标志位,后面八个bit为一个字符。

当标志为0时,其协议长度分为17 bit, 第一个bit为标志位,然后12bit为buf缓冲区的地址,然后4bit为重复的次数,在解压的时候直接将其复制过来就行,这里主要是压缩重复的字节流。

只要知道压缩原理之后,只要按照其协议解压即可。下面是我写的解压程序:

之后用该程序进行解压,可以获得一张图片,flag就在图片里。

本文为安全脉搏专栏作者发布,转载请注明:

我要回帖

更多关于 index怎么打开 的文章

 

随机推荐