22 Ocak 2014 Çarşamba
26 Aralık 2013 Perşembe
Windows API Programlamaya İlişkin Temel Bilgiler
Windows API programlama yaparken kaynak kodun içerisine windows.h dosyasi include edilmelidir. Bu dosya içerisinde içerisinde gereken pekçok bildirim vardir.
Sistem programlamada yazim stili olarak macar notasyonu (hungarian notation) kullanilir.
Macar notasyonuna göre;
#ifdef UNICODE
#define TEXT() L##S
#else
#define TEXT(,) S
#endif
Sistem programlamada yazim stili olarak macar notasyonu (hungarian notation) kullanilir.
Macar notasyonuna göre;
- Fonksiyonlar pascal tarzı harflendirilir. Yani her sözcüğün ilk harfi büyüktür. (her sozcugun ilk harfi buyuktur. Fiiller ince kullanilir.)
- GetWindowLong(), CreateProcess()
- Degiskenler genellikle onun turunu belirten bir önek ile başlatılır. Degişkenler deve notasyonu ile isimlendirilir. (camel notation)
- BYTE, WORD ve DWORD typedef isimleri sırasiyla 1, 2 ve 4 byte lik işaretsiz tam sayı türlerini temsil eder.
- Typedef isimlerindeki P öneki ve LP öneki gösterici anlamına gelir. (Windows 3.x sistemlerinde farkli anlama gelmektedir.)
- Word kavramı donanım ve yazılımda farklıdırlar. Yazılımda 2 byte, ama donanimda register uzunlugu olarak adlandirilirlar.
- Gösterdigi yer const olan const göstericilerde PC veya LPC öneki kullanılır.
- Yazi türleri (char türden göstericiler) SZ yada LPSZ ile baslatilir.
- PSTR, LPSTR, LPCSTR yazıyı gösteren gösterici anlamındadır.
- BOOL türü başarı ve başarısızlığı anlatan bir türdür. INT olarak typedef edilmistir. ( 0 basarisiz, 0 disi basarisiz)
- fonksiyon tanimlarinda in, in_out, ve __out ifadeleri sirasiyla ver kullanayim, ver icini ben de doldurayim ve ver icicin doldurayim manasinda kullanilir. CreateProcess() fonksiyonunun msdn icerisindeki dokumani icerisinde gorulebilir.
Unicode Kullanımı
- java ve c# da char turu 2 byte tutar. C de ise 1 byte dir.
- typedef unsigned short wchart;
- 32 bi windows sistemlerine gecildiginde unicode kullanimi da devreye girmistir. Butun yazi parametresi alan fonksiyonlardan aslinda 2 tane bulunmektedir. Sonu A ile birenler ASCII sonu W ile bitenler UNICODE anlamina gelmektedir.
- Biz program yazarken genellikle A ve W olmayan isimleri kullaniriz bu isimler duruma gore A ve W lu bicime donusturulurler.
- IDE de bu ayar proje seceneklerinden yapilmaktadir ve default durum UNICODE bicimindedir.
- CreateProcessA (ascii)
- CreateProcessW (unicode)
- C de ascii string “xxxx” biciminde, unicode string L”xxxxx” biciminde yazilir. Eger programimizi ascci ile unicode arasinda istedigimiz zaman cevirebilecegimiz bicimde yazmak istiyorsak. Butun iki tirnaklari TEXT macrosu ile girmelidir
#ifdef UNICODE
#define TEXT() L##S
#else
#define TEXT(,) S
#endif
- Ayrica Standat C fonksiyonlarinin ascii ve unicode versiyonlari vardir. Bunlar arasinda otomatik gecis yapmak icin ozel makrolar kullanilmaktadir. Bu makrolar tchar.h dosyasi icerisinde.
- Aslinda standartlara gore printf fonksiyonunun ascii ismi printf unicode ismi wprintf dir. Windowsta _tprintf der isek bu ide deki ayara gore wprintf veya printf kullanir.
HANDLE Kavramı
- Bir veri yapisina erismekte kullanilan anahtar degerlere handle denir.
- Handle genel olarak bir veri yapisina erismekte kullanilan tekil anahtar degerdir. Handle tipik olarak bir adres formunda bulunabuilir. Bir dizide index belirtiyor olabilir.
- Handle kullanan kisi onun ne anlam ifade ettigini bilmek zorunda degildir.
- Bir handle sisteminde tipik olarak handle sistemini yaratan bir fonksiyon bulunur. Bunlar tipik olarak CreateXxxxx veya OpenXxxx olarak adlandirilir
- Handle sistemini kullanan fonksiyonlar vardir. bunlara biz handle degerini veririz ve giris yaptiririz. Nihayet handle sistemini yok eden fonksiyonalr vardir. Bunlar CloseXxx veya DestroyXxxx olarak adlandirilir.
28 Kasım 2013 Perşembe
Truecrypt Başlangıç Mesajını Değiştirmek
Eğer kurumsal bilgilerinizi korumak amacı ile tüm diskinizi truecrypt ile şifrelediyseniz sistem başladığında truecrypt boot loader aşağıdaki gibi görünmektedir.
işte bu görünen başlangıç mesajını gizlemek için yapılması gereken oldukça basit. Truecrypt içerisinde System > Setting seçeneğide bu mesaj değiştirilebilir. Gelen menüde başlangıç mesajını değiştirebilirsiniz.
işte bu görünen başlangıç mesajını gizlemek için yapılması gereken oldukça basit. Truecrypt içerisinde System > Setting seçeneğide bu mesaj değiştirilebilir. Gelen menüde başlangıç mesajını değiştirebilirsiniz.
Başlangıç mesajı değiştirildikten sonra görünümü aşağıdaki gibi olur.
28 Eylül 2013 Cumartesi
16 Eylül 2013 Pazartesi
9 Eylül 2013 Pazartesi
2 Eylül 2013 Pazartesi
Local Linux Enumeration & Privilege Escalation Cheatsheet
Kernel, Operating System & Device Information:
| Command | Result |
uname -a | Print all available system information |
uname -r | Kernel release |
uname -n | System hostname |
hostname | As above |
uname -m | Linux kernel architecture (32 or 64 bit) |
cat /proc/version | Kernel information |
cat /etc/*-release | Distribution information |
cat /etc/issue | As above |
cat /proc/cpuinfo | CPU information |
df -a | File system information |
Users & Groups:
| Command | Result |
cat /etc/passwd | List all users on the system |
cat /etc/group | List all groups on the system |
cat /etc/shadow | Show user hashes – Privileged command |
grep -v -E "^#" /etc/passwd | awk -F: '$3 == 0 { print $1}' | List all super user accounts |
finger | Users currently logged in |
pinky | As above |
users | As above |
who -a | As above |
w | Who is currently logged in and what they’re doing |
last | Listing of last logged on users |
lastlog | Information on when all users last logged in |
lastlog –u %username% | Information on when the specified user last logged in |
User & Privilege Information:
| Command | Result |
whoami | Current username |
id | Current user information |
cat /etc/sudoers | Who’s allowed to do what as root – Privileged command |
sudo -l | Can the current user perform anything as root |
Environmental Information:
| Command | Result |
env | Display environmental variables |
set | As above |
echo $PATH | Path information |
history | Displays command history of current user |
pwd | Print working directory, i.e. ‘where am I’ |
cat /etc/profile | Display default system variables |
Interesting Files:
| Command | Result |
find / -perm -4000 -type f 2>/dev/null | Find SUID files |
find / -uid 0 -perm -4000 -type f 2>/dev/null | Find SUID files owned by root |
find / -perm -2000 -type f 2>/dev/null | Find files with GUID bit set |
find / -perm -2 -type f 2>/dev/null | Find world-writable files |
find / -perm -2 -type d 2>/dev/null | Find word-writable directories |
find /home –name *.rhosts -print 2>/dev/null | Find rhost config files |
ls -ahlR /root/ | See if you can access other user directories to find interesting files – Privileged command |
cat ~/.bash_history | Show the current users’ command history |
ls -la ~/.*_history | Show the current users’ various history files |
ls -la ~/.ssh/ | Check for interesting ssh files in the current users’ directory |
ls -la /usr/sbin/in.* | Check Configuration of inetd services |
grep -l -i pass /var/log/*.log 2>/dev/null | Check log files for keywords (‘pass’ in this example) and show positive matches |
find /var/log -type f -exec ls -la {} \; 2>/dev/null | List files in specified directory (/var/log) |
find /var/log -name *.log -type f -exec ls -la {} \; 2>/dev/null | List .log files in specified directory (/var/log) |
find /etc/ -maxdepth 1 -name *.conf -type f -exec ls -la {} \; 2>/dev/null | List .conf files in /etc (recursive 1 level) |
ls -la /etc/*.conf | As above |
find / -maxdepth 4 -name *.conf -type f -exec grep -Hn password {} \; 2>/dev/null | Find .conf files (recursive 4 levels) and output line number where the word password is located |
lsof -i -n | List open files (output will depend on account privileges) |
Service Information:
| Command | Result |
ps aux | grep root | View services running as root |
cat /etc/inetd.conf | List services managed by inetd |
cat /etc/xinetd.conf | As above for xinetd |
Jobs/Tasks:
| Command | Result |
crontab -l -u %username% | Display scheduled jobs for the specified user – Privileged command |
ls -la /etc/cron* | Scheduled jobs overview (hourly, daily, monthly etc) |
ls -aRl /etc/cron* | awk '$1 ~ /w.$/' 2>/dev/null | What can ‘others’ write in /etc/cron* directories |
top | List of current tasks |
Networking, Routing & Communications:
| Command | Result |
/sbin/ifconfig -a | List all network interfaces |
cat /etc/network/interfaces | As above |
arp -a | Display ARP communications |
route | Display route information |
cat /etc/resolv.conf | Show configured DNS sever addresses |
netstat -antp | List all TCP sockets and related PIDs (-p Privileged command) |
netstat -anup | List all UDP sockets and related PIDs (-p Privileged command) |
iptables -L | List rules – Privileged command |
cat /etc/services | View port numbers/services mappings |
Programs Installed:
| Command | Result |
dpkg -l | Installed packages (Debian) |
rpm -qa | Installed packages (Red Hat) |
sudo -V | Sudo version – does an exploit exist? |
httpd -v | Apache version |
apache2 -v | As above |
apache2ctl (or apachectl) -M | List loaded Apache modules |
mysql --version | Installed MYSQL version details |
perl -v | Installed Perl version details |
java -version | Installed Java version details |
python --version | Installed Python version details |
ruby -v | Installed Ruby version details |
find / -name %program_name% 2>/dev/null (i.e. nc, netcat, wget, nmap etc) | Locate ‘useful’ programs (netcat, wget etc) |
which %program_name% (i.e. nc, netcat, wget, nmap etc) | As above |
Common Shell Escape Sequences:
| Command | Program(s) |
:!bash | vi, vim |
:set shell=/bin/bash:shell | vi, vim |
!bash | man, more, less |
find / -exec /usr/bin/awk 'BEGIN {system("/bin/bash")}' \; | find |
awk 'BEGIN {system("/bin/bash")}' | awk |
--interactive | nmap |
perl -e 'exec "/bin/bash";' | Perl |
Source : http://www.rebootuser.com/?p=1623
31 Ağustos 2013 Cumartesi
Linux Sistemlerde Bellek Taşması Koruma Mekanizmaları
Linux sistemler içerisinde bellek taşması hatalarını önlemek için birçok mekanizma bulunmaktadır. Bu koruma mekanizmalarından bazıları çekirdek seviyesinde çalışmakta, bazıları ise derleyici tarafından oluşturulan koruma mekanizmalarıdır. Bu yazıda Linux sistemler üzerinde bulunan bellek taşması (Buffer Overflow), oluşturan zararlı kodlara (exploit) karşı hazırlanan önleme mekanizmalarının bazılarına değinilecektir.
ASLR (Address Space Randomization)
Çalıştırılabilir dosyaların, her çalışma esnasında sanal adres alanında oluşturulan adres değerlerinin rasgele olarak belirlendiği bir mekanizmadır. Bu yapı, saldırganların uygulamanın sanal adres alanındaki yerlerini tespit edebilmesini ve zararlı kod çalıştırmasını oldukça güçleştirmektedir.
ASLR çalışma mekanizmasını bir örnek bir kod parçacığı üzerinde inceleyelim.
Bu kod parçacığında görüldüğü gibi "buffer" değişkeninin bulunduğu adres bilgisi ekranda gösterilir. Bu uygulama her çalıştırıldığında bu adres bilgisinin farklı olduğu görülmektedir.
Ancak sistem üzerinde ASLR koruması pasif hale getirilirse, kod içerisinde görmüş olduğumuz "buffer" değişkenine ait adres bilgisinin bir önceki örnekteki gibi değişmediği görülecektir. Linux sistemlerde ASLR korumasını pasif hale getirmek için /proc/sys/kernel/randomize_va_space içerisindeki değerin 0 olması gerekmektedir.
Örnek programı tekrar çalıştırıldığında uygulama çıktısı aşağıdaki gibi görülmektedir.
Görüldüğü üzere ASLR koruma mekanizması kapatıldığı zaman, uygulama her çalıştırıldığında, içinde bulunan değişkenin sanal adres alanı içerisindeki adresi değişmemektedir. Bu ASLR koruma mekanizmasının aktif halde tutulması önerilmektedir.
Executable Stack Protection
Executable Stack Protection, bellek taşması saldırılarına karşı derleyici tarafında gerçekleştirilen bir koruma mekanizmasıdır. Bu koruma metodunda uygulama derlenirken, stack üzerinde herhangi bir kod çalıştırmaması için işaretlenir. Uygulamanın stack yapısında kod çalıştırma korumasının olup olmadığını anlamak için çalıştırılabilir dosyanın içeriği incelenmelidir. Bunun için "readelf" komutu bize yardımcı olacaktır.
Readelf komut çıktısı incelendiğinde GNU_STACK değeri aşağıdaki gibi elde edilmiştir. Bu değere göre bu uygulamanın stack yapısında okuma ve yazma yapılabilir ancak çalıştırma yapılamaz durumda olduğu görülmektedir.
GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RW 0x4
GCC derleyicisi derleme esnasında varsayılan olarak çalıştırma yetkisi vermez. Bu nedenle uygulamaya ait stack içerisinde kod çalıştırma yetkisinin aktif hale getirilmesi için, "-z execstack" parametresinin kullanılması gerekmektedir.
root@bt:~$ gcc -ggdb -m32 -z execstack ornek.c -o ornek
Bu parametre aktif hale getirildikten sonra readelf komutu çıktısı incelendiğinde, stack yapısında kod çalıştırmaya izin verildiği görülmektedir.
GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RWE 0x4
Stack Smashing Protector
“GCC Stack Smashing Protector” bellek taşması saldırılarına karşı koruma sağlayan bir mekanizmadır. Eğer bir bellek tasma saldırısı gerçekleşir ise bunu kullanıcıya anında belirtir. Çalışma yöntemi olarak, stack frame yapısı içerisine “canary” değeri eklenir ve bu değer herhangi bir şekilde değişir ise bu bellek taşması veya bozulması olarak algılanır. Bu özellik bellek tasması zafiyetlerinin yanında stack üzerinde oluşan programlamadan kaynaklanan hataların oluşmasını da engeller. “Stack-Smashing Protector” yapısı StackGuard koruma mekanizmasının genişletilmiş halidir.
Bu stack koruma mekanizmasını aktif hale getirmek için derleme sırasında gerekli olan bayrakların eklenmesi gerekmektedir. Örneğin, eğer string koruması eklenmek isteniyor ise -fstack-protector, tüm türlerdeki korumaların aktif hale getirilmesi isteniyor ise -fstack-protector-all bayrağının eklenmesi gerekmektedir. OpenBSD gibi bazı sistemlerde bu stack koruma bayrakları varsayılan olarak her derlemede kullanılmaktadır. Eğer derleme işleminde stack korumasının iptal edilmesi isteniyor ise o zaman derleme esnasında -fno-stack-protector bayrağının parametre olarak eklenmesi gerekmektedir.
Yazının başında gösterilen örnek uygulama içerinde ayrılmış bellek alanından fazla bir girdiyi stack koruması eklenmiş durumu ve stack koruması eklenmemiş durumu ile bellek taşması gerçekleştirilmeye çalışılacaktır.
Görüldüğü üzere uygulamayı derlerken stack koruması eklenmez ise, uygulama çalıştırıldığında “segmentation fault” hatası alınır. Burada uygulamaya argüman olarak göderilen “A” karakteri ile stack yapısı içerisinde ayrılmış alandan fazlasına yazmaya çalışıldı. Eğer girdiğimiz değerler içerisinde fonksiyonun stack yapısı içerisindeki geri dönüş adresi içine anlamlı bir değer girilir ise uygulama kapanmadan farklı bir yöne doğru yönlendirilebilir. Sonrasında -fstack-protection parametresi ile uygulamayı derledikten sonra çalıştırıldığında stack üzerindeki belek taşmasının tespit edildiği görülmektedir.
Fortify Source
GCC içerisinde bellek taşmalarını tanıyan ve zafiyete uğratılmadan önce önleyen “FORTIFY_SOURCE” isminde bir özellik bulunmaktadır. Bu yapı ile derleyici derleme sırasında boyutlarını tanımlayabildiği bellek alanları için bir koruma yapısı ekler. Bu bellek alanlarına örnek olarak stack üzerinde oluşturulmuş sabit boyutlu bellek(buffer) alanları veya malloc() gibi fonksiyonlar ile heap üzerinde oluşturulmuş alanlar örnek olarak gösterilebilir.
Yazının başında gösterilen uygulama C kodunu incelenecek olursa, buffer değişkeninin boyutu 10 byte olarak belirlenmiş olduğu görülür. Bu uygulama kodunu GCC’nin FORTIFY_SOURCE özelliği aktif edilerek derlenir ise, burada GCC strcpy() fonksiyonunu çağırırken aynı zamanda kopyalanan verinin uzunluğunu kontrol eder. Değişkenin boyutu belirlendikten sonra 10 byte'tan fazla veri buffer değişkeninin içerine kopyalanmaz. Eğer 10 byte'tan fazla bir veri gönderilir ise programdan çıkılır. Eğer derleme sırasında bu buffer değişkeninde bellek taşması ihtimali görülür ise GCC tarafından uyarı mesajı verilmektedir.
Kendi yazdığınız uygulamalarda FORTIFY_SOURCE özelliğini aktif etmek için GCC ile derleme sırasında –D_FORTIFY_SOURCE=2 argümanı ile derlenebilir. Derleme işlemi gerçekleştirildikten sonra objdump uygulaması ile yazdığımız uygulama içerisindeki kontrol mekanizması aşağıdaki komut çıktısı ile görülebilir.
Bu komutun çıktısında herhangi bir değer görülür ise FORTIFY_SOURCE yapısının aktif olduğu söylenebilir. Eğer bir sonuç alamazsak FORTIFY_SOURCE yapısı aktif edilmemiş veya bu uygulama içerisinde risk oluşturabilecek bir kod parçacığı bulunamadığı için uygulanmamış demektir.
30 Ağustos 2013 Cuma
OpenCV ile Webcam Kullanimi
Bu yazimizda OpenCV ile basit anlamda bir webcam kullanimi ile ilgili ornek kodlar verecegiz
Webcam kullanarak fotograf cekmek, Webcam kullanarak anlik goruntu aktarimi,
Webcam kullanarak fotograf cekmek, Webcam kullanarak anlik goruntu aktarimi,
29 Ağustos 2013 Perşembe
13 Haziran 2013 Perşembe
13 Nisan 2013 Cumartesi
26 Mart 2013 Salı
26 Şubat 2013 Salı
Seslisozluk Script
Bu yazımızda seslisozluk (http://m.seslisozluk.com) adresini kullanarak browser kullanmadan bilmediğimiz kelimeleri getiren bir betik yazacağım. yazdığımız betik bittikten sonra aşağıdaki gibi bir bir çıktı elde etmiş olacağız.
Oncelikle gerekli olan kutuphaneler/paketler eklenir.
Seslisozluk icerisinde bir arama yaptigimiz zaman, eger tek kelimelik bir arama yapiyor isek http://m.seslisozluk.com/?word= gibi bir url adresine yonlendiriliyoruz. Ancak bir kelime obegini aramak istiyorsak portal bizi http://m.seslisozluk.com/?word=+ gibi bir url ye yonlendirir.
Bu amacla scriptimizi yazarken arayacagimiz kelime yada kelime obegini bu url yapisina gore duzenlememiz lazim. Arama icin kullanacagimiz kelime obegini olusturduktan sonra url'i olusturmamiz grekiyor. url olusturulduktn sonra aragidaki kod parcacigi ile url'i aliriz. indirdigmiz html formattaki veri icerisinden html tag taglari arasindaki veriyi cekip alacagiz. Ancak istedigimiz veriyi bir sekilde alsak da yine de bazi html kodlari veri icerisine karismis olabiliyor. Bu nedenle elde ettigimiz veriyi html taglerinden arindirmamiz gerekiyor. istedigimiz veriyi asagidaki sekilde suzuyoruz. kodun tamamini asagida gorebiliriz.
Oncelikle gerekli olan kutuphaneler/paketler eklenir.
Seslisozluk icerisinde bir arama yaptigimiz zaman, eger tek kelimelik bir arama yapiyor isek http://m.seslisozluk.com/?word=
Bu amacla scriptimizi yazarken arayacagimiz kelime yada kelime obegini bu url yapisina gore duzenlememiz lazim. Arama icin kullanacagimiz kelime obegini olusturduktan sonra url'i olusturmamiz grekiyor. url olusturulduktn sonra aragidaki kod parcacigi ile url'i aliriz. indirdigmiz html formattaki veri icerisinden html tag taglari arasindaki veriyi cekip alacagiz. Ancak istedigimiz veriyi bir sekilde alsak da yine de bazi html kodlari veri icerisine karismis olabiliyor. Bu nedenle elde ettigimiz veriyi html taglerinden arindirmamiz gerekiyor. istedigimiz veriyi asagidaki sekilde suzuyoruz. kodun tamamini asagida gorebiliriz.
21 Şubat 2013 Perşembe
18 Ocak 2013 Cuma
Python ile Service Banner bilgisini ogrenme
12 Ocak 2013 Cumartesi
21 Aralık 2012 Cuma
Bir web sayfasinin PDF formatinda kaydedilmesi
Web sayfalarinin PDF formatinda kaydedilebilmesi icin kullandigimiz uygulamanin ismi wkhtmltopdf. Bu uygulamayi ubuntu tarafinda paket depolari uzerinden kurabilirsiniz.
root@ubuntu:~# apt-get install wkhtmltopdf
Bu uygulama kurulum sirasinda oldukca fazla kutuphaneye ihtiyac duymakta. Ozellikle Qt kutuphanelerin bunlarin basinda gelmektedir. Kaynak koddan kurulum yapmak istiyorsaniz http://code.google.com/p/wkhtmltopdf/wiki/compilation adresinden yardim alabilirsiniz.
Uygulamanin kullanimi oldukca kolay,
Seklinde ornek olarak kullanilailir. Elde etmis oldugumu dokuman asagidaki sekildedir.
Kaydol:
Yorumlar (Atom)













