type
status
date
slug
summary
tags
category
icon
password
😀
周6打了一个比赛是buuctf上面上的一个比赛,叫“DASCTF X GFCTF 2024|四月开启第一局”,只持续了一天,不算难,算一个娱乐赛吧,一共有3个pwn题都是栈的题没有堆的题目,漏洞都比较明显,不过每一道题都有有坑的地方,比较考积累。最近一直在搞堆的知识,做题有一点生疏了,以后还是要找一点时间练练题,至少不能让手有生疏。
 
写这篇文章的时候已经是第二天的晚上了,3道题才做出来1道,也是今天下午才出来的,确实有一点慢了,这周看看能不能把剩下的那两道题也做出来,把wp写了。今天先把做出来的这道题遇到的坑和wp写一写。
 
第一题:pwn
 
老规矩,先checksec一下程序,还好保护基本没开,可以少考虑一点,那就进ida里找漏洞。
 
notion image
在ida中的main函数如下
漏洞以经很明显了,用read函数向buf中可以输入长度为0x100的数据但buf到rbp的距离为0x30,明显的栈溢出。再看看其他函数有没有问题,
 
在init函数中发现一个问题
很明显在这个程序中已经开启了沙箱保护,可以看看用沙箱禁了哪些函数
notion image
 
 
看看哪些函数的后面为0013,那些函数便是被禁的函数。被禁的函数还有点多,不过我们主要看有俩个函数
 
execvemprotect函数,前者代表不能直接获得shell只能使用orw的方法,第二个函数则代表在这里不能通过提升权限的方法来直接用shellcode,只能orw一个一个函数的调用了,
那么大致思路便基本出来了,通过栈溢出执行orw将flag打印在屏幕上,那先在看看都有哪些限制和差些什么。
 
回到main函数,在输入数据后会有一个循环将输入的数据都遍历一遍,如果检测到有与0xf0,0xe0,0x80,80,0xb0相同的数据便会停止程序,输出一段字。因此在输入的时候要注意避开这几个数,在我做的这里变有一个需要注意的点,可能在有的libc版本中数据不用再意这点,不过远程已经没了,我只是在自己的本地,照本地的libc版本来的,各位看官在自己的本地上打记得要更据自己的libc版本做相应的改变。
 
由于使用orw的方法需要大量的pop指令,便来看看程序自带的pop指令,
notion image
 
太少了明显不够用,那必须要用的libc中的pop指令,便要知道这个程序中的libc_base(libc的基地址)是多少,将程序中的函数的got地址暴露出来,刚好在程序中有puts函数,那便用puts函数将程序中的puts函数的got地址暴露出来,然后由于在程序中没有再次输入的地方,便要再次回到main函数再次执行。
 
 
在执行完这段命令后便可以知道puts_got的地址,然后根据自身的libc版本中的puts函数的偏移地址,便可以知道libc_base的地址,在根据libc中的其他函数和pop指令的偏移地址,便可以知道所需的函数与pop指令的地址,
 
 
那现在已知的便是orw所必须open函数,read函数,puts函数的地址,已及需要调用的寄存器的值,那么现在还差的便是./flag的地址,用于在open函数将flag打开。在程序中寻找,并没有找到有着段字符串,那么就要我们自己将./flag通过调用read函数的方法注入到一个空的bss段地址中。如下
 
 
在这里有一个必须要注意的一点,我之前在直接输用数据栈溢出时,输入的数据并没有到达程序输入的最大值0x100,而是到我需要的就停止了。这里理论上并没有什么问题,但是在实操时会发现,程序会将后面才输入数据一同在这里录进去,直到满足0x100的长度。这样对我们后面的操作是绝对不行的,我上网查了一下,解决的方法有两种,一种是加上一个间断的时间函数使程序在输入该输入的数据就停下了,不将后面的数据录进去(很明显我不会),第二种,便是我使用的方法,直接注入程序能注入的最大值,将出了有效的数据其他都充填为垃圾数据。然后在输入后面的数据便不会出现程序在这里就将后面的数据一同录进去的事
 
到达这里那基本条件已经算完成了,可以开始orw的使用了,有关其基本操作这里不在细讲我之前的文章中有,可以去看看
 
notion image
 
 
当然这个flag是我本地自己整的,比赛经没了,所以这里的我只能打本地。我总感觉如果打远程肯定还是会遇到问题,不过远程已经没了,就只能这样吧,以后遇到再说。
 
在这里我打时也遇到过一些问题,就比如之前关于open函数地址的语句中因为我直接使用这个函数地址时,又会被这前那个检测的数据,故我将其-1处理,这样也能执行到open函数,我之前还试过+1,这个不知道为什么不能用,希望有大佬能为我解答。
 
总exp
逆天官方,在qq群里说不发官方wp,还以为真的不发,结果又发出来了,放个链接吧
 

📝 主旨内容

观点1

引用的话语

观点2

引用的话语

🤗 总结归纳

总结文章的内容

📎 参考文章

  • 一些引用
  • 引用文章
 
💡
有关Notion安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
NKctf2024 第一题C语言题目
Loading...