Markafoni XSS Açığı

markafoni.com ‘ daki XSS açığı şu şekildeydi:

Anasayfadaki arama barında javascript kodunuzu çalıştırabiliyordunuz.( script type=”text/javahedehodoad” ile başlarsanız değil tabii ki.)

markafoni-guvenlik-acigi2

destek@markafoni.com’ a XSS açığı bulduğuma geri dönüş sağladığınız takdirde anlatacağımı söyledim. Güvenlik ve Kalite ekibinin takım lideri aradı ve açığın ne olduğunu anlattım. Geri dönüş yapıp bu açığı ileri taşıdık ve bu büyük bir açık lütfen gizlilik çerçevesinde tutalım deyip yönetime sunacağını bildirdi.

Sonuç olarak; açığı yaklaşık 3 saat sonra kapadılar ve sadece teşekkür ettiler.

Edit : 250 TL Markafoni.com’ da kullanmak uzere cek hediye ettiler. Bu çekle de yaklaşık 650 liralık alışveriş yaptım, aldığım ürünlerin birçoğu da olmadı zira, geri iade etsem bana 650 liralık ödeme yapacaklarına adım gibi emindim fakat uğraşmak istemedim.

Ardunio ve LM35DZ ile sıcaklık ölçümü

Uzun zamandır yazmayı planladığım ve bir türlü yazamadığım Ardunio ile Sıcaklık Ölçer yazısını yazmak bugüne nasip oldu :)

Bundan yaklaşık 1,5 yıl öncesinde projesini geliştirdiğimiz bir devlet kurumunun ihalesinde geliştirilen sistemin bulunduğu odanın sıcaklığını bildiren bir cihaz verilmelidir diye ihale şartnamesinde madde vardı.

Türkiye’den hızlıca tedarik etmem gerekiyordu bu cihazı. Araştırmalarım sonucunda en ideal cihaz şu olmuştu.(Araştırmak için çok vaktim olmadı ama 2 saatlik araştırma sonucundaki seçenekler arasındaki en ideali diyebiliriz)

ardunio4

Fiyatı 227€. Sıcaklık ölçmek için hiç uygun görünmeyen bir design. Sensör kapalı bir kutunun içinde. Sensör kapalı kutunun içinde olduğu zaman, sıcaklık ölçmede sapmalar olacağı kanaatindeyim. Ve cihaz SMTP dahi desteklemiyor.

Hiç içime sinmemesine rağmen, ihalenin kabul alması için SMTP desteklemeyen, sensörü kapalı kutuda olan ve 227€ gibi bir fiyatı olan cihazı satın almak durumunda kaldık.

Bu cihazdan, 10-20 $ arasında değişen herhangi bir Ardunio boardı ve tanesi 1-2$ olan “birkaç” sıcaklık sensörü ile yapalım dedik.

Birkaç sıcaklık sensörü çünkü, her sensörün kalibrasyonu aynı olmayabilir. En az 2 sensör koyup bu sensörler arasındaki sıcaklıklar arasında çok büyük sapma yoksa sıcaklığın o değer olduğundan emin olabiliriz.

Ya da sensörün 1′i bozulduğu anda, diğer sensörden ölçüm yapmaya devam edebilmeliyiz diye düşündük.

20160527_165110

Devremizi bu şekilde 2 sensör olacak şekilde tasarladım.

Boarda upload ettiğim kod şudur :

int ledPin = 13; // select the pin for the LED
int sensorValue0=0, sensorValue1=0, sensorValue2=0, sensorValue3=0, sensorValue4=0, sensorValue5=0;
int incomingByte;

void setup() {
// declare pin 9 to be an output:
pinMode(9, OUTPUT);
// declare the ledPin as an OUTPUT:
pinMode(ledPin, OUTPUT);
// To increase the resolution of 10bit ADC when measuring temperature sensors
// We decrease the reference voltage to internal of Arduino, which is around 1.1V
analogReference(INTERNAL);
Serial.begin(9600);
// Serial.println(“Arduino serial port monitor v0.1 READY”);
// Serial.println(“Click on h to dump Help”);
}

