簡體   English   中英

printf出了點問題

[英]Something wrong with printf or something

輸入以下內容時,我正在閱讀有關安全編程的材料:./a.out%.622496x%.622496x%n

./a.out%.. 622496x%n

./a.out%.633x%.63336x%n

./a.out%.6edd33x%.63336x%n

有些會被轉儲,有些則不會,不知道為什么打印全0。

這是代碼example.c gcc example.c

#include <stdio.h>
#include <string.h>

int main(int argc,char *argv[])
{
    char buffer[512]="";
    strncpy(buffer,argv[1],500);
    printf(buffer);

    return 0; 
}

在顯示這樣的字符串之前,您必須清理輸入。

因為您有%xxx是字符串,所以printf會將它們解釋為潛在參數,然后將嘗試獲取它們,從而進行核心轉儲。 但這會進一步發展,因為這可能意味着通過此機制的安全攻擊。 在某種程度上,這與SQL注入的C等效。

與@TypeIA一樣,執行此操作的正確方法是將buffer視為格式化字符串( printf("%s", buffer) )的參數,而不是格式化字符串本身。 這也是為什么某些編譯器在創建帶有參數的函數時會發出警告的原因( char * format, ... ); (不是const)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM