Stack buffer overflow
સોફ્ટવેરમાં, સ્ટેક બફર ઓવરફ્લો અથવા સ્ટેક બફર ઓવરરન ત્યારે થાય છે જ્યારે પ્રોગ્રામ ઇચ્છિત ડેટા સ્ટ્રક્ચરની બહાર પ્રોગ્રામના કોલ સ્ટેક પર મેમરી એડ્રેસ પર લખે છે, જે સામાન્ય રીતે ફિક્સ્ડ-લેંથ બફર હોય છે. સ્ટૅક બફર ઓવરફ્લો બગ્સ ત્યારે થાય છે જ્યારે કોઈ પ્રોગ્રામ સ્ટેક પર સ્થિત બફરને તે બફર માટે ખરેખર ફાળવવામાં આવેલી માહિતી કરતાં વધુ માહિતી લખે છે. આ લગભગ હંમેશા સ્ટેક પર અડીને આવેલા ડેટાના ભ્રષ્ટાચારમાં પરિણમે છે, અને એવા કિસ્સાઓમાં કે જ્યાં ભૂલથી ઓવરફ્લો શરૂ થયો હોય, તે ઘણીવાર પ્રોગ્રામને ક્રેશ અથવા ખોટી રીતે સંચાલિત કરવાનું કારણ બને છે. સ્ટેક બફર ઓવરફ્લો એ વધુ સામાન્ય પ્રોગ્રામિંગ ખામીનો એક પ્રકાર છે જે બફર ઓવરફ્લો (અથવા બફર ઓવરરન) તરીકે ઓળખાય છે. ઢગલા પરના બફરને વધુ ભરવા કરતાં ઢગલા પરના બફરને વધુ ભરવા એ પ્રોગ્રામના અમલને પાટા પરથી ઉતારવાની શક્યતા વધારે છે કારણ કે ઢગલામાં તમામ સક્રિય કાર્ય કૉલ્સ માટે વળતર સરનામાંઓ હોય છે. સ્ટૅક સ્મેશિંગ તરીકે ઓળખાતા હુમલાના ભાગરૂપે સ્ટૅક બફર ઓવરફ્લો ઇરાદાપૂર્વક થઈ શકે છે. જો અસરગ્રસ્ત પ્રોગ્રામ વિશેષ વિશેષાધિકારો સાથે ચાલી રહ્યો હોય, અથવા અવિશ્વસનીય નેટવર્ક યજમાનો પાસેથી ડેટા સ્વીકારે છે (દા. ત. એક વેબ સર્વર) પછી બગ એ સંભવિત સુરક્ષા નબળાઈ છે. જો સ્ટૅક બફર અવિશ્વસનીય વપરાશકર્તા દ્વારા પૂરા પાડવામાં આવેલા ડેટાથી ભરેલું હોય તો તે વપરાશકર્તા સ્ટેકને એવી રીતે ભ્રષ્ટ કરી શકે છે કે ચાલી રહેલા પ્રોગ્રામમાં એક્ઝેક્યુટેબલ કોડ દાખલ કરી શકે અને પ્રક્રિયાને નિયંત્રિત કરી શકે. હુમલાખોરો માટે કમ્પ્યુટરની અનધિકૃત ઍક્સેસ મેળવવા માટેની આ સૌથી જૂની અને વધુ વિશ્વસનીય પદ્ધતિઓમાંની એક છે. સ્ટૅક-આધારિત બફર ઓવરફ્લોના શોષણ માટેની કેનોનિકલ પદ્ધતિ એ છે કે હુમલાખોર-નિયંત્રિત ડેટા (સામાન્ય રીતે સ્ટૅક પર જ) માટે નિર્દેશક સાથે કાર્ય રીટર્ન સરનામાંને ફરીથી લખવું. આ નીચે આપેલા ઉદાહરણમાં એઆરસીપી () સાથે સચિત્ર છેઃ #include <string.h> રદબાતલ ફૂ (ચાર * બાર) {ચાર સી [12]; એઆરસીપી (સી, બાર);// નો બાઉન્ડ્સ ચેકિંગ} ઇન્ટ મેઇન (ઇન્ટ આરજીસી, ચાર * * આરજીવી) {ફૂ (આરજીવી [1]); રીટર્ન 0;} આ કોડ આદેશ વાક્યમાંથી દલીલ લે છે અને તેને સ્થાનિક સ્ટેક ચલ સીમાં નકલ કરે છે. આ 12 અક્ષરોથી નાની આદેશ વાક્ય દલીલો માટે સારું કામ કરે છે (નીચેની આકૃતિ બીમાં જોઈ શકાય છે). 11 અક્ષરોથી વધુ લાંબી કોઈપણ દલીલો સ્ટેકના ભ્રષ્ટાચારમાં પરિણમશે. (સલામત અક્ષરોની મહત્તમ સંખ્યા અહીં બફરના કદ કરતાં એક ઓછી છે કારણ કે સી પ્રોગ્રામિંગ ભાષામાં, શબ્દમાળાઓ નલ બાઈટ અક્ષર દ્વારા સમાપ્ત થાય છે. આમ બાર-અક્ષરના ઇનપુટને સંગ્રહિત કરવા માટે તેર બાઇટ્સની જરૂર પડે છે, ઇનપુટને સેન્ટીનલ શૂન્ય બાઈટ દ્વારા અનુસરવામાં આવે છે. શૂન્ય બાઈટ પછી મેમરી સ્થાનને ઓવરરાઈટ કરે છે જે બફરના અંતની બહાર એક બાઈટ છે.) પ્રોગ્રામ વિવિધ ઇનપુટ્સ સાથે fho () માં સ્ટેક કરે છેઃ ઉપરની આકૃતિ C માં, જ્યારે આદેશ વાક્ય fho () પર 11 બાઇટ્સથી મોટી દલીલ પૂરી પાડવામાં આવે છે ત્યારે સ્થાનિક સ્ટેક ડેટા, સાચવેલ ફ્રેમ પોઇન્ટર અને સૌથી અગત્યનું, વળતર સરનામું ઓવરરાઇટ કરે છે. જ્યારે ફૂ () પાછું આપે છે ત્યારે તે વળાંકમાંથી વળતરનું સરનામું બહાર કાઢે છે અને તે સરનામાં પર કૂદી જાય છે (એટલે કે. તે સરનામાંથી સૂચનાઓ ચલાવવાનું શરૂ કરે છે). આમ, હુમલાખોરે સ્ટૅક બફર ચાર સી [12] ના નિર્દેશક સાથે વળતર સરનામાંને ફરીથી લખ્યું છે, જે હવે હુમલાખોર દ્વારા પૂરા પાડવામાં આવેલ ડેટા ધરાવે છે. વાસ્તવિક સ્ટૅક બફર ઓવરફ્લોમાં "A" ની સ્ટ્રિંગનો ઉપયોગ તેના બદલે પ્લેટફોર્મ અને ઇચ્છિત કાર્ય માટે યોગ્ય શેલકોડ હશે. જો આ કાર્યક્રમને વિશેષ વિશેષાધિકારો હોત (દા. ત. સુપરયુઝર તરીકે ચલાવવા માટે સુઇડ બીટ સેટ કરેલ છે), પછી હુમલાખોર અસરગ્રસ્ત મશીન પર સુપરયુઝર વિશેષાધિકારો મેળવવા માટે આ નબળાઈનો ઉપયોગ કરી શકે છે. હુમલાખોર કેટલીક ભૂલો મેળવવા માટે આંતરિક ચલ મૂલ્યોમાં પણ ફેરફાર કરી શકે છે. આ ઉદાહરણ સાથેઃ #include <string.h> #include <stdio.h> રદબાતલ ફૂ (ચાર * બાર) {ફ્લોટ માય ફ્લોટ = 10.5;// એડર = 0x0023FF4C ચાર સી [28];// એડર = 0x0023FF30// પ્રિન્ટ કરશે 10.500000 પ્રિન્ટફ ("મારી ફ્લોટ કિંમત =% f", માય ફ્લોટ);/* ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ !!!!! XXXX "); memcpy 0x1010C042 (લિટલ એન્ડિયન) ને My _ Float મૂલ્યમાં મૂકશે. ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ !!!!! \x10\x10\xc0\x42 "); વળતર 0;} પ્લેટફોર્મ-સંબંધિત તફાવતો સંખ્યાબંધ પ્લેટફોર્મ્સ કોલ સ્ટેકના અમલીકરણમાં સૂક્ષ્મ તફાવતો ધરાવે છે જે સ્ટેક બફર ઓવરફ્લો શોષણ જે રીતે કાર્ય કરશે તેને અસર કરી શકે છે. કેટલાક મશીન આર્કિટેક્ચર કૉલ સ્ટેકનું ટોચનું વળતર સરનામું રજિસ્ટરમાં સંગ્રહિત કરે છે. આનો અર્થ એ છે કે કોઈ પણ ઓવરરાઇટ કરેલા રીટર્ન સરનામાંનો ઉપયોગ પછીથી કોલ સ્ટેકને ખોલવામાં ન આવે ત્યાં સુધી કરવામાં આવશે નહીં. મશીન-વિશિષ્ટ વિગતનું બીજું ઉદાહરણ કે જે શોષણ તકનીકોની પસંદગીને અસર કરી શકે છે તે હકીકત એ છે કે મોટાભાગના RISC-શૈલીના મશીન આર્કિટેક્ચર મેમરીમાં બિનજોડાણની ઍક્સેસને મંજૂરી આપશે નહીં. મશીન ઓપકોડ્સ માટે નિશ્ચિત લંબાઈ સાથે જોડાઈને, આ મશીનની મર્યાદા સ્ટેક પર કૂદી જવાની તકનીકને અમલમાં મૂકવી લગભગ અશક્ય બનાવી શકે છે (એક અપવાદ એ છે કે જ્યારે પ્રોગ્રામમાં ખરેખર સ્ટેક રજિસ્ટર પર કૂદી જવા માટે અસંભવિત કોડ હોય છે). સ્ટૅક બફર ઓવરફ્લોના વિષયમાં, ઘણીવાર ચર્ચા કરાયેલ-પરંતુ-ભાગ્યે જ જોવા મળતું આર્કિટેક્ચર તે છે જેમાં સ્ટેક વિરુદ્ધ દિશામાં વધે છે. આર્કિટેક્ચરમાં આ ફેરફાર વારંવાર સ્ટેક બફર ઓવરફ્લો સમસ્યાના ઉકેલ તરીકે સૂચવવામાં આવે છે કારણ કે સમાન સ્ટેક ફ્રેમની અંદર આવતા સ્ટેક બફરનો કોઈપણ ઓવરફ્લો રીટર્ન પોઇન્ટરને ઓવરરાઇટ કરી શકતો નથી. જો કે, અગાઉની સ્ટૅક ફ્રેમમાંથી બફરમાં થતો કોઈપણ ઓવરફ્લો હજી પણ રીટર્ન પોઇન્ટરને ઓવરરાઇટ કરશે અને બગના દુર્ભાવનાપૂર્ણ શોષણ માટે પરવાનગી આપશે. દાખલા તરીકે, ઉપરના ઉદાહરણમાં, ફૂ માટે રીટર્ન પોઇન્ટર ફરીથી લખવામાં આવશે નહીં કારણ કે ઓવરફ્લો ખરેખર મેમ્સીપી માટે સ્ટેક ફ્રેમની અંદર થાય છે. જો કે, કારણ કે મેમકપી પરના કોલ દરમિયાન ઓવરફ્લો થતો બફર અગાઉના સ્ટેક ફ્રેમમાં રહે છે, મેમકપી માટેના રીટર્ન પોઇન્ટરમાં બફર કરતાં આંકડાકીય રીતે ઊંચું મેમરી સરનામું હશે. આનો અર્થ એ છે કે ફૂ માટે રીટર્ન પોઇન્ટરને ફરીથી લખવાને બદલે, મેમ્સીપી માટે રીટર્ન પોઇન્ટર ફરીથી લખવામાં આવશે. વધુમાં વધુ, આનો અર્થ એ છે કે વિરુદ્ધ દિશામાં સ્ટૅકને વધારવાથી સ્ટૅક બફર ઓવરફ્લો કેવી રીતે શોષણક્ષમ છે તેની કેટલીક વિગતો બદલાશે, પરંતુ તે શોષણક્ષમ ભૂલોની સંખ્યામાં નોંધપાત્ર ઘટાડો કરશે નહીં. સંરક્ષણ યોજનાઓ વર્ષોથી, દૂષિત સ્ટૅક બફર ઓવરફ્લો શોષણને રોકવા માટે સંખ્યાબંધ નિયંત્રણ-પ્રવાહ અખંડિતતા યોજનાઓ વિકસાવવામાં આવી છે. આને સામાન્ય રીતે ત્રણ વર્ગોમાં વર્ગીકૃત કરી શકાય છેઃ સ્ટેક બફર ઓવરફ્લો થયો છે તે શોધો અને આમ સૂચના નિર્દેશકને દૂષિત કોડ તરફ રીડાયરેક્ટ કરતા અટકાવો. સ્ટૅક બફર ઓવરફ્લોને સીધો શોધી કાઢ્યા વિના સ્ટૅકમાંથી દૂષિત કોડના અમલને અટકાવો. મેમરીની જગ્યાને એવી રીતે રેન્ડમાઇઝ કરો કે એક્ઝેક્યુટેબલ કોડ શોધવો અવિશ્વસનીય બની જાય. સ્ટૅક કેનરીઝ, જેને કોલસાની ખાણમાં કેનરી સાથે તેમની સામ્યતા માટે નામ આપવામાં આવ્યું છે, તેનો ઉપયોગ દૂષિત કોડનો અમલ થાય તે પહેલાં સ્ટૅક બફર ઓવરફ્લોને શોધવા માટે થાય છે. આ પદ્ધતિ નાના પૂર્ણાંકને મૂકીને કામ કરે છે, જેનું મૂલ્ય પ્રોગ્રામની શરૂઆતમાં અવ્યવસ્થિત રીતે પસંદ કરવામાં આવે છે, મેમરીમાં સ્ટેક રીટર્ન પોઇન્ટરની બરાબર પહેલાં. મોટાભાગના બફર ઓવરફ્લો મેમરીને નીચલાથી ઉચ્ચ મેમરી સરનામાંઓ પર ઓવરરાઈટ કરે છે, તેથી રીટર્ન પોઇન્ટરને ઓવરરાઈટ કરવા માટે (અને આમ પ્રક્રિયાને નિયંત્રિત કરવા માટે) કેનેરી મૂલ્ય પણ ઓવરરાઈટ કરવું આવશ્યક છે. આ મૂલ્ય એ સુનિશ્ચિત કરવા માટે ચકાસવામાં આવે છે કે નિયમિત સ્ટૅક પર રીટર્ન પોઇન્ટરનો ઉપયોગ કરે તે પહેલાં તે બદલાયું નથી. આ તકનીક સ્ટૅક બફર ઓવરફ્લોને ઉપયોગમાં લેવાની મુશ્કેલીમાં ઘણો વધારો કરી શકે છે કારણ કે તે હુમલાખોરને કેટલાક બિન-પરંપરાગત માધ્યમો દ્વારા સૂચના નિર્દેશક પર નિયંત્રણ મેળવવા માટે દબાણ કરે છે જેમ કે સ્ટેક પરના અન્ય મહત્વપૂર્ણ ચલોને દૂષિત કરવા. બિનકાર્યક્ષમ સ્ટૅક સ્ટૅક બફર ઓવરફ્લો શોષણને અટકાવવાનો બીજો અભિગમ એ છે કે સ્ટેક મેમરી ક્ષેત્ર પર મેમરી નીતિ લાગુ કરવી જે સ્ટેકમાંથી અમલને મંજૂરી આપતું નથી (W ^ X, "Write XOR Execut"). આનો અર્થ એ છે કે સ્ટૅકમાંથી શેલકોડ ચલાવવા માટે હુમલાખોરે ક્યાં તો મેમરીમાંથી એક્ઝેક્યુશન પ્રોટેકશનને નિષ્ક્રિય કરવાનો માર્ગ શોધવો પડશે, અથવા તેમના શેલકોડ પેલોડને મેમરીના બિન-સંરક્ષિત ક્ષેત્રમાં મૂકવાનો માર્ગ શોધવો પડશે. આ પદ્ધતિ હવે વધુ લોકપ્રિય બની રહી છે કારણ કે મોટાભાગના ડેસ્કટોપ પ્રોસેસરોમાં નો-એક્ઝિક્યુટ ફ્લેગ માટે હાર્ડવેર સપોર્ટ ઉપલબ્ધ છે. જ્યારે આ પદ્ધતિ કેનોનિકલ સ્ટૅક સ્મેશિંગ શોષણને અટકાવે છે, ત્યારે સ્ટેક ઓવરફ્લોને અન્ય રીતે ઉપયોગમાં લઈ શકાય છે. પ્રથમ, ઢગલા જેવા અસુરક્ષિત મેમરી વિસ્તારોમાં શેલકોડ સંગ્રહિત કરવાની રીતો શોધવી સામાન્ય છે, અને તેથી શોષણના માર્ગમાં ખૂબ જ ઓછા ફેરફારની જરૂર છે. બીજો હુમલો શેલકોડ બનાવવા માટે કહેવાતી રીટર્ન ટુ લિબસી પદ્ધતિ છે. આ હુમલામાં દુર્ભાવનાપૂર્ણ પેલોડ માળખાને શેલકોડ સાથે નહીં, પરંતુ યોગ્ય કોલ માળખા સાથે લોડ કરશે જેથી અમલને પ્રમાણભૂત લાઈબ્રેરી કૉલ્સની સાંકળમાં વેક્ટર કરવામાં આવે, સામાન્ય રીતે મેમરી એક્ઝિક્યુટ સુરક્ષાને નિષ્ક્રિય કરવાની અને શેલકોડને સામાન્ય રીતે ચલાવવાની મંજૂરી આપવાની અસર સાથે. આ કામ કરે છે કારણ કે એક્ઝેક્યુશન ખરેખર ક્યારેય સ્ટેકના વેક્ટર નથી. રીટર્ન-ટુ-લિબસીનો એક પ્રકાર રીટર્ન-ઓરિએન્ટેડ પ્રોગ્રામિંગ (આરઓપી) છે, જે રીટર્ન સરનામાંની શ્રેણી સુયોજિત કરે છે, જેમાંથી દરેક હાલના પ્રોગ્રામ કોડ અથવા સિસ્ટમ લાઈબ્રેરીઓમાં ચેરી-ચૂંટેલા મશીન સૂચનાઓનો એક નાનો ક્રમ ચલાવે છે, જે ક્રમ રીટર્ન સાથે સમાપ્ત થાય છે. આ કહેવાતા ઉપકરણો દરેક પાછા ફરતા પહેલા કેટલાક સરળ નોંધણી હેરફેર અથવા સમાન અમલને પૂર્ણ કરે છે, અને તેમને એકસાથે દોરીને હુમલાખોરના અંતને પ્રાપ્ત કરે છે. "રીટર્નલેસ" રીટર્ન-ઓરિએન્ટેડ પ્રોગ્રામિંગનો ઉપયોગ સૂચનો અથવા સૂચનોના જૂથોનો ઉપયોગ કરીને પણ શક્ય છે જે રીટર્ન સૂચનાની જેમ વર્તે છે. રેન્ડમાઇઝેશન કોડને ડેટાથી અલગ કરવાને બદલે, અન્ય શમન તકનીક એક્ઝિક્યુટિવ પ્રોગ્રામની મેમરી સ્પેસમાં રેન્ડમાઇઝેશન રજૂ કરવાની છે. હુમલાખોરને એ નક્કી કરવાની જરૂર છે કે એક્ઝેક્યુટેબલ કોડ ક્યાં રહે છે જેનો ઉપયોગ કરી શકાય છે, ક્યાં તો એક્ઝેક્યુટેબલ પેલોડ પ્રદાન કરવામાં આવે છે (એક્ઝેક્યુટેબલ સ્ટેક સાથે) અથવા એક કોડના પુનઃઉપયોગનો ઉપયોગ કરીને બનાવવામાં આવે છે જેમ કે રેટ2લિબસી અથવા રીટર્ન-ઓરિએન્ટેડ પ્રોગ્રામિંગ (આરઓપી). મેમરી લેઆઉટને અવ્યવસ્થિત બનાવવું, એક ખ્યાલ તરીકે, હુમલાખોરને કોઈપણ કોડ ક્યાં છે તે જાણવાથી અટકાવશે. જો કે, અમલીકરણ સામાન્ય રીતે દરેક વસ્તુને રેન્ડમાઇઝ નહીં કરે; સામાન્ય રીતે એક્ઝેક્યુટેબલ પોતે એક નિશ્ચિત સરનામાં પર લોડ થાય છે અને તેથી જ્યારે ASLR (એડ્રેસ સ્પેસ લેઆઉટ રેન્ડમાઇઝેશન) ને બિન-એક્ઝેક્યુટેબલ સ્ટેક સાથે જોડવામાં આવે છે ત્યારે પણ હુમલાખોર મેમરીના આ નિશ્ચિત પ્રદેશનો ઉપયોગ કરી શકે છે. તેથી, તમામ પ્રોગ્રામ્સને પી. આઈ. ઈ. (પોઝિશન-ઇન્ડિપેન્ડન્ટ એક્ઝેક્યુટેબલ) સાથે સંકલિત કરવા જોઈએ જેથી મેમરીનો આ વિસ્તાર પણ રેન્ડમાઇઝ્ડ હોય. રેન્ડમાઇઝેશનની એન્ટ્રોપી અમલીકરણથી અમલીકરણમાં અલગ છે અને પૂરતી ઓછી એન્ટ્રોપી પોતે જ મેમરીની જગ્યાને બળજબરી કરવાની દ્રષ્ટિએ એક સમસ્યા બની શકે છે જે રેન્ડમાઇઝ્ડ છે. બાયપાસ કાઉન્ટરમીઝર્સ અગાઉના ઘટાડાઓ શોષણના પગલાંને મુશ્કેલ બનાવે છે. પરંતુ જો કેટલીક નબળાઈઓ હાજર હોય અથવા જો કેટલીક શરતો પૂરી થાય તો પણ સ્ટૅક બફર ઓવરફ્લોનો ઉપયોગ કરવો શક્ય છે. સ્ટૅક કેનરી બાયપાસ ફોર્મેટ સ્ટ્રિંગ નબળાઈ શોષણ સાથે માહિતી લીક હુમલાખોર સંવેદનશીલ પ્રોગ્રામમાં મેમરી સ્થાનોને જાહેર કરવા માટે ફોર્મેટ સ્ટ્રિંગ નબળાઈનો ઉપયોગ કરવામાં સક્ષમ છે. નોન એક્ઝેક્યુટેબલ સ્ટેક બાયપાસ જ્યારે ડેટા એક્ઝેક્યુશન પ્રિવેન્શનને સ્ટેકમાં કોઈપણ એક્ઝેક્યુટ ઍક્સેસને પ્રતિબંધિત કરવા માટે સક્ષમ કરવામાં આવે છે, ત્યારે હુમલાખોર હજી પણ કોડ સેગમેન્ટ (લિનક્સ પર) અથવા પ્રોગ્રામના દરેક અન્ય એક્ઝેક્યુટેબલ વિભાગમાં ડેટાને નિર્દેશ કરવા માટે ઓવરરાઇટ રીટર્ન એડ્રેસ (સૂચના નિર્દેશક) નો ઉપયોગ કરી શકે છે. ધ્યેય હાલના કોડનો ફરીથી ઉપયોગ કરવાનો છે. રોપ ચેઇન પ્રોગ્રામની રીટર્ન સૂચના (x86 માં રીટ) પહેલાં રીટર્ન પોઇન્ટરને થોડું ઓવરરાઇટ કરવાનો સમાવેશ કરે છે. નવા રીટર્ન પોઇન્ટર અને રીટર્ન સૂચના વચ્ચેની સૂચનાઓ ચલાવવામાં આવશે અને રીટર્ન સૂચના શોષણકર્તા દ્વારા નિયંત્રિત પેલોડ પર પરત આવશે. જોપ ચેઇન જમ્પ ઓરિએન્ટેડ પ્રોગ્રામિંગ એ એક એવી તકનીક છે જે રીટ સૂચનાને બદલે કોડનો ફરીથી ઉપયોગ કરવા માટે જમ્પ સૂચનાઓનો ઉપયોગ કરે છે. રેન્ડમાઇઝેશન બાયપાસ 64-બીટ સિસ્ટમો પર ASLR અનુભૂતિ એક મર્યાદા એ છે કે તે મેમરી જાહેરાત અને માહિતી લિકેજના હુમલાઓ માટે સંવેદનશીલ છે. હુમલાખોર માહિતી લિકેજના હુમલાનો ઉપયોગ કરીને એક જ કાર્યનું સરનામું જાહેર કરીને આરઓપી શરૂ કરી શકે છે. નીચેનો વિભાગ એ. એસ. એલ. આર. સંરક્ષણને તોડવા માટે સમાન હાલની વ્યૂહરચનાનું વર્ણન કરે છે. નોંધપાત્ર ઉદાહરણો 1988 માં મોરિસ કૃમિ યુનિક્સ ફિંગર સર્વરમાં સ્ટેક બફર ઓવરફ્લોનો ઉપયોગ કરીને ભાગમાં ફેલાયો હતો. 2003માં સ્લેમર કૃમિ માઇક્રોસોફ્ટના એસક્યુએલ સર્વરમાં સ્ટૅક બફર ઓવરફ્લોના ઉપયોગથી ફેલાયો હતો. 2003માં બ્લાસ્ટર કૃમિ માઈક્રોસોફ્ટ ડી. સી. ઓ. એમ. સેવામાં સ્ટૅક બફર ઓવરફ્લોના ઉપયોગથી ફેલાયો હતો. 2004માં વિટ્ટી વોર્મ ઇન્ટરનેટ સિક્યુરિટી સિસ્ટમ્સ બ્લેકઆઇસીઇ ડેસ્કટોપ એજન્ટમાં સ્ટૅક બફર ઓવરફ્લોના ઉપયોગથી ફેલાયો હતો. વાઈના કેટલાક ઉદાહરણો છે જે મનસ્વી કોડને બિનપરિવર્તિત સિસ્ટમ પર ચલાવવાની મંજૂરી આપે છે. "ટ્વીલાઇટ હેક" જેમાં મુખ્ય પાત્રના ઘોડાને ધ લિજેન્ડ ઓફ ઝેલ્ડાઃ ટ્વીલાઇટ પ્રિન્સેસમાં લાંબુ નામ આપવું અને સુપર સ્મેશ બ્રધર્સ બ્રોલ માટે "સ્મેશ સ્ટેક" નો સમાવેશ થાય છે, જેમાં ઇન-ગેમ લેવલ એડિટરમાં ખાસ તૈયાર કરેલી ફાઇલને લોડ કરવા માટે એસ. ડી. કાર્ડનો ઉપયોગ કરવામાં આવે છે. જો કે બંનેનો ઉપયોગ કોઈપણ મનસ્વી કોડને ચલાવવા માટે થઈ શકે છે, બાદમાંનો ઉપયોગ ઘણીવાર લાગુ કરેલા ફેરફારો સાથે ફક્ત બોલાચાલીને ફરીથી લોડ કરવા માટે થાય છે. ExecShield હીપ ઓવરફ્લો પૂર્ણાંક ઓવરફ્લો NX બિટ-મેમરી સુરક્ષા-ઉન્નત લિનક્સ સ્ટેક ઓવરફ્લોના ક્ષેત્રો માટે નો-એક્ઝિક્યુટ બીટ-જ્યારે સ્ટેક પોતે જ સંગ્રહ ઉલ્લંઘન સંદર્ભો સોફ્ટવેર ભૂલોને ઓવરફ્લો કરે છે ત્યારે સોફ્ટવેર વિસંગતતાઓ કમ્પ્યુટર સુરક્ષા કમ્પ્યુટર ભૂલોનો ઉપયોગ કરે છે