void loop() {
// read the value from the sensor:
sensorValue0 = analogRead(A0);
sensorValue1 = analogRead(A1);
sensorValue2 = analogRead(A2);
sensorValue3 = analogRead(A3);
sensorValue4 = analogRead(A4);
sensorValue5 = analogRead(A5);

incomingByte = Serial.read();
delay(10);

if(incomingByte == 00) Serial.println(“Lütfen bir komut gönderin “);
if(incomingByte == 48) Serial.println(sensorValue0/9.31);
if(incomingByte == 49) Serial.println(sensorValue1/9.31);
if(incomingByte == 50) Serial.println(sensorValue2/9.31);
if(incomingByte == 51) Serial.println(sensorValue3/9.31);
if(incomingByte == 52) Serial.println(sensorValue4/9.31);
if(incomingByte == 53) Serial.println(sensorValue5/9.31);

if(incomingByte == 104) {
Serial.println(“Type 0 – 5 to read analog input values in 10bit text”);
}
}

Ardunio’nun Serial port monitorunden 0 ile 5 arasında herhangi bir input girdiğinizde, size o inputtan gelen değeri dönecektir.

Bunun için de WPF ile küçük bir monitoring toolu yazdım:

Onun da ekran görüntüsü şu şekilde
ardunio2ardunio1

2′nolu sensörden ölçmek istediğinizde ya da 5′den ölçmek istediğinizde seçebiliyorsunuz.

1′den fazla sensör seçili ise, sensörler arasındaki uyuşmazlıklar da kontrol edilebilir ve sapmanın az olduğu değeri dönecektir.

Ve belli bir sıcaklığın üstüne çıktığında mail atacaktır. Ya da bir buzzer bağlayıp onun ötmesini de sağlayabilirdik.

ardunio3

Install ZPanel on CentOS

Bu yazımda, Linux üzerinde DNS management vs. gibi işleri kolaylaştırması açısından ZPanel kurulumunu kısaca anlatacağım.Kernelım CentOS 6.6, ZPanel 6.x ‘e kadar desteklemektedir.Onun için Centos 7 sürümüne sahipseniz kurulumda hata vercektir.

wget paketiyle ZPanel’i download ediyoruz.

wget https://raw.github.com/zpanel/installers/master/install/CentOS-6_4/10_1_1.sh

Sonra download ettiğimiz dosyayı yetkilerinde değişiklik yapıyoruz ;

chmod +x 10_1_1.sh

Daha sonra bu servisi çalıştırmamız gerekli

./10_1_1.sh

Eğer dosyayı herhangi bir dizine download ettiyseniz, ki öyle ettiniz şu hatayı alcaksınız:

“ZPanel has not been detected on this server, the upgrade script can therefore not continue!”

Hatayı okuduğumuzda zpanel’e dair bir şey bulamadığını söylüyor.Oysa ki bunu download etmiştik.Gidip servisin source code’unu bulup bu hata mesajının olduğu satırı buldum.(OpenSource’un harika nimetleri)

if [ ! -d /etc/zpanel ]; then
echo “ZPanel has not been detected on this server, the upgrade script can therefore not continue!”
exit 1;

Kod bloğu bize zpanel’in altında olması gerektiğini söylüyordu.Zpanel’imizin altında çalıştırırsak bu hatayı almamış olcaz.

cd /etc
mkdir zpanel
cd zpanel
wget https://raw.github.com/zpanel/installers/master/install/CentOS-6_4/10_1_1.sh
chmod +x 10_1_1.sh
./10_1_1.sh dediğimiz zaman yaklaşık 1 dakikalık bir kurulum süresinden sonra IP adresini girdiğimizde ZPanel bizi karşılayacaktır.

İyi çalışmalar dilerim

RAID Türleri

Veri günümüzün en önemli unsurlarından biridir.Verinin güvenliğinin önemi kadar , storagelara yazılma hızı da bi’ o kadar önemlidir.Bunun için diskleri konfigüre ettiğimiz RAID yapıları bulunmaktadır.

İlk olarak RAID nedir diyecek olursak ; RAID (Redundant Array of Independent Disks) çok sayıda bağımsız harddiskin büyük bir mantıksal dizi oluşturmak üzere bir araya getirilmesine verilen addır.

RAID dizilerinin başlıca amacı veri kullanılabilirliğini, hızını ve güvenliği artırmaktır.

Raid 0(Striping)

  • Raid 0 sadece performans için üretilmiş teknolojidir.
  • En az 2 disk ile oluşturulur. Raid kart üzerine gelen tüm datalar disk sayısına bölünerek aynı anda hepsine birden yazılır.2 hdd diskiniz varsa tek disk gibi görünmektedir.
  • Örnek olarak elimizde 15.000 rpm bir disk varsa bu diske sadece 15.000 rpm hızı ile yazabilirken 3 adet aynı diskten varsa 45.000 rpm hızında kullanma olanağımız mevcut olur.
  • Veri yazma işlemi de şu şekilde oluyor.. Örneğin s-e-r-h-a-t kelimesini diske yazacaksınız.. 1. diskinize “s-r-a” harfleri; 2.diskinize de “e-h-t” harfleri yazılıyor.. Haliyle okuma esnasında da, teorik olarak her harfin 1 saniye de hdd’den okunduğunu düşünürsek 6 saniyede alınacak veri; 3 saniye içerisinde kotarılmış oluyor 2 harddisk sayesinde..
  • Güvenliği en alt seviyededir.
  • Disklerden biri göçerse tüm veriyi kaybetmiş oluruz.Harddisklerinizden birisinde bir hata meydana gelirse (örneğin 2.disk bozulursa); 1. diskinizde yer alan “s-r-a” harfleri tek başına bir anlam ifade etmeyeceğinden bilgilerinize sonsuza kadar elveda diyebilirsiniz.
  • Kapasiteye bakacak olursak disk sayısının toplamı kadar kapasite elde edilir.

Raid 1(Mirroring)

  • Raid 1’de yapı çok farklıdır.
  • Yine en az 2 disk ile oluşturulan bu yapıda Raid kartına gelen tüm data iki diskede aynı şekilde yazılır. Bu işleme Mirroring’te denilir.
  • Bir disk göçtüğünde diğer disk problem olmamış gibi işlemlere devam eder. Kapasite anlamında da tekdisk kapasitesi elde edilir.

Raid 0+1

  • İşte Raid teknolojisinde performans anlamında en üst seviyede bulunan Raid yapısı budur.
  • Disk sayısı ne kadar fazla ise performans o derecede artar.
  • En az 4 disk ile oluşturulabilir.
  • 2 adet Raid 0 yapısını Raid 1 altında toplayarak yapılan bu yapı gelen tüm dataları parçalayıp tüm disklere dağıtarak okuma yazma yaptığından performans olarak hiçbir yapı performans anlamında bu yapının yanına yaklaşamaz.

Raid 5

  • Hızın ve güvenliğin buluştuğu ortak noktadır,
  • Raid 5 ; sunucu üzerinde varolan birden fazla harddiske aynı verilerin kopyalanmasıdır. Örnek verecek olursak, A kullanıcısının yaptığı her işlem 1 – 2 – 3 – 4  Numaralı harddisklere aynı anda kaydedilir.
  • Eğer daha önce vps kullandıysanız VPS hizmetlerinde harddisk arızalarının sık sık yaşandığını görmüş olmalısınız.
  • Raid 5 yapısıyla birlikte tüm verileriniz aynı anda birden fazla harddisk üzerine kayıt edilir.
  • Harddisklerden birinin arızalanması durumunda aldığınız hizmet sorunsuz şekilde işlemeye devam eder ve verileriniz güvenle korunur.
  • RAID 5 sistemindeki herhangi bir diskin arızalanması durumunda sistemin çalılşmaya devam etmesi, arızalı diskin sistem kapanmadan değiştirilmesi ve RAID 5 yapının tekrar oluşturulmasını sağlamaktadır.
  • Burada tek bir disk güvenlik için kullanılmaktadır.
  • Toplam kapasite bir eksik olacaktır.

Raid 6

  • Raid 5 ile aynı mantıkta çalışır amaç performans vegüvenliktir, ancak sistemin çalışması için en az 4 disk gerekir,
  • 4 tane 2tb’lık disk kullanıldığında veri yazılabilecek alan 4tb’dır
  • Disklerden bir yada iki tanesine zarar gördüğünde kalan 2 disk çalışmaya devam eder ve veri kaybı yaşanmaz

Matador’un Gözyaşı

Beni etkilediği için paylaşmak istedim ;

Fotoğraftaki matador, Alvaro Monera, kariyerine son verdi. Yarışın son mücadelesinde gücünü yitiren Monera yıkılır. Boğanın ona yaklaştığını görünce korkulu sonun yaklaştığını hisseder. Lakin BOĞA ona hiçbir şey yapmadı. Yarıştan sonra matador açıklamasında şöyle diyor:
“Boğa gözümün içine bakarak bağırdı, böyle sadece bağırdı. Her hayvanda olduğu gibi onun da gözlerinde masumiyet vardı. Yüreğimde adaletin hıçkırarak ağladığını işittim. Belki de bağışlanırdım lakin, itiraf edemedim. Kendimi dünyanın en vahşi mahluğu gibi hissediyordum.”
boğa
Bundan sonra Alvaro Munera, hayvan zulmüne karşı bir aktivist oldu.

