pwnable.kr第四题

根据提示,下载:

Download : http://pwnable.kr/bin/flag

用IDA打开后,发现明显加了壳,而根据题目的提示,确实是加了壳的:

于是用010editor或者winhex打开该文件,很容易就可以看到UPX的字符,直接在linux下,用upx -d flag,即可完成解包,然后再用 010editor或者winhex打开该文件,搜索UPX关键字,即可发现flag:

pwnable.kr第三题

首先,根据提示,下载bof和bof的源代码到本地

Download : http://pwnable.kr/bin/bof
Download : http://pwnable.kr/bin/bof.c

checksec一下看看bof开了哪些保护


居然开了这么多保护,这不是最初级的训练吗?不会这么难吧?

还是先看看源码吧

原来只要通过栈溢出,将传入的0xdeadbeef换成0xcafebabe就可以了,而且程序里面已经写好了system("/bin/sh")

丢到IDA看一下:

可以看到数组overflowme的起始地址在ebp+s(-2c),key参数的其实地址在ebp+arg0(+8),中间就差了44+8 = 52个字节。

因此使用52个‘A’覆盖之后再加上4字节的0xcafebabe,就可以了。

使用pwntools编写exp:

运行便可查看到flag:

pwnable.kr第二题

ssh col@pwnable.kr -p2222 (pw:guest)

登录后,可以查看到col 、col.c 、flag三个文件,同样flag是无权限查看的

查看col.c源码:

从源代码中可以得知,hashcode的长度需要为20, 然后这个passcode会传入到check_password函数中返回出一个res,如果这个res == hashcode(0x21DD09EC)就能得到flag

check_password中,我们传入了一个char型的p,然后使用 (int*)进行强制转换成int指针,char的存储大小为1字节,而int的存储大小为4字节,也就是说我们将输入的p转换成了5个数组,而这5个数组相加之和要等于0x21DD09EC

也就是要求0x21DD09EC = 4 *x + y ,假设x= 0x01010101,那么y为 0x1dd905e8。

pwnable.kr第一题

ssh fd@pwnable.kr -p2222 (pw:guest)

SSH登录后查看,可以看到 flag、fd(elf可执行文件)和fd.c三个文件,其中flag文件是无权限查看的,先看一下fd.c的源代码:

可以看到read(fd,buf,32)这里需要让fd为0,其中atoi函数是将字符串转换成整型数的一个函数,将0x1234转换为10进制的话,就是4660, 当fd为0候,再根据题目提示输入LETMEWIN就可以读取到flag的内容了。

《一个操作系统的实现》学习笔记2

由于使用Win10环境+Bochs,一直卡在bochs加载配置文件那里报错,于是一怒之下,在虚拟机上安装了ubuntu系统,于是环境变为了:

Ubuntu18.04(64位)、Nasm、Bochs

第一步,要确保已经安装了gcc、g++:

我在安装bochs时,提示需要安装x windows gui:

第二步,下载并安装bochs:

[详细阅读…]

《一个操作系统的实现》学习笔记1

第一章节很简单:

环境:Win10(64位)+Nasm+ FloppyWriter+Vmware

第一步,安装Nasm.exe(略)

第二步,写代码:

第三步,将.asm文件编译为.bin文件:

第四步,使用FloppyWriter.exe,将boot.bin文件转换为.img文件(下方选项)

第五步,Vmware中随便找一个已装好的系统,在设置中,硬件选项中添加“软盘”设备,然后选择“使用软盘映像文件”,选中上一步中转换的a.img文件

第六步,启动虚拟机即可成功看到“Hello OS world!”的启动字样!

Android ARM32 ROP level8学习笔记

首先Android上的ASLR是伪ASLR,因为所有程序都是由zygote fork出来的,因此系统中的所有library的基址都是相同的,并且和zygote的内存布局一样,可以通过cat /proc/xxx/maps得到证实:

[详细阅读…]