自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 资源 (1)
  • 收藏
  • 关注

原创 gyctf_2020_foolish_query(C++中的shared ptr指针的误用)

gyctf_2020_foolish_query(C++中的shared ptr指针的误用)首先,检查一下程序的保护机制然后,我们用IDA分析一下,在Query的构造函数中,如果我们查询的name存在,则将对应的对象从容易里取出,获得其shared_ptr对象,关键在于调用了shared ptr的get函数,取得了对象的指针值,用这个指针值创建了一个新的shared_ptr对象。漏洞点在于,从一个shared_ptr对象里取得了被托管的对象的地址值创建了一个新的shared_ptr对象,因此,前

2020-07-26 19:36:18 710

原创 X-nuca_2018_revenge(控制程序流程的新姿势+多字节的xchg指令会清零寄存器高位)

X-nuca_2018_revenge(多字节的xchg指令会清零寄存器高位)首先,检查一下程序的保护机制然后,我们用IDA分析一下,bss上存在无限溢出由于该程序是静态编译,我们可以覆盖到下方某些函数指针,我们可以将__printf_arginfo_table虚表指针覆盖,指向我们可控的地方。这样printf调用时,就调用相应的函数,但是rdi、rsi、rsp这些不可控这时有一个巧妙的方法,我们让程序执行到000000000046B9A8 mov rbx, ...

2020-07-26 19:04:16 664

原创 n1ctf2018_null(通过劫持线程arena达到任意地址分配)

n1ctf2018_null(通过劫持线程arena达到任意地址分配)首先,检查一下程序的保护机制然后,我们用IDA分析一下,主函数启动了一个线程在线程里,是一个循环其中输入函数存在溢出,由于a2没有更新,因此,如果将数据分成2部分读入的话,第二次,仍然可以读入a2个数据,从而溢出。溢出尺寸比较大,如果能够覆盖到线程arena,那么就能将fake_chunk链接到fastbin,进而分配过去。但是arena是先mmap出来的,heap是过后才分配出来,因此,线程heap的

2020-07-26 18:33:27 2487

原创 线程PWN之gkctf2020 GirlFriendSimulator

线程PWN之gkctf2020 GirlFriendSimulator首先,检查一下程序的保护机制然后我们用IDA分析一下,一个多线程程序在线程里的delete功能,存在UAF但是由于add功能次数限制,无法在线程里完成这个UAF的利用在glibc中,线程有自己的arena,但是arena的个数是有限的,一般跟处理器核心个数有关,假如线程个数超过arena总个数,并且执行线程都在使用,那么该怎么办呢。Glibc会遍历所有的arena,首先是从主线程的main_arena开

2020-07-25 17:14:12 1274

原创 twctf_2018_bbq

twctf_2018_bbq首先,检查一下程序的保护机制然后我们用IDA分析一下在delete功能里,ptr指针存在未初始化的漏洞,因此可以free在栈上伪造的地址,条件是ptr->flag得满足要求,另外index下标没有检查,这也是一个漏洞。由于getInput后面的length固定,因此我们最开始只能将栈上的ptr指针低1字节覆盖为0,因此,我们需要在堆里对应的伪造伪造好chunk,然后free掉,形成ovelap chunk。Free时还要特意伪造好flag,否

2020-07-25 14:14:08 452

原创 ciscn_final_7(黑盒测试)

ciscn_final_7(黑盒测试)首先检查一下程序的保护机制然后,我们用IDA分析一下程序比较复杂比较难逆向,其大致原理是fork了子进程做为一个调试进程,然后主进程里通过int 3中断通知调试器设置相应的寄存器,从而执行到其他地方。由于整个程序主逻辑全部使用中断来实现,比较难逆向,因此我们直接黑盒测试了。首先通过枚举choice的选项,得到了一下选项#110 add#120 edit#238 del#386 exit然后就进行测试,发现d

2020-07-25 13:14:32 392

原创 hack_lu_2018_heap_heaven

hack_lu_2018_heap_heaven首先,检查一下程序的保护机制然后我们用IDA分析一下,这个free没有检查范围,因此可以任意地址free。我们只要想办法free掉state,然后控制funcs指针,即可执行任意代码但是程序中我们不能自己malloc,因此无法将其再申请回来进行控制。查看state结构体其位置与堆块的fd位置一样,因此,我们首先在fastbin里放一个chunk,然后再free掉state,这样,funcs就指向了第一个chunk,而func

2020-07-25 13:03:29 437

原创 jarvisoj_hsys(hash散列表)

