快乐学习pwn
文章平均质量分 87
每天一题pwn精讲,像只二哈一样的快乐,一样的疯狂!
四代机您发多少
像只二哈一样的快乐,一样的疯狂!
希望自己可以全栈吧,虽然这很难!但我想试试!
虽然菜,但我想努力不菜。
展开
-
复现随记~
比较简单的越界漏洞,堆本身并没有什么漏洞,而且保护并没全开,所以逆向思维。必然是ROP类而非指针类,故我们着重注意等无符号数前后是否不一致这里其实存在两个越界,一个是输入负数存在二级指针,进而ROP获取权限;第二个越界则为输入16则获取到一个悬空指针(但是没有什么用,测试U20).原创 2023-02-12 21:47:25 · 637 阅读 · 0 评论 -
pwn手记录题2
本题所使用的libc版本为2.34;(最新版libc2.34版本已经没有了所谓的hook函数,甚至exit_hook(实际为某个函数指针)也已经不能够使用;能够利用的手法已经很少了;可以看到Free释放函数总共可以使用11次,而Allocate申请函数可以使用0x2e次;如果按照fastbin_reverse_into_tcache的节奏来说,那么布局是如何的呢?原创 2023-02-12 15:27:48 · 721 阅读 · 0 评论 -
pwn手记录题1
将fake_chunk链入到了unsortedbin之中了,并且伪造了fake_chunk的fd指针指向unsortedbin;不过发现了几遍文章,其中存在着解析,将其引向了retfq该指令,该指令意思是64位与32位之间进行跳转,而syscall_fstat的rax为5,32位之中的open的syscall_number同样为5;我们发现了一个函数change_addr函数,其实就是PIE,本题开启了PIE保护,但是却又多此一举改变了地址,不懂;不过编写shellcode的时候废了好大劲,调试了好久;原创 2023-02-12 15:27:23 · 676 阅读 · 0 评论 -
kernel简单学习(CTF-wiki)
就从CTF WIKI的例题开始吧,此具有由易到难的特性,适合上手;原创 2022-10-31 22:54:47 · 1199 阅读 · 1 评论 -
house系2
这里我们续接上回,接着分析高版本的Glibc利用手法,而高版本的利用手法,大都涉及到了io_file以及虚表这类函数指针等。原创 2022-09-18 17:52:44 · 419 阅读 · 0 评论 -
ciscoRV110W(强网杯2020)
这里的错误信息很简单,必然是nvram系列函数,通过调试,发现错误信息位于nvram_get函数出现的,而退出则是由exit函数进行错误退出的,故我们可以定位到错误流程必然出现于第三个nvram_get函数与exit函数之间;而valid_user仅仅是简单的判断,我们可以动态调试至此处位置,我们先位于页面之中输入123456(密码),发现此处的pwd进行了加密,如果我们hook掉http_user0其中的内容与此一致,曾将会登录成功;,这能通过硬编码进行修改,但是我并不想去查找mipsel的硬编码了;..原创 2022-08-29 16:34:06 · 775 阅读 · 0 评论 -
house系1
参考:https://bbs.pediy.com/thread-273895.htm#msg_header_h1_0(提出了这种新的方式)该文章虽然提出了新的手法,但是有些地方省略过多,故进行了调试分析,总结出完整的一个流程,分享给大家:位于==/malloc/malloc.c之中可以发现__malloc_assert的定义,并且__assert_fail等同于__malloc_assert==,而==__assert宏定义调用了__assert_fail==:可以发现首先执行==__fxprintf原创 2022-08-09 11:01:49 · 360 阅读 · 0 评论 -
BUUCTF-pwn(18)
360chunqiu2017_smallest整体较为简单;先放个exo;较为简单;from pwn import *context(arch='amd64', os='linux', log_level='debug')binary = './smallest'#r = remote('node4.buuoj.cn',26277)r = process(binary)elf = ELF(binary)main_addr = 0x4000B0mov_edx_400 = 0x4000原创 2022-07-10 15:15:10 · 861 阅读 · 0 评论 -
BUUCTF-pwn(17)
happytree(SUSCTF)分析主要函数!主要三步操作,Insert、Delete、Show函数!可以看到其为二叉树结构体!因为全保护开启,故具体思路为泄露地址(heap、libc),然后利用libc2.27版本tcache的double free来修改__free_hook函数为system函数,此时首先设置基准为0x50,此时分为两部分,左子树用来泄露heap地址并造成double free的效果,右子树来泄露libc地址并申请造成攻击效果!首先发现可以从0x?0申请到0x?8原创 2022-04-17 17:49:12 · 689 阅读 · 0 评论 -
IOT初尝试(PLC NOE-771)
过binwalk -A指令来对固件的CPU架构进行分析,此外也可以用binwalk -Y指令来调用capstone反汇编引擎来进行辅助判断,不过我实际测试下来存在一些误报的情况会把NOE 711的固件识别成arm架构的。原创 2022-03-22 19:59:05 · 4497 阅读 · 0 评论 -
BUUCTF-pwn(16)
强网杯2019 拟态 STKOF本题目两个二进制文件,64位与32位该题目加入了拟态的检查机制,题目会fork32位程序和64位程序,而我们的输入会分别传入这个两个进程,每个程序一份,然后题目会检测两个程序的输出,若两个程序的输出不一致或任一程序或者异常退出,则会被判断为check down,直接断开链接。只有两个程序的输入一致时,才能通过检查本题难度经过合理拆分难度不大,首先本地通过64位、32位脚本,然后利用0x8字节差距,使用32位add esp,0x7c;pop;ret来进行错误,并输入原创 2022-03-02 16:00:01 · 612 阅读 · 1 评论 -
BUUCTF-pwn(15)
gyctf_2020_some_thing_interesting经典UAF漏洞!Allocate申请函数!Free释放函数!全保护开启,故我们利用格式化字符串漏洞泄露libc地址,从而得到malloc_hook地址。然后利用UAF漏洞修改malloc_hook为one_gadget,此时进行申请操作便可获取权限!from pwn import *context(log_level='debug',os='linux',arch='amd64')binary = './gyctf_2原创 2022-02-13 12:38:43 · 2705 阅读 · 0 评论 -
BUUCTF-pwn(14)
gwctf_2019_jiandan_pwn1简单ret2libc,唯一需要注意的便是注意修改索引值,防止索引被覆盖!从而无法进行栈溢出!from pwn import *from LibcSearcher import LibcSearchercontext(os='linux',arch='amd64',log_level='debug')binary = './pwn'r = remote('node4.buuoj.cn',25586)#r = process(binary)elf原创 2022-01-23 16:23:13 · 3542 阅读 · 0 评论 -
BUUCTF-pwn(13)
wustctf2020_number_game此时运用我们的计算机底层的知识,可知,计算机底层储存形式为补码!-2147483648的补码形式为0x80000000,它取反加一之后仍然是0x80000000,因此这边输入-2147483648护网杯_2018_gettingstart此时又要用到我们的数学知识!转换浮点数工具from pwn import *context(log_level='debug',os='linux',arch='amd64')binary = './2原创 2022-01-17 20:51:29 · 631 阅读 · 0 评论 -
BUUCTF-pwn(12)
[极客大挑战 2019]Not Badorw类型,打开文件,读入内容,输出内容!但需要注意gadget!from pwn import *context(log_level='debug',os='linux',arch='amd64')binary = './bad'r = remote('node4.buuoj.cn',29934)#r = process(binary)elf = ELF(binary)mnap = 0x123000jmp_rsp = 0x0400a01r.r原创 2022-01-13 09:35:26 · 2917 阅读 · 0 评论 -
BUUCTF-pwn(11)
mrctf2020_easy_equation简单的栈溢出漏洞,格式化字符串漏洞!此处采用栈溢出漏洞!axb_2019_fmt64经典循环格式化字符串64位漏洞!唯一注意的地方pwntools的FmtStr_payload无法成功获取权限!需要手动计算字节进行攻击!from elftools.construct.macros import Paddingfrom pwn import *from LibcSearcher import *context(log_level='debu原创 2022-01-09 17:49:59 · 2761 阅读 · 0 评论 -
BUUCTF-pwn(10)
picoctf_2018_shellcode题目很很简单!from pwn import *context(log_level='debug',os='linux',arch='i386')binary = './PicoCTF_2018_shellcode'r = remote('node4.buuoj.cn',25585)#r = process(binary)elf = ELF(binary)shellcode = asm(shellcraft.sh())r.recvunti原创 2022-01-08 09:44:09 · 374 阅读 · 0 评论 -
BUUCTF-pwn(9)
gyctf_2020_borrowstack使用栈迁移,将rsp迁移到bss段上,而bss段上处于可控位置。但是注意bss段低处处于不可写状态,如果rsp移动到该处,则程序无法进行下去!尝试使用system函数,但是往往会涉及到bss段低处地址,而one_gadget则不需要过多占用栈地址,故采用one_gadget获取权限!from pwn import *from LibcSearcher import LibcSearchercontext(log_level='debug',os='l原创 2022-01-05 18:29:31 · 821 阅读 · 0 评论 -
PWNABLE.TW(1)
Startfrom pwn import *context(log_level='debug',os='linux',arch='i386')binary = './start'r = remote('chall.pwnable.tw', 10000)#r = process(binary)elf = ELF(binary)def db(): gdb.attach(r)leak_esp = 0x08048087shellcode = asm("xor ecx,ecx;\原创 2021-12-30 22:07:13 · 365 阅读 · 0 评论 -
BUUCTF-pwn(8)
原创 2021-12-29 13:33:26 · 562 阅读 · 0 评论 -
glibc2.23堆源码解读
libc2.23采用glibc2.23的源码,故没有libc2.32的Tcache。主要从_int_malloc以及_int_free两个函数进行解读。Mallocstatic void *_int_malloc (mstate av, size_t bytes){//参数为指针av,与申请空间bytes INTERNAL_SIZE_T nb; /* normalized request size */ unsigned int idx;原创 2021-12-25 15:12:20 · 685 阅读 · 0 评论 -
BUUCTF-pwn(7)
ret2dl_resolve_dl_runtime_resolve()通过两个参数在libc中寻找函数地址,而我们更加关注的是第二个参数也就是上面write的0x20,0x20将_dl_runtime_resolve()带到了reloc的位置,reloc中有2个重要信息,一个是函数的got表地址,另一个是r_info。r_info的高位是.dynsym中的条目,.dynsym的地址加上0x10*Num,得到函数对应的符号信息,而修改其中的st_name偏移,就可以伪造函数名称,从而实现漏洞利用,我们将其原创 2021-12-19 11:28:14 · 1812 阅读 · 0 评论 -
BUUCTF-pwn(6)
wustctf2020_getshell现在还有这种简单题吗???picoctf_2018_buffer overflow 1没想到还有这么简单的题!并发现了后门函数!cmcc_simplerop函数逻辑比较简单。这里经过调试,发现padding为0x20寻找一些又用的gadget。使用SROP来进行攻击!from pwn import *context(log_level='debug',os='linux',arch='i386')r = remote('原创 2021-11-30 20:40:22 · 3085 阅读 · 0 评论 -
BUUCTF-pwn(5)
jarvisoj_level4简单的ret2libc!from pwn import *from LibcSearcher import *context(log_level='debug',os='linux',arch='i386')r = remote('node4.buuoj.cn',25768)#r = process('./level4')elf = ELF('./level4')main = elf.symbols['main']write_plt = elf.plt['原创 2021-11-25 20:48:41 · 433 阅读 · 0 评论 -
BUUCTF-pwn(4)
pwn2_sctf_2016该题目还是比较简单的!并且存在int 80中断,但可惜没有/bin/sh字符串!所以还是ret2libc!from pwn import *from LibcSearcher import *context(log_level='debug',os='linux',arch='i386')r = remote('node4.buuoj.cn',28630)#r = process('./pwn2_sctf_2016')elf = ELF('./pwn2_sc原创 2021-11-16 18:57:46 · 1281 阅读 · 0 评论 -
BUUCTF-pwn(3)
[HarekazeCTF2019]baby_rop该题还是比较简单的,没有什么难点!先探测一波保护!并且还发现了字符串!然后我们就可以开始构造payload了!payload = b’a’*(0x10+0x8)+p64(pop_rdi)+p64(bin_sh)+p64(system_addr)jarvisoj_level2_x64这道题目过于简单,所以就不再分析了,直接上脚本!from pwn import *context(log_level='debug',os='linu原创 2021-11-10 23:28:18 · 725 阅读 · 0 评论 -
BUUCTF-pwn(2)
[第五空间2019 决赛]PWN5该函数漏洞比较明显,进行调试验证!并且没有开启PIE保护措施,所以我们可以利用任意地址写,写入.bss:0804C044 password该地址处数据即可。然后密码就被操控了。[OGeek2019]babyrop将urandom中一个随机数写入到buf中,然后作为参数传入到下一个函数中。必须通过条件才可以可利用到下面的栈溢出漏洞!而且read还可以溢出一个字节到v5上。这里strlen遇到’\x00‘停止检测,所有外面可以利用该特征,绕过检测!原创 2021-11-06 11:25:40 · 597 阅读 · 0 评论 -
BUUCTF-pwn(1)
test_your_nc原创 2021-08-09 14:38:23 · 1317 阅读 · 0 评论 -
xctf-pwn-“反应釜开关控制 & 实时数据监测 & greeting-150“
反应釜开关控制该pwn题目逻辑较为简单。通过三次栈溢出,可以得到shell函数地址。发现PIE保护没有开启,其实这里是直接可以栈溢出到shell函数的地址的,不必弄那么复杂!这道题目的PIE应该是忘记开了,题目原本设计的目的是想让我们使用三次栈溢出来得到shell的。分界线这里我感觉应该不是这么简单的,所以我又去进行寻找资料,发现是XCTF 4th-CyberEarth里面的盲打题。意味着我们没有ELF文件,所以我们就没有办法来想这么简单的去做出来。实时数据监测发现什么保护都没有原创 2021-07-31 14:06:14 · 365 阅读 · 0 评论 -
xctf-pwn-“stack2 & pwn1 & welpwn”
stack2首先探测一番,是32位,看下保护!ida静态分析一番!还有个后门函数:原先先要使用这个后门函数,但是发现远程服务器是没有bash的,所以这个后门函数是没有用的,误导我等!不过还是先按正常思路来说,这第三个函数是没有检查数据的合法性的。...原创 2021-07-30 14:43:36 · 205 阅读 · 0 评论 -
xctf-pwn-“time_formatter & pwn-200 & pwn-100“
time_formatterUnix是20世纪70年代初出现的一个操作系统,除了作为网络操作系统之外,还可以作为单机操作系统使用。Unix作为一种开发平台和台式操作系统获得了广泛使用,目前主要用于工程应用和科学计算等领域。再补上保护措施!既然知道了保护措施,我们再来看看函数!...原创 2021-07-28 18:35:31 · 136 阅读 · 0 评论 -
栈溢出漏洞学习与剖析
0x00刚开始接触pwn,但是pwn呢!不应该只会做题,应该理解里面的原理,所以我们来看看程序里面究竟蕴含着什么神秘!0x01程序的执行就是一种线性的"纸",上面有许多内容。就是一张"纸",在上面写了很多内容,Stack是栈,Heap是堆,这两个是最为关键的,因为接下来我们利用的就是有关这两个的漏洞。程序在上面执行,code代码段(其实就是汇编指令)利用这里面的指令一步一步的运行。你可能有疑问?while和if和for等其实就是jmp等跳转指令,从一张"纸"的第一行开始"写",到了第三行(假设)有原创 2021-03-13 09:14:31 · 317 阅读 · 0 评论 -
xctf-pwn-“warmup & welpwn & monkey”
warmup这个是没有附件的,吓了我一条,因为我没有碰见过这样的题目(本人小菜一个)便开始查资料。漏洞挖掘 有三种方法:白盒代码审计、灰盒逆向工程、黑盒测试。其中黑盒的Fuzz测试是效率最高的一种,能够快速验证大量潜在的安全威胁。Fuzz测试,也叫做“模糊测试”,是一种挖掘软件安全漏洞、检测软件健壮性的黑盒测试,它通过向软件输入非法的字段,观测被测试软件是否异常而实现。Fuzz测试的概念非常容易理解,如果我们构造非法的报文并且通过测试工具打入被测设备,那么这就是一个Fuzz测试的测试例执行,大多数原创 2021-03-13 19:43:52 · 331 阅读 · 0 评论 -
xctf-pwn-“dice_game & forgot & Mary_Morton”
dice_game是个压缩包,解压发现有两个文件,应该一个是程序,一个是动态连接库,一看就知道很难。EP上文件是没有加壳的,我们就直接区ida分析它。是个64位的文件。到这里其实我们也已经有了大致的思路,不过先看看有什么保护措施吧!此时我想的是直接栈溢出,修改eip值到flag函数的地址,不过看起来是不行的。因为buf读0x50单位,整好栈为50,没有再长的输入了,差了一点。不过seed在下面。这样子动态链接库也有啦,此时思路讲一下,通过栈溢出修改seed的值,再根据它的链接库,生成我们本地的随原创 2021-03-11 21:23:10 · 141 阅读 · 0 评论 -
攻防世界pwn新手题wp(通俗易懂)
get_shell这道题先看看附件,探查一下信息,再用ida打开,就可以发现伪代码其实很简单的:然后在远程连接这个端口进行攻击了。并且我们能看到它的大致防护信息,然后来个脚本:此时就可以进行攻击了。这样子flag就拿到了。CGfsb刚开始先在windows里进行一番静态调试:大概的知道了一些漏洞,和一点信息,我们就可以进行破解了。...原创 2021-03-10 23:50:47 · 1923 阅读 · 0 评论