用過C#的朋友可能認為它是一種十分安全的語言,其實C#也可以做到經典的緩沖區溢出。 本文章將用一個實例來描述C#究竟是如何發生緩沖區溢出的! 首先建立一個C# Console工程,并開啟工程的“允許

用過C#的朋友可能認為它是一種十分安全的語言,其實C#也可以做到經典的緩沖區溢出。

本文章將用一個實例來描述C#究竟是如何發生緩沖區溢出的!


首先建立一個C# Console工程,并開啟工程的“允許不安全代碼”選項

鍵入代碼:

[csharp]?view plaincopy
print?
  1. using?System;??
  2. using?System.Collections.Generic;??
  3. using?System.Linq;??
  4. using?System.Text;??
  5. ??
  6. namespace?ConsoleTest??
  7. {??
  8. ????class?Program??
  9. ????{??
  10. ????????static?void?Main(string[]?args)??
  11. ????????{??
  12. ????????????char?ori?=?'A';??
  13. ????????????StackOverflow();??
  14. ??????????????
  15. ????????????Console.WriteLine(ori);??
  16. ????????????Console.ReadLine();??
  17. ????????}??
  18. ??
  19. ????????static?unsafe?void?StackOverflow()??
  20. ????????{??
  21. ????????????int*?p?=?stackalloc?int[1];?//聲明一個int數組指針??
  22. ????????????int?i?=?sizeof(int);?//指針增量??
  23. ??
  24. ????????????while?(*p?!=?(int)'A')?//找到Main函數中的ori變量??
  25. ????????????{??
  26. ????????????????p?+=?i;??
  27. ????????????????Console.ForegroundColor?=?ConsoleColor.Yellow;??
  28. ????????????????Console.WriteLine("Address:?{0}",?(int)p);?//輸出當前指針所指向的地址??
  29. ????????????????Console.ForegroundColor?=?ConsoleColor.Gray;??
  30. ????????????????try??
  31. ????????????????{??
  32. ????????????????????Console.WriteLine("Value:?{0}",?*p);??
  33. ????????????????}??
  34. ????????????????catch??
  35. ????????????????{??
  36. ????????????????????Console.WriteLine("We?can't?reach?the?system?area");?//觸及系統變量,無權限訪問跳出??
  37. ????????????????????break;??
  38. ????????????????}??
  39. ????????????????Console.WriteLine();??
  40. ????????????};??
  41. ????????}??
  42. ????}??
  43. }??


大家可以先運行一下:

程序在找到‘A’的ASCII碼后跳出循環。

其實程序的原理是:

p指針指向int數組的第一個元素,指針每次增加一個int的內存空間,由于數組的大小為1,所以兩次循環后就溢出并指向在其前面的內存變量。最終找到ori所在的內存地址。


下面我們嘗試修改ori的值,將其從‘A’修改為‘!’,there we?Go:

這樣修改代碼:


經過這樣的修改,再次運行:



可以看到ori被徹底修改為‘!’了。如果用這種方式將函數的地址進行修改就可以達到執行遠程代碼的目的了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387588.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387588.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387588.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

COOKIE偽造登錄網站后臺

1.關于XSS(跨站腳本攻擊)和CSRF(跨站請求偽造)的知識,xss表示Cross Site Scripting(跨站腳本攻擊),它與SQL注入攻擊類似,SQL注入攻擊中以SQL語句作為用戶輸入,從而達到查詢/修改/刪除…

Spring Cloud 學習 (五) Zuul

Zuul 作為路由網關組件,在微服務架構中有著非常重要的作用,主要體現在以下 6 個方面: Zuul, Ribbon 以及 Eureka 相結合,可以實現智能路由和負載均衡的功能,Zuul 能夠將請求流量按某種策略分發到集群狀態的多個服務實例…

如何利用445端口進行入侵滲透 445端口入侵原因詳細解析。大家在進行入侵滲透個人電腦的時候,經常會碰到各種各樣的端口,比如135,1433,445,3306等端口,現在小編就給大家講解下445端口如

如何利用445端口進行入侵滲透 445端口入侵原因詳細解析。大家在進行入侵滲透個人電腦的時候,經常會碰到各種各樣的端口,比如135,1433,445,3306等端口,現在小編就給大家講解下445端口如何入侵。 445端口入侵…

項目復盤

前言 最近一年半多一直在做一個CMS項目,做了快兩年了也沒有上線,而且開發還走了不少,其中有不少原因是因為開發中頻繁改動需求導致開發人員失去耐心,但是其中還有一個重要的原因就是架構設計的不好,導致很多服務的邊界…

父、子頁面之間頁面元素的獲取,方法的調用

一、在iframe頁面上調取父級頁面元素 1.在父頁面上獲取iframe頁面元素(在父頁面修改子頁面div的背景色為紅色) js代碼如下&#xff1a; 1 <script type"text/javascript"> 2 window.onload function(){ 3 var iframe document.getElementById(iframeId)…

fiddler,他和其他抓包軟件有什么區別,如何使用fiddler進行抓包

前言&#xff1a;本文章是搭配《批量獲取微信公眾號》一文&#xff0c;介于群里朋友很熱情&#xff0c;我就趁著上班測完bug 來撰寫該文章&#xff0c;那么讀完本文&#xff0c;你會學習到什么呢&#xff1f; 什么是fiddler&#xff0c;他和其他抓包軟件有什么區別&#xff0c…

Vue導入非模塊化的第三方插件功能無效解決方案

一、問題&#xff1a; 最近在寫vue項目時&#xff0c;想引入某些非模塊化的第三方插件時&#xff0c;總是發現會有報錯。且在與本地運行插件測試對比時發現插件根本沒有注入到jQuery中&#xff08;console.log($.fn)查看當前jq有哪些方法&#xff09;&#xff0c;例如&#xff…

ES6筆記 -- 字符串拓展

字符串拓展 Unicode 相關 JS 允許使用/uxxxx的Unicode方式顯示字符, 但是只限于碼點在/u0000~/uFFFF之間, 超過該范圍的碼點必須用雙字節形式表示ES6 中, 將碼點放入大括號內, 就可以解讀JS 不能處理4個字節的字符, 字符串長度會被誤判為2ES6 提供了codePointAt方法, 能夠正確處…

android 轉發短信

通過這些代碼也可以對遠程手機實現短信控制。有興趣的可以自己改一下&#xff0c;說一下簡單的原理&#xff0c;要實現控制的話&#xff0c;必須得走一個固定的號碼&#xff0c;固定的格式&#xff0c;然后通過得到此號碼的內容&#xff0c;然后通過固定的內容&#xff0c;就可…

[Noi2016]區間

傳送門 Code /* 線段樹 尺取法 */ #include<bits/stdc.h> #define ll long long #define max(a,b) ((a)>(b)?(a):(b)) #define min(a,b) ((a)>(b)?(b):(a)) #define reg register inline int read() {int x0,f1;char chgetchar();while(ch<0||ch>9){if(…

安裝CentOS6.8并配置網絡圖文解說親測全過程

安裝環境&#xff1a; 本文是在win10系統安裝上VMWare并配置Centos6.8虛擬機。 準備工作 1.安裝VMWare虛擬機 1.1下載VMWare12資源鏈接&#xff1a;https://pan.baidu.com/s/1AhfMSDXLO-aA0eMqnuMWHg 提取碼&#xff1a;iftd 1.2安裝VMWare&#xff0c;在安裝過程中需要輸入密鑰…

Paxos算法是萊斯利·蘭伯特(Leslie Lamport)1990年提出的一種基于消息傳遞的一致性算法。

Paxos算法是萊斯利蘭伯特(Leslie Lamport)1990年提出的一種基于消息傳遞的一致性算法。Paxos算法解決的問題是一個分布式系統如何就某個值&#xff08;決議&#xff09;達成一致。在工程實踐意義上來說&#xff0c;就是可以通過Paxos實現多副本一致性&#xff0c;分布式鎖&…

09、策略模式

2019獨角獸企業重金招聘Python工程師標準>>> 策略模式與工廠模式最大的區別在于&#xff0c;策略模式注重的是對算法的維護&#xff0c;也可以理解為對算法的封裝。而工廠模式&#xff0c;則只是負責創建類&#xff0c;在剛接觸策略模式時候&#xff0c;往往與工廠模…

Linux創建、刪除文件和文件夾命令

https://www.cnblogs.com/c-x-m/p/9794082.html轉載于:https://www.cnblogs.com/sun-ldy/p/10279025.html

Java編寫代理服務器(Burp攔截Demo)一

大家都知道大名鼎鼎的BurpSuite代理神器&#xff0c;對于抓取HTTP請求非常好用&#xff0c;偶然&#xff0c;一朋友問我Java應該如何去編寫代理服務器&#xff08;因為他想做某些東西&#xff09;&#xff0c;有沒有相關的API 去實現&#xff0c;我想說&#xff0c;差不多你能想…

mysql實戰33 | 我查這么多數據,會不會把數據庫內存打爆?

我經常會被問到這樣一個問題&#xff1a;我的主機內存只有 100G&#xff0c;現在要對一個 200G 的大表做全表掃描&#xff0c;會不會把數據庫主機的內存用光了&#xff1f;這個問題確實值得擔心&#xff0c;被系統 OOM&#xff08;out of memory&#xff09;可不是鬧著玩的。但…

[BZOJ2125]最短路

Description 給一個N個點M條邊的連通無向圖&#xff0c;滿足每條邊最多屬于一個環&#xff0c;有Q組詢問&#xff0c;每次詢問兩點之間的最短路徑。 Input 輸入的第一行包含三個整數&#xff0c;分別表示N和M和Q 下接M行&#xff0c;每行三個整數v&#xff0c;u&#xff0c;w表…

Rabbit MQ windows下安裝

Rabbit MQ 是建立在強大的Erlang OTP平臺上&#xff0c;因此安裝Rabbit MQ的前提是安裝Erlang。通過下面兩個連接可以下載安裝最新的版本&#xff1a; 下載并安裝 Eralng OTP For Windows otp_win64_18.3.exe&#xff08;erlang的環境&#xff09;運行安裝 Rabbit MQ Serve…

spark集群配置以及java操作spark小demo

spark 安裝配置使用java來操作sparkspark 安裝 tar -zxvf spark-2.4.0-bin-hadoop2.7.tgz rm spark-2.4.0-bin-hadoop2.7.tgz mv spark-2.4.0-bin-hadoop2.7 sparksudo vim /etc/profileexport SPARK_HOME/usr/local/stormexport PATH$PATH:$SPARK_HOME/binsource /etc/profile…

C++筆記(3)——string.h相關的一些小知識

strlen() 用于得到字符數組中第一個\0前的字符的個數&#xff0c;格式如下&#xff1a; strlen(數組); 例子&#xff1a; #include <stdio.h> #include <string.h>int main(){char str[10];gets(str);int len strlen(str);printf("%d\n", len);return 0…