jarvisoj_hsys(hash散列表)首先,检查一下程序的保护机制然后,我们用IDA分析一下,在show功能里,如果cur_id为0,即admin账户,则v36为定值5,这样使得n变大,memcpy就有可能造成栈溢出,如果能让name长一些,那么info的内容就可以溢出更多一点。为了寻找这样的name,首先要求hash(name) = 0,并且strlen(name)尽可能大,我们来看看hash计算的方法。首先是利用一个hash函数生成一个hash初值,接着为了解决hash

2020-07-25 12:28:09 593

原创 starctf2018_note(栈上的null off by one)

starctf2018_note(栈上的null off by one)首先,检查一下程序的保护机制然后,我们用IDA分析一下,在add函数里的scanf(“%256s”,&s)存在null off by one,其结果是将在栈里的rbp值低1字节覆盖为0。将栈里rbp的值低1字节覆盖为0后,其结果导致main函数的rbp上移,这样,我们就可以在add里的可控缓冲区里控制main函数里scanf的格式化字符串指针,我们将其修改为%236s的地址,这样就能在main函数里进行栈溢出

2020-07-25 12:07:13 599 1

原创 diary_mna_2016

diary_mna_2016首先,检查一下程序的保护机制然后检查一下沙箱机制,发现禁用了execve还有open函数,但是没有堆sys_number的范围进行判断,因此,可以利用retf切换到32位模式绕过沙箱。然后,我们用IDA分析一下,输入函数存在off by one。程序自己用链表实现了一个堆块管理器。其free功能使用的是unlink,将堆块取出、合并等操作,但是缺少链表完整性检查这里,我们unlink不能直接将got表修改为system_add.

2020-07-24 23:14:10 401

原创 [中关村2019]two_string

[中关村2019]two_string首先,检查一下程序的保护机制然后,我们用IDA分析一下,合并的时候,使用的是strcat,但是total_size的计算,没有考虑如果原size为0的情况。在add里面,我们可以申请size为0的堆。根据堆的性质,malloc(0)和malloc(0x10)申请的是同一个大小的chunk,假设在fastbin里有多个chunk,malloc(0)取得的chunk其fd有一个指针,没有被清空,这样strcat就可以把这个指针追加进去,从而后面的

2020-07-24 21:37:35 338

原创 HITCON_2018_Hackergame_2018_calc(一个容易忽略的计算机整数小知识)

HITCON_2018_Hackergame_2018_calc用IDA分析一下,程序注册了异常信号处理函数。该函数可以执行命令现在,只要想办法触发异常即可。程序中过滤了除0异常,其实还可以利用-0x80000000/-1来触发异常。我们可以做个试验#include <stdio.h>int main() { int a,b; scanf("%d%d",&a,&b); int c = a/b; pri...

2020-07-24 21:10:31 462

原创 car_market_asis_ctf_2016

car_market_asis_ctf_2016首先,检查一下程序的保护机制然后,我们用IDA分析一下,程序功能比较多,这里不做分析了。漏洞点在这,输入函数存在off by null。该函数在set_customer_name里调用可以将comment指针的低1字节覆盖这样,我们只需要在对应的位置伪造好chunk,然后free掉形成overlap chunk即可控制,构造麻烦了点,为了能够通过fastbin attack申请到bss上控制堆指针,我们还需要利用co

2020-07-24 19:33:19 339

原创 [FireshellCTF2020]Firehttpd

[FireshellCTF2020]Firehttpd首先,检查一下程序的保护机制然后,我们用IDA分析一下,在referer字段的解析里存在格式化字符串漏洞,由于是主进程fork子进程,因此,我们泄露的数据第二次不会改变仍然可以使用。那么,我们利用格式化字符串漏洞,将文件名指针修改指向我们可控的地址,这样就可以读取我们想要的文件了。#coding:utf8from pwn import *ip = 'node3.buuoj.cn'port = 28726sh = rem

2020-07-24 19:25:14 532

原创 starctf_2019_quicksort

starctf_2019_quicksort首先,检查一下程序的保护机制然后,我们用IDA分析一下,栈溢出,可以将ptr指针覆盖掉,因此,我们可以任意地址写。那么,我们可以将free的got表修改为main函数,这样就可以进行多次利用,同时后面的printf可以泄露地址#coding:utf8from pwn import *from LibcSearcher import *#sh = process('./starctf_2019_quicksort',env={'

2020-07-24 19:09:59 334

原创 鹏城杯_2018_note

鹏城杯_2018_note首先,检查一下程序的保护机制然后,我们用IDA分析一下,在edit功能里,index的值可以被nptr溢出覆盖,因此,我们可以控制index的值,这样,我们就可以在GOT里写入一个堆地址。由于没有开启NX保护,我们只需要再在堆里布置shellcode即可。#coding:utf8from pwn import *context(os='linux',arch='amd64')#sh = process('./2018_note')sh = rem

2020-07-24 18:51:07 375

原创 babyheap_hitcon_2016

babyheap_hitcon_2016首先,检查一下程序的保护机制然后,我们用IDA分析一下,输入函数存在off by null漏洞通过这个off by null,可以将content指针低1字节覆盖为0,也就是相当于content指向的地方在上方去了。因此,我们只需要在上方的位置,伪造一个合适的chunk,然后free掉,这样,unsorted bin和fastbin就有重合了。程序中,仅仅关闭了stdout的缓冲区,没有关闭stdin的缓冲液因此,通过功能4,我

2020-07-24 18:41:37 422 1

原创 wdb_2018_4th_pwn2(爆破随机数为0)

wdb_2018_4th_pwn2(爆破随机数为0)首先,检查一下程序的保护机制然后,我们用IDA分析一下,功能1栈溢出,但是有canary功能3格式化字符串,当仅能泄露一个值。功能2是一个递归调用,多次递归,可以在栈里多处位置留下canary的值功能9011也是一个栈溢出,但是需要正确的key才能进行。可以使用功能3泄露libc地址,然后功能2递归多次,再使用功能1将canary的值泄露,最后通过爆破随机数,用9011功能来进行栈溢出做ROP。随机数可以直接

2020-07-24 18:24:19 688 1

原创 (ARM PWN里的thumb模式和arm模式的切换)root_me_stack_buffer_overflow_basic

(ARM PWN里的thumb模式和arm模式的切换)root_me_stack_buffer_overflow_basic首先,检查一下程序的保护机制然后,我们用IDA分析一下,栈溢出漏洞在CSU里面有可以利用的gadget,但是直接ret过去,会报invalid instrument错误。这是由于在csu这里的指令是thumb指令,需要将cpu工作状态转移到thumb指令状态才可以执行。标记ARM状态是用CPSR寄存器中的标志位T,BX指令可以设置T位,当BX后面的地

2020-07-24 18:07:42 542

原创 free_spirit(在栈上爆破一个可以被free的fake_chunk)

free_spirit(在栈上爆破一个可以被free的fake_chunk)首先检查一下程序的保护机制然后,我们用IDA分析一下,功能3存在8字节溢出,将会把v7下面的buf指针覆盖掉,而覆盖了buf指针,就能实现任意地址写。那么,我们劫持函数栈返回地址为one_gadget即可,为了绕过结尾对buf的检查,我们的buf非0,且free后不会报错。但是我们泄露不了堆地址,因此,只能在栈上找一个合适的fake_chunk,因此,可以直接在栈上爆破,直到程序不崩溃,那..

2020-07-01 21:18:00 406

原创 已知libc地址爆破TLS、ld.so等地址

已知libc地址爆破TLS、ld.so等地址在大多数情况下,远程的ld.so以及TLS等结构的地址与libc地址之间的偏移与本地的会不一样,但是大致处于一个范围内,并且,在同一个系统里,这个差值是固定的,其差值的变化往往在偏移的第1.5BYTE~2.5BYTE的位置,即地址十六进制的第4、5个数,因此我们只需爆破2个十六进制数即可。以列题来说明BCTF_2018_bugstore在函数中有栈溢出,但是有canary保护我们来看看输入函数,输入函数遇到\0就结束了输入,而我们知道can

2020-07-01 21:07:07 1077

原创 iz_heap_lv1

iz_heap_lv1首先,检查一下程序的保护机制然后,我们用IDA分析一下,delete功能里存在数组下标越界,可以free掉第21个堆指针,而第21个位置对应name的空间因此,我们可以在name里伪造一个chunk,free掉以后后续利用即可。#coding:utf8from pwn import *#sh = process('./iz_heap_lv1')sh = remote('node3.buuoj.cn',29203)libc = ELF('/lib/

2020-07-01 20:51:46 468

原创 ACTF_2019_ACTFNOTE(top chunk上移)

ACTF_2019_ACTFNOTE首先,检查一下程序的保护机制然后,我们用IDA分析一下,edit里存在溢出,可以直接修改top chunk的size那么只需要把top chunk的size修改为-1,然后malloc(负数)即可将TOP chunk向前移动与已有的chunk重叠,然后通过申请空间,控制该程序结构体的指针即可实现任意地址读写。#coding:utf8from pwn import *#sh = process('./ACTF_2019_ACTFNOTE')

2020-07-01 20:46:10 856

arm-perl-5.20.1

成功编译了可以在arm平台运行的最新perl5.20.1版本

2014-11-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除