pwn知识总结
文章平均质量分 86
江屿..
这个作者很懒,什么都没留下…
展开
-
手动构造格式化字符串payload
像上次总结的格式化字符串漏洞的题都是能够溢出大量字节,因此能够使用pwntools的工具来自动生成payload但是如果题目给到了字节限制,使payload链所占字节非常有限,不足以装下自动生成的,那么就需要我们去手动构造payload,在正式了解手动构造之前可以通过上面链接回顾一下格式化字符串漏洞的知识,并且需要特别注意三个格式化字符。这是手动构造的关键。这里要注意一个h是以两个字节的方式写入,一般使用这个可以更省字节。原创 2024-02-19 14:02:44 · 776 阅读 · 1 评论 -
栈上格式化字符串漏洞总结
例如printf(s),这就是个漏洞函数,那么正确形式应该是printf('%s',s),即以字符串形式输出,那么存在漏洞的原因就是就是没有格式化字符,这时候如果我们在漏洞函数上边输入一个格式化字符,比如%p,那么就会泄露指定位置的地址。因为当程序进行printf函数时,第一个参数是格式化字符,来确定下面一个数据的打印形式。下面是一些格式化字符代表的意思。原创 2024-02-04 20:16:21 · 2350 阅读 · 0 评论 -
初学堆 UAF漏洞及double free 利用手法(libc2.23)
UAF漏洞及double free 利用手法(libc2.23)通过一道例题加深理解原创 2024-03-06 21:05:06 · 828 阅读 · 6 评论 -
ctf-pwn 伪随机数绕过问题
生成伪随机数的范围在0到RAN_DMAX之间,这个最大值依赖于所指定的库,一般至少为32767,该随机数的生成依赖于种子,也就是说,如果种子一样,生成的随机数序列就一样,所以是伪随机数,当然很多题目会把时间作为种子,以此增加随机性。,初始化随机数发生器,用来设置rand函数的种子seed。系统在调用rand函数时,会先调用srand函数,如果没有就会默认种子为1。这里是种子为1时,可以看到生成了0到100内完全相同的随机数序列。原创 2024-03-07 16:26:09 · 935 阅读 · 1 评论 -
非栈上格式化字符串漏洞
这样之后如果继续按照原来的方式就会发现错误,第三个指针依然指的是返回地址的栈地址的尾两字节,而我们要修改前两个字节了,那就需要把上面构造的方式再用一次,让原来的返回地址栈地址加2就可以,与修改尾两字节相同的方式,再写一次,,那么随便输入几个%p,再根据gdb中内容,来观察泄露的位置,再不断修改得到正确的libc start main +243的地址,以及一个随便的栈地址,做完这些前置条件,重点就来了。每个pay最后的p64()是写栈上格式化字符串漏洞时栈对齐时需要的,由于这里不在栈上,那么这里不加就可以。原创 2024-02-22 14:37:46 · 425 阅读 · 1 评论 -
沙盒orw总结
一般沙盒机制开启后,会禁掉execve函数,也就意味着one_gadget以及system函数都不能使用,这就需要去利用open/read/write函数来拿到flag,当程序中出现sanbox或者seccomp时就要注意到开启了沙盒机制,这就可以利用seccomp-tools工具去查看什么函数被禁掉了,然后通过一道题的两种构造orw的方式来加深理解。原创 2024-02-07 20:14:39 · 715 阅读 · 1 评论 -
pwn栈迁移总结
栈迁移往往在发生栈溢出的函数能够溢出的只有rbp与返回地址时进行,由于不能输入更多数据来构造rop链,一般会把栈迁往两个位置,一是原来的栈,二是bss段。在了解栈迁移之前需要先了解两个汇编指令,这是进行栈迁移的关键,leave,ret,这两个一般在函数的最后都会出现,可以清空栈中内容。leave可以理解为mov rsp,rbp;pop rbp这两个汇编指令的效果综合,但只是效果几乎一样,但并不是真的由它俩组成,第一步就是把rbp的值赋给rsp,也就是在同一位置了;原创 2024-01-28 20:43:51 · 2330 阅读 · 0 评论