缓冲区溢出覆盖函数返回地址时异常出现0xc2字节问题咨询
0xc2字节异常的根因与修复方案
根因说明
该问题由Python3的默认编码逻辑导致,具体逻辑如下:
- Python3的
str类型默认是Unicode编码,直接在字符串中写入\x93时,会被识别为Unicode码位U+0093 print执行输出时,默认会将Unicode字符串按UTF-8编码转换为字节流- 码位处于
U+0080 ~ U+07FF区间的Unicode字符,UTF-8编码后会生成2字节内容,U+0093经过编码后恰好生成\xc2\x93,因此多出了意料之外的0xc2字节 - 你之前测试的
\x62、\x04这类值小于0x80的字节,对应的Unicode码位转UTF-8后仍为单字节,所以不会触发该异常
修复方案
修改payload生成命令,直接输出原始字节流,绕过编码转换逻辑即可:
python3 -c 'import sys; sys.stdout.buffer.write(b"A" * 21 + b"\x62\x93\x04\x08")'
修改点说明:
- 给字符串添加
b前缀,声明为bytes原始字节类型,避免被识别为Unicode字符串 - 调用
sys.stdout.buffer.write直接写入字节流,跳过print默认的编码转换步骤
内容的提问来源于stack exchange,提问作者rubleonthedouble
相关产品推荐
相关产品推荐

