开启了NX,64位,动态编译,IDA分析
main函数的逻辑则是,先输出名字的长度,长度不能大于10,然后read读取名字
正常情况下read是不存在溢出的,因此nbytes最大为10。
但我们发现nbytes为size_t类型,该类型是标准C库中定义的,为unsigned int类型,即无符号整数类型,但在if判断时将其转为有符号整型,而read时又为无符号整型,那就存在无符号转有符号漏洞。
假设当我们输入一个无符号整数ffff,即65535,但ff转为有符号时,则将表示为-1,-1<10,这是对read函数来说读取的字节大小就是65535字节。
exp: