怎么反弹Sh空指针解

极客

怎么反弹Sh空指针解?看完这篇我直接裂开!🤯

开头先说两句掏心窝子的话

兄弟们,姐妹们,搞网络安全的小伙伴们,咱们今天聊个贼刺激的话题——怎么反弹Sh空指针解

哎呀妈呀,这标题打出来我自己都愣了一下,是不是感觉像在看天书?别急别急,我当初第一次看到这玩意儿的时候,也是满头问号,心里直嘀咕:这啥玩意儿啊?是让我把空指针给整活过来吗?😂

其实吧,这问题在CTF比赛和真实渗透测试里都挺常见的,尤其是那些搞二进制安全的兄弟们,估计没少被这东西折磨,今天我就以一个过来人的身份,跟大家唠唠我踩过的坑,还有我摸索出来的那点小经验。

什么是Sh空指针解?别慌,我用大白话给你讲!

首先咱们得知道,Sh空指针解,听起来高大上,说白了就是在程序把空指针(NULL)当成一个有效地址来引用的时候,我们想办法让它别崩,甚至反弹一个Shell回来,这里面“反弹”不是指篮球啊,是反向连接的意思,Sh就是Shell,懂了吧?

这玩意儿经常出现在CTF的pwn题里,比如格式化字符串漏洞或者堆溢出之后,你想执行system("/bin/sh"),结果各种沙箱、各种限制,你发现程序一发疯就崩了,咋整?哎,这时候就是怎么反弹Sh空指针解这问题该上场的时候了!

我的实战经历:真tm刺激!

我记得有次打一个内部靶场,题目是个C语言写的服务,有个明显的空指针解引用漏洞,我当时心里那个激动啊,感觉胜利就在眼前,结果呢?人家程序用了信号处理机制,空指针一触发就SIGSEGV,然后直接给我断掉连接,我人都傻了。

我当时就在想:怎么反弹Sh空指针解?总不能硬碰硬吧?

后来我翻了很多大佬的博客(不懂就问,不会就搜嘛),才慢慢琢磨出三招:

第1招:改信号处理函数

如果程序里有signal()或者sigaction(),你可以通过漏洞改写信号处理函数的指针,让它指向你的shellcode地址,这样空指针一触发,诶,它不崩了,反而去执行你的代码!这不就反弹Sh了吗?我个人觉得这招最骚,但前提是你得有写内存的漏洞。

第2招:利用SEccomp绕过

有时候系统开了沙箱,你就算拿到shell也干不了啥,这时候你得想着先用空指针解触发一个异常,然后在异常处理里把沙箱规则给它扒了,再一步步构造反弹shell,这过程真的跟拆炸弹一样,紧张得我手心都出汗了!

第3招:直接改空指针映射

想硬刚的话,你可以在用户态把地址0映射到一段可读写可执行的内存,这样空指针就不是“空”的了,它是实打实指向你的代码!这招在Linux下用mmap就能搞,但得注意,有些环境会限制低地址映射,唉,说多了都是泪。

我的心态变化:从崩溃到佛系

说实话,一开始我遇到空指针解的问题,心里就一个念头:完了,这题凉了,但后来我学会了深呼吸,告诉自己“怎么反弹Sh空指针解?慢慢来呗,反正又不会少块肉”。

我觉得搞网络安全,心态真的得放平,你越急,指针越飘;你越稳,shell越顺,有时候我调试到半夜,眼睛都快瞎了,突然发现只是偏移算错了一位,那种感觉,又想笑又想哭,真的是又爱又恨啊!

结尾了,给你点干货建议

如果你也在纠结怎么反弹Sh空指针解,我给你三个小建议:

  1. 多调试,少瞎猜:用gdb断点看寄存器,看栈布局,比你在脑海里面空想一万遍都强。
  2. 多看看别人的writeup:大佬们的思路真的能给你打开新世界大门。
  3. 别怕报错:报错是最好的老师,每次崩溃都离成功近一步,真的!

好啦,今天就唠到这儿吧,我心里还有好多话想说,但一时半会儿也说不完,如果你也对网络安全感兴趣,想一起交流切磋,欢迎加我的QQ,咱们可以互相学习,一起进步!🤝

最后送大家一句话:空指针不是终点,反弹shell才是归宿!冲鸭!🚀

怎么反弹Sh空指针解

学习网络安全可以加QQ!

文章版权声明:除非注明,否则均为咸鱼-即刻攻防原创文章,转载或复制请以超链接形式并注明出处。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码