「 PWN 」
                
            
            January 03, 2020
        
        
        
            
                
                    
                         Words count
                        24k
                    
                
                
                    
                         Reading time
                        22 mins.
                    
                
                
            
            
                
            
        
        
            
                师傅们说去做做TAMUCTF的题目,积累经验,于是去尝试了一波,才发现真的是有些地方自己不懂的知识盲区,也作为一个积累吧,在这里记录
题目:pwn1
首先看看题目先
有栈溢出的漏洞,其他的保护全开,拖进ida分析一波:
逻辑很清晰了,前面的几个strcmp可以直接逆向思维,把正确的答案写到payload中,最后一步直接覆盖那个数v5为目标值即可:于是可以写出payload:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34...  | 
 
            
            Read article 
         
     
 
    
    
    
        
            
                
                  「 PWN 」
                
            
            January 03, 2020
        
        
        
            
                
                    
                         Words count
                        40k
                    
                
                
                    
                         Reading time
                        36 mins.
                    
                
                
            
            
                
            
        
        
            
                一、题目:pwn1
先checksec下:
保护全开,ida分析一波:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
   | void __fastcall __noreturn main(__int64 a1, char **a2, char **a3) {   signed int choice; 
    init_0();   while ( 1 )   {     while ( 1 )     {       choice = menu(...  | 
 
            
            Read article 
         
     
 
    
    
    
        
            
                
                  「 PWN 」
                
            
            January 03, 2020
        
        
        
            
                
                    
                         Words count
                        61k
                    
                
                
                    
                         Reading time
                        56 mins.
                    
                
                
            
            
                
            
        
        
            
                一、题目:Book
先来看看保护机制:
栈溢出保护没开(这是一道堆题。。),其他保护全开
ida清晰地分析一波:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
   | __int64 __fastcall main(__int64 a1, char **a2, char **a3) {   __int64 savedregs; 
    setvbuf(stdout, 0LL, 2, 0L...  | 
 
            
            Read article 
         
     
 
    
    
    
        
            
                
                  「 PWN 」
                
            
            January 03, 2020
        
        
        
            
                
                    
                         Words count
                        217k
                    
                
                
                    
                         Reading time
                        3:17
                    
                
                
            
            
                
            
        
        
            
                一、源码介绍:
当需要合并相邻的freechunk时用到unlink:
前言:P的选取一定是你要unlink合并后的P的地址,不是随便选取的~
1、向后合并:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
   | #!c     
 
      if (!prev_inuse(...  | 
 
            
            Read article 
         
     
 
    
    
    
        
            
                
                  「 PWN 」
                
            
            January 03, 2020
        
        
        
            
                
                    
                         Words count
                        60k
                    
                
                
                    
                         Reading time
                        54 mins.
                    
                
                
            
            
                
            
        
        
            
                一、Tcache攻击
前言:
        之前打比赛一直都是做ubuntu16.04的,很少做ubuntu18下的(有tcache机制),护网杯有道题是libc-2.27.so,我一开始不会做tcache,学了一晚上,理解了基础的原理和攻击方式,这里做个小小的总结。
首先是tcache的原理,这个在ctfwiki上讲的挺透彻的,这里做个复习。
1、重点需要理解的2个函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
   | #堆块free后放入tcache static void tcache_put...  | 
 
            
            Read article 
         
     
 
    
    
    
        
            
                
                  「 PWN 」
                
            
            January 03, 2020
        
        
        
            
                
                    
                         Words count
                        28k
                    
                
                
                    
                         Reading time
                        25 mins.
                    
                
                
            
            
                
            
        
        
            
                前言:
pwn的学习之路一直在进行,今天看了arm_pwn,搞环境就搞了半天,琢磨工具使用到做题,这里总结下,希望能帮助到大家,少走一点弯路。
一、环境配置:
环境是一大玄学问题,这里仅仅是 我Ubuntu16.04下的环境配置,亲测有效,但是遇到玄学的问题时,也请留言,努力帮大家解决。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
   |  sudo apt-get install qemu
 
  | 
 
            
            Read article 
         
     
 
    
    
    
        
            
                
                  「 PWN 」
                
            
            January 03, 2020
        
        
        
            
                
                    
                         Words count
                        6k
                    
                
                
                    
                         Reading time
                        5 mins.
                    
                
                
            
            
                
            
        
        
            
                一、栈题的patch技巧
1、修改read的大小:
这里很明显栈大小是0x30,但是可以输入的大小是0x12C,所以绝对的栈溢出,这里改size为0x30就不会溢出了:记住是改汇编
2、第二种改法是改leave_ret为ret_ret:
修改后:
方法二只适用于只有main函数的,没有子函数调用的栈溢出类型题目。
3、当遇到gets函数时,改成read函数:
这里改到我们的en_frame段中去执行那个read函数:
将size大小改成了0x18,就不会栈溢出啦~
二、格式化字符...
            
            Read article 
         
     
 
    
    
    
        
            
                
                  「 PWN 」
                
            
            January 03, 2020
        
        
        
            
                
                    
                         Words count
                        49k
                    
                
                
                    
                         Reading time
                        44 mins.
                    
                
                
            
            
                
            
        
        
            
                一、原理分析:
House of spirit思想:
这是fastbin的一种attack的方式,就是我们想要控制的区域是不可控的,但是我们能通过伪造fake_chunk来释放它再申请从而得到目标区域,但是有前提:
(1)获取目标区域地址(堆、栈、bss….)
(2)伪造堆块(找到那两个可控区域)
(3)有能覆盖堆指针的漏洞存在(覆盖堆指针为我们的目标区域地址)
(4)调用free函数将伪堆块释放到fastbin中
(5)申请堆块,将刚刚的伪堆块申请出来
(6)输入数据,即可修改目标区域的内容
...
            
            
Read article 
         
     
 
    
    
    
        
            
                
                  「 PWN 」
                
            
            January 03, 2020
        
        
        
            
                
                    
                         Words count
                        133k
                    
                
                
                    
                         Reading time
                        2:01
                    
                
                
            
            
                
            
        
        
            
                开启刷题模式:
学了栈溢出和格式化字符串漏洞,现在是练手的时候,打完题目总结好准备开坑堆,师傅说Hackme的题目还不错,于是果断去刚一波~下面对所有题目进行复现,也检验自己的学习情况,查缺补漏。
1、bash
一波常规操作:
这题是最简单的pwn了,题目疯狂暗示cat flag,猜想应该是直接连接远程,ls再cat flag,没什么好讲的。
1 2 3 4 5 6 7
   |  from pwn import * context.log_level = 'debug' context.terminal...
  | 
 
            
            Read article 
         
     
 
    
    
    
        
            
                
                  「 PWN 」
                
            
            January 03, 2020
        
        
        
            
                
                    
                         Words count
                        39k
                    
                
                
                    
                         Reading time
                        36 mins.
                    
                
                
            
            
                
            
        
        
            
                一、原理:
那个的是unlink中的向前合并:
1 2 3 4 5 6 7
   |         if (!prev_inuse(p)) {            prevsize = prev_size(p);            size += prevsize;            p = chunk_at_offset(p, -((long) prevsize));            unlink(av, p, bck, fwd);        }
 
  | 
 
这个和unlink的操作其实差不多,但是呢填入的fd和bk不一样:
            
            Read article