Audio clip: Adobe Flash Player (version 9 or above) is required to play this audio clip. Download the latest version here. You also need to have JavaScript enabled in your browser.

DJANGO – 1

İlk olarak sistemimize django’yu kuruyoruz.Tabi , önce python kurulumu gerekiyor.

Djangonun kurulumunu yaptıktan sonra,kurulduğunu kontrol etmek için python ile şu komutları çalıştırıyoruz.

import django

django.VERSION

(1, 4, 1, ‘final’, 0) bu şekilde bi’ şey dönüyorsa django kurulmuş demektir.

Gelelim django ile proje oluşturmaya.

django’nun kuruldu dizine gidip orda admin.py startproject komutunu oluşturmak.

Şöyle ki; windows kullanıcıları cd ile dizine girip , orada ;

python admin.py startproject projeadi

şeklinde projeyi oluşturabilirler.

Pardus’ta ;

python /usr/lib/python2.5/site-packages/django/bin/django-admin.py startproject projeadi şeklinde.

Proje oluştuğunda bizim karşımızda şu yapının gelmesi lazım ;

`– proje
|– __init__.py
|– manage.py
|– settings.py
`– urls.py

__init__.py => Bu dosya python tarafından kullanılır ve python’un “yeni” projesini paket olarak görmesini sağlar. Boş bir dosyadır ve değiştirmeniz gerekmez.

manage.py => Bu dosya python ile kullanabileceğimiz bir araçtır. Örneğin geliştirme sunucusunu çalıştırmak için “python manage.py runserver” komutunu kullanırız. “python manage.py –help” komutu ile bu dosya aracılığıyla yapabileceğiniz opsiyonlar listelenir.

settings.py => Projemiz ile ilgili ayarları yaptığımız dosya. Bu dosya içerisinde veri tabanı, yönetim paneli adresi gibi ayarları yapıyoruz.

urls.py => Bu dosya içerisinde projemizin URL adreslerini belirliyoruz

Şimdi bunlara ek olarak default olarak oluşmayan bir dosya oluşturmamız gerekiyor.

views.py

bunu da o yapının içerinde manual olarak oluşturuyoruz.

Sonra projemiz başlangıç olarak Hello World projesi olsun.

views.py’nin içerisine ;

#!/usr/bin/python
# -*- coding: utf-8 -*-

from django.http import HttpResponse
def merhaba(request):
    return HttpResponse(“DJANGO Selam olsun”)

 

İşimiz burada bitmiyor urls.py nin içersine de ;

from django.conf.urls import patterns, include, url
from django.conf.urls.defaults import *
from yenii.views import merhaba

urlpatterns = patterns(”,(‘^merhaba/$’,merhaba),)

yazıyoruz.

Bu uygulamayı görmek için dizinin içerisine gidip python ile

manage.py runserver yazarak çalıştırıyoruz.

Adres çubuğuna da localhost:8000/merhaba yazıyoruz.çünkü merhaba diye isim verdik urls.py nin içerisinde başka bi isim verseydik onu yazcaktık.

 

 

 

 

Python ile LOG Dosyaları

Python ‘ da logging i kullanmak için ilk önce logging librarysini import edip sonra  getLogger metoduyla Logları tutcak yeni bir register açmak olcak. Şöyle kipythonshell1

Daha sonra bu kaydeden dosyamızın ne seviyede log yapacağını belirleyip, buna bir tane handler eklemek olcak.

Handler dosyayı .log dosyası şeklinde kaydetmemizi sağlamak için.

Ancak daha fazla handler ekleyebiliriz.

Mesela ben StreamHandler ekledim.

Bu handler ise dosyayı ekrana basmaya yarar.

Python’da ek olarak NullHandler,WatchedFileHandler,RotatingFileHandler,SysLogHandler vs. gibi Handler’lar da mevcut.

daha sonra biz kayıtları istedigimiz şekilde tutabiliriz.

Python ile log_format ımızı belirliyoruz.

Parse etmek istersek bu formatı kendi parse işlemimize göre de rahatça değiştirebiliriz.

daha sonra oluşturduğumuz Handlerları registera atıyoruz.

daha sonra istediğimiz gibi log tutabiliyoruz.

pythonshell2