攻防世界高手进阶区 ——反应釜开关控制
攻防世界高手进阶区 ——反应釜开关控制
题目没什么信息。
1.分析文件
运行一下,可能为栈溢出的题。
checkse
无栈溢出保护,无地址随机化,只有堆栈不可执行。
栈溢出可能性大。
ida64
12345678910111213int __cdecl main(int argc, const char **argv, const char **envp){ char s[64]; // [rsp+0h] [rbp-240h] BYREF char v5[512]; // [rsp+40h] [rbp-200h] BYREF write(1, "Please closing the reaction kettle\n", 0x23uLL); write(1, "The switch is:", 0xEuLL); sprintf(s, "%p\n", easy); write(1, s, 9uLL); write(1, ">", 2uLL); gets(v5); ...
攻防世界高手进阶区 ——Welpwn
攻防世界高手进阶区 ——Welpwn分析文件checksec分析1234567coke@ubuntu:~/桌面/CTFworkstation/OADW/welpwn$ checksec welpwn[*] '/home/coke/桌面/CTFworkstation/OADW/welpwn/welpwn' Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x400000)
文件开启了堆栈不可执行,常规了。
ida分析12345678910111213141516171819202122232425int __cdecl main(int argc, const char **argv, const char **envp){ char buf[1024]; // [rsp+0h] [rbp-400h] BYREF write(1, " ...
攻防世界高手进阶区 ——warmup
攻防世界高手进阶区 ——warmup题目并没有给附件,看样子像是一个盲打题。就是BROP
BROP原理BROP(Blind ROP) 于 2014 年由 Standford 的 Andrea Bittau 提出,其相关研究成果发表在 Oakland 2014,其论文题目是 Hacking Blind。
BROP 是没有对应应用程序的源代码或者二进制文件下,对程序进行攻击,劫持程序的执行流。
攻击条件
源程序必须存在栈溢出漏洞,以便于攻击者可以控制程序流程。
服务器端的进程在崩溃之后会重新启动,并且重新启动的进程的地址与先前的地址一样(这也就是说即使程序有 ASLR 保护,但是其只是在程序最初启动的时候有效果)。目前 nginx, MySQL, Apache, OpenSSH 等服务器应用都是符合这种特性的。
攻击原理目前,大部分应用都会开启 ASLR、NX、Canary 保护。这里我们分别讲解在 BROP 中如何绕过这些保护,以及如何进行攻击。
基本思路在 BROP 中,基本的遵循的思路如下
判断栈溢出长度
暴力枚举
Stack Reading
获取栈上的数据来泄露 canar ...
攻防世界高手进阶区 ——Mary_Morton
攻防世界高手进阶区 ——Mary_Morton
不容易呀,这都已经是第七题了,继续加油!
一,老规矩,先分析一下文件
checksec一下
发现开启了栈溢出,可能这个题就是学习栈溢出漏洞绕过的。
运行一下
告诉了存在栈溢出漏洞和格式化字符串漏洞。
file文件
1234┌──(root💀kali)-[/home/…/面/ctf_workstation/Offensive_and_defensive_world/Mary_Morton]└─# file Mary_Morton 127 ⨯Mary_Morton: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=b7971b84c2 ...
攻防世界高手进阶区 ——forgot
攻防世界高手进阶区 ——forgot
看了半天,啥也没看懂,做出来了才发现啥也不是。
一,分析文件
checksec
还好,只开启了堆栈不可执行。
运行一下
翻译了一下,应该是判断邮箱是否合乎规矩。
直接ida
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081int __cdecl main(){ size_t v0; // ebx char v2[32]; // [esp+10h] [ebp-74h] BYREF _DWORD v3[10]; // [esp+30h] [ebp-54h] char s[32]; // [esp+58h] [ebp-2Ch] BYREF int v5; // [esp+78h] [ebp-Ch] size_t i; // [esp+7Ch] [ebp-8h] v5 = ...
攻防世界进阶区——greeting-150
攻防世界进阶区——greeting-150进阶区的格式化字符串漏洞,能做到这里的人肯定不差,我就不在重复写那些基础的东西了。
这里我尝试用了一下格式化字符串漏洞神器 FmtStr。
文件分析先用checksec来查一下12345678coke@ubuntu:~/桌面/CTFworkstation/PWN/OADW/gretting_150$ checksec greeting_150[*] '/home/coke/桌面/CTFworkstation/PWN/OADW/gretting_150/greeting_150' Arch: i386-32-little RELRO: No RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x8048000)
直接查出文件为32位文件,并且开启了栈溢出保护,和堆栈不可执行。
于是用32位ida打开12345678910111213int __cdecl main(int argc, const ...
攻防世界菜鸟新手区 ——level3
攻防世界 – pwn新手区 level3
由题意可得可能跟libc有关。
ps:libc是Linux下的ANSI C的函数库。ANSI C是基本的C语言函数库,包含了C语言最基本的库函数。
引申:
glibc 和 libc 都是 Linux 下的 C 函数库。libc 是 Linux 下的 ANSI C 函数库;glibc 是 Linux 下的 GUN C 函数库。
1.checksec查看保护
文件有两个,一个是elf文件,一个是so文件。
ps:so文件(shared object),so文件是Linux下的程序函数库,即编译好的可以供其他程序使用的代码和数据。
checksec查一下保护机制。
ps:
checksec的解析。
RELRO
Relocation Read-Only (RELRO) 此项技术主要针对 GOT 改写的攻击方式。它分为两种,Partial RELRO 和 Full RELRO。 部分RELRO 易受到攻击,例如攻击者可以atoi.got为system.plt,进而输入/bin/sh\x00获得shell 完全RELRO 使整 ...
攻防世界--repeater
攻防世界–repeater分析文件存在栈溢出漏洞,并且只能刚好溢出到返回地址,所以基本上ROP就是不能用的了,其他师傅给的wp是通过将shellcode写到bss段里面去,然后返回到bss段执行,但是在本地gdb的话发现是bss段是没有执行权限的.
利用程序由分析文件来看的话,就栈溢出就行了,
但是文件开启了PIE,于是我们得绕过,但是文件给了绕过的方法,基本上比较简单.主要是练习练习exp脚本的编写.
exp123456789101112131415161718192021from pwn import *context.log_level = Truecontext.arch = 'amd64'io = process('./repeater')#io = remote("61.147.171.105","57019")shellcode = asm(shellcraft.sh())io.sendlineafter("Please give me your name :", shel ...
搭建python2和pwntools环境
安装pwntools由于该版本kali系统已经预装了Python2和Python3环境。
Python2需要的环境:
1python3 python3-pip python3-dev git libssl-dev libffi-dev build-essential
Python3需要的环境:
1python python-pip python-dev git libssl-dev libffi-dev build-essential
强烈推荐使用Python3环境,如果非要兼容老版本的代码则选择Python2版本。
这里,我把两个版本的环境都安装上了。
更新apt软件列表:首先, 我们更新apt软件列表:
12apt updateapt-get update
kali默认使用的是kali官方下载源,有时候会因为网络环境不好,需要多试几次。
(实在不行可以更换下载源,下载源在/etc/apt目录下的sources.list中保存)
安装相关环境和依赖库Python3在这个kali版本中。python3、python3-dev、git均默认安装。
我们安装pip ...
排序的几种算法
排序的几种算法前言排序算法是将一组数据按照一定的顺序排列的算法。这里列举几种常见的排序算法:
冒泡排序(Bubble Sort)
通过依次比较相邻的两个元素,如果它们的顺序不正确就交换它们,一轮比较下来最大(或最小)的元素就像气泡一样”浮”到了最上面(或最下面),因此称为冒泡排序。
时间复杂度:平均情况和最坏情况均为 O(n^2)。
123456def BUBsort(buf): length = len(buf) for j in range(length): for i in range(length-j-1): if(int(buf[i])>int(buf[i+1])): buf[i],buf[i+1] = buf[i+1],buf[i]
可以发现需要进行两次遍历,时间复杂度就为O(n^2)
选择排序(Selection Sort)
在未排序序列中选择最小(或最大)的元素,将其放置到已排序序列的末尾,直到所有元素均排序完毕。
时间复杂度:平均情况和最坏情况均为 O(n^2)。
1234567 ...