我一本書我已經在網上找到學習計算機安全(很新的這東西,去容易!),和一章教你關於溢出堆棧。在程序中使用的功能是:溢出到堆棧變量混亂(計算機安全)
void vuln(int tmp, char *str) {
//attempting to overflow into tmp, setting win accordingly
int win = tmp;
//overflowing this array!
char buf[64];
strcpy(buf, str);
dump_stack((void **) buf, 23, (void **) &tmp);
printf("win = %d\n", win);
if (win == 1) {
printf("You win!\n");
} else {
printf("Sorry, you lose.\n");
}
exit(0);
}
我想要做的就是溢出buf
和tmp
值設置爲一個,設置相應的贏,讓我贏。
我目前使用的快速python腳本打印出84字母「A對堆棧的填充我想將值設置爲變量的地步。這是呼叫我做在命令提示符:
./simple_overwrite $(python -c "print 'A'*84)
給出的輸出是:
Stack dump:
> 0xffffd614: 0xffffd803 (second argument)
> 0xffffd610: 0x00000000 (first argument)
> 0xffffd60c: 0x41414141 (saved eip)
> 0xffffd608: 0x41414141 (saved ebp)
> 0xffffd604: 0x41414141
> 0xffffd600: 0x41414141
> 0xffffd5fc: 0x41414141
> 0xffffd5f8: 0x41414141
> 0xffffd5f4: 0x41414141
> 0xffffd5f0: 0x41414141
> 0xffffd5ec: 0x41414141
> 0xffffd5e8: 0x41414141
> 0xffffd5e4: 0x41414141
> 0xffffd5e0: 0x41414141
> 0xffffd5dc: 0x41414141
> 0xffffd5d8: 0x41414141
> 0xffffd5d4: 0x41414141
> 0xffffd5d0: 0x41414141
> 0xffffd5cc: 0x41414141
> 0xffffd5c8: 0x41414141
> 0xffffd5c4: 0x41414141
> 0xffffd5c0: 0x41414141
> 0xffffd5bc: 0x41414141 (beginning of buffer)
> win = 1094795585
> Sorry, you lose.
雖然我不太清楚什麼劇本後進入設置地址指向到一個值,我試過0x1,只是1,但都沒有工作。任何幫助真的很感激,謝謝!
P.S.我知道這是一個相當不好的習慣,但請記住這是關於計算機安全的,我決不想在本教程之外使用它。
爲什麼你認爲這是一個_bad_東西來了解這些問題?因爲知識是危險的? _瞭解脆弱性是如何發生的以及如何微不足道的一些可以被利用通常具有「學習」的副作用以避免首先創建它們。 – 2013-05-01 08:11:30
我假設你參加了我正在幫助運行的PicoCTF競賽。正如我們在[常見問題](https://picoctf.com/faq)頁面上明確指出的那樣,這被認爲是**被認爲是作弊**:「與其他團隊共享密鑰或提供過度泄露提示是作弊的,就像直接由團隊以外的人員協助(使用互聯網上的工具確定; *請求互聯網上的人幫助您解決問題不是*)。「 〜PicoCTF主持人 – 2013-05-06 02:28:40