Wednesday, July 27, 2011

Return-Oriented Programming / DEP Bypass

Giriş
Öncelikle şunu belirtmekte fayda var bu makale Türkiye güvenlik & hacking topluluğuna destek amaçlı teknik konularda bilgi ve beceri kazandırabilme adına yazılmıştır. Makalede eksik ya da yanlış gördüğünüz kısımları lütfen yorum olarak/e-mail ile bana ulaştırınız gerekli düzenlemeleri hep birlikte yapalım. Ayrıca şunuda belirtmek lazım şuan için bu makalede sadece Windows üzerinde DEP korumasının ROP tekniği ile aşılması ele alınmıştır, başka işletim sistemleri içinde ilerleyen süreçte yazabilirim -vakit olursa- umarım.

"Neden ROP tekniğine ihtiyaç duyuyoruz?" sorusuna cevap olarak DEP diyebiliriz. DEP, Windows sistemlerde Stack'in NX (No eXecute) yani üzerinde kod çalıştırılamaz hale getirilmesini sağlayan bir korunma yöntemidir (Açılımı "Data Execution Prevention"). ROP ise Windows'un DEP korumasını aşmak ve NX Stack üzerinde kod çalıştırabilmek için kullanılan bir tekniktir.

Daha önce exploiting ile uğraşmış olanlar bilirler, ret2lib tekniğini. ROP tekniğide işte tam bu tekniğin yaptığını peşpeşe birçok adrese "return" olarak yapıyor ve bir şekilde stack'i üzerinde kod çalıştırılabilir hale getiriyor ya da Memory'de RWX bir alana Shellcode'unuzu yazmanızı ve çalıştırmanızı sağlıyor (DEP Bypass için birçok yöntem mevcut..). Yani genel amaç mevcut olan kodları register'lardaki değerleri değiştirmek, kullanacağınız API'nin parametrelerini ayarlamak v.b için tekrar kullanmaktır. Mevcut olan kodlardan kastımız ise gadget'lar olarak geçen kod parçaları. Tanım kolay gözüksede birazdan makalenin uygulama kısmında mevcut kodlar ile kod yazmanın zorluklarını çekeceğiz o yüzden rahatlamayın :)

Monday, July 18, 2011

ELF File Format Parsing

In this post i will explain how to parse 32 bit ELF File Format for finding offsets of segments. Firstly we need to lookup ELF Header (First 52 bytes) for taking offsets of Program Headers Table, EntryPoint Addr, Section Headers Tables etc..

If we take an DWORD value from 24th offset of ELF Header we can grab EntryPoint of executable file. DWORD value at 32th offset is start offset of Section Headers Table and size of this headers table is located at 46th offset as a WORD value. We also need number of section headers that located at 48th offset as a WORD value. Also Section Header String Table Index is located at 50th offset as a WORD value. So we can say ELF Header structure is like this;

Wednesday, June 29, 2011

[Etkinlik] Web Tehditlerine Karsı Hazırlıklı Olun



28 Haziran 2011 tarihinde HP Yazılım – İnovasyon Merkezi’nde gerçekleşmiş olan “Web Tehditlerine Karşı Hazırlıklı Olun” isimli seminere ait sunum ve fotoğraflar aşağıdadır. Katılan herkese teşekkürler umarım faydalı geçmiştir :)

Sunum Dosyası (PDF):
http://www.adeosecurity.com/sunum/HP-AppSec-Presentation.pdf

Fotoğraflar :
http://www.adeosecurity.com/sunum/hp-sunum-resimler.zip

(Yedek) Sunum Dosyası (PDF):
https://rapidshare.com/files/2951370146/HP-AppSec-Presentation.pdf

Thursday, June 16, 2011

[gdb tips] printing SSE2 registers

Hi!
I started [gdb tips] title for sharing useful gdb tips & tricks. First tip is printing SSE2 registers. You can use print/x for accessing SSE2 registers context.

Example;

Neden normal arkadaslarim yok :>

Bende normal arkadaşlar istiyorum!!!1 Ali en normallerinden birisi :p

for english reader; My friend Ali's Wireless Bazooka

Wednesday, June 15, 2011

IstSec '11 Sunumları

Selamlar,
Biraz geç oldu ama sonunda sunumları blog'a girme zahmetinde bulundum :> IstSec 11 güzel geçti (en azından bizim oturum). Son dakika değişiklikleri olmuş bizim salon değişmiş vs.. haberimiz yoktu süpriz oldu bizede :] Yasin SÜRER ile güzel bir deneyim oldu. Konumuz Yeni Nesil Zararlı Kodlardı. Java tabanlı dropper'lardan, Sosyal ağları hedef alan JavaScript worm'lerinden ve geleneksel binary tabanlı zararlı kodların analizinden bahsettik, salonun doluluk oranı tatmin etti bizi, en azından bizi mutlu eden bu tip spesifik konulara bile olan ilgiydi. Daha güzel projelerle yine sahnelerde not alabiliriz bunuda bir spoiler olarak bildireyim buradan. Beklemede kalın ;)

Canberk BOLAT ve Yasin SÜRER - New Generation Malwares & Analysis sunumunu indirmek için tıklayın.

Sunday, May 22, 2011

IstSec '11

Selamlar,
IstSec '11 3-4 Haziran 2011 tarihlerinde Istanbul Bilgi Universitesi Dolapdere kampüsünde olacak. Bizde çalışma arkadaşım (aynı zamanda kardeşim diyebildiğim insanlardan birisi..) Yasin ile Yeni Nesil Zararlı Kodlar ve Analizi adında bir sunum yapacağız, bittiğinde sunumun PDF versiyonunuda buradan yayınlayacağım.

Ayrıca ADEO Security Labs çatısı altında bizleri toplayan ve Türkiye'de ki tabulaşmış güvenlik anlayışının dışında çalışmalarımızı destekleyen sevgili Halil Abi'de Advanced Windows Registry Forensics adında bir sunum yapacak.

Oraya gelecek arkadaşlarla görüşmek üzere ;)

Thursday, May 12, 2011

PE Browser

İlgili dökümanda* bahsettiğimiz PE-Browser sadece o anlık bir çözümdü, biraz daha geliştirip konsol gibi bir çözüm düşünüyoruz, yakinda başlarım onada :>


[*] http://www.adeosecurity.com/guvenlik/dump-exe-with-c-ruby/

Wednesday, April 20, 2011

SQL Injection Üzerinden LFI


SQL Injection üzerinden LFI bug’ları yakalamak her zaman karşılaşılabilecek bir durum olmasa bile karşılaşıldığı zaman çok kullanışlı olabilen bir zafiyet türü. Söz konusu zafiyet, uygulamanın DBMS’te yaptığı sorgu sonucunda dönen kolonlara ait verileri include, require, include_once, require_once gibi fonksiyonlara parametre olarak verdiğinde ortaya çıkmakta.Eğer şanslıysanız, aşağıdaki gibi PHP’nin vereceği hata mesajlarından böyle eğlenceli bir bug’ı yakaladığınızı tespite debilirsiniz.

Tuesday, April 12, 2011

Thursday, February 24, 2011

is_lower() and is_upper()

In this post i will share my functions is_lower and is_upper. I coded them for determinening is string lower case or upper case. Idea is simple. Get each char with substring, after that convert it to ascii (with ord function) and in condition clause look for its range (97-122 lower case chars and 65-90 upper case chars). Here is functions..

is_lower:
function is_lower($string) {
for ($i = 0; $i < strlen($string); $i++) {
$ch = ord(substr($string, $i, 1));
if (!(($ch > 96) && ($ch < 123))) {
return false;
}
}

return true;
}

is_upper:
function is_upper($string) {
for ($i = 0; $i < strlen($string); $i++) {
$ch = ord(substr($string, $i, 1));
if (!(($ch > 64) && $ch < 91)) {
return false;
}
}

return true;
}

Thursday, February 17, 2011

do you think are you secure?

Cok komik bir resim, internette daha önceden de dolaşıyordu bugun tekrar rastladım paylasayim dedim. Gercekten kilidin orada olmasi guvende hissi veriyor mu insana? zayif halkalarin plastik seritle tutturulmasina ragmen :>

- do you think are you secure?
- yeah i have a lock, i am secure
- think again

Wednesday, February 16, 2011

MySQL Code Execution

I really embarrassed when i see SYSTEM keyword on MySQL allows execute OS Commands on current system(where mysql daemon runs). Yeah i embarrassed because i don't know it and have no idea about it (Yes i was know code execution with User Defined Functions). It's really simple.

Sunday, February 13, 2011

string to chr() array - ruby style

Hi everyone on my boring blog's readers.(really anybody read my blog? if u read please drop an comment or click my ads :> )
I will only share tiny code snippet that usefull for me. Its converts any string into chr() array, i use it on my php code obfuscator tool. It's here..

def to_chr_array(str)
  ret = ""
  i = 0
  len = str.length

  str.each_byte { |c|
    i+=1
    if i == len:
     ret << "chr(#{c.to_s})"
    else
     ret << "chr(#{c.to_s})."
    end
  }

ret
end


Simple usage:
puts "$variable = #{to_chr_array("hello")};"

Output:
$variable = chr(104).chr(101).chr(108).chr(108).chr(111);

Sunday, February 6, 2011

obfuscating php codes

Giriş
Yazının başlığı "obfuscating php codes" olmasına rağmen otomatize bir şekilde bu işlemi yapan bir tool yayınlamayacağım sadece kullanılabilecek yöntemleri tartışmak istedim, aslında kişisel notlarımdan bir yazı oluşturma çabası bu. Biraz obfuscating işleminden bahsedelim. obfuscating işlemi daha doğrusu "obfuscated code" kavramı kodun normal bir insan (çoğu zaman bir makine) tarafından okunmasını güçleştirmek. Burada makineden kastım bir WAF/IPS/IDS/Antivirus vs.. olabilir. Daha fazla merak edenler [1] ve [2] no'lu referanslara göz atabilirler. Peki neden bu tarz bir işleme ihtiyaç duyulur? Benim gibi bir "web hacker"i iseniz karşılaştığınız PHP Code Injection vs.. gibi durumlarda platformun magic_quotes özelliğini aşmak isteyebilirsiniz, ya da WAF'i atlatmak isteyebilirsiniz vb.. birçok neden sayılabilir neden bu işleme ihtiyaç duyduğunuza dair.

PHP Dilinin Sağladıkları
PHP Dili varsayılan olarak birçok güzel özelliği bizlere sunuyor. Örneğin bir değişken tanımlamasını eğer değerinizin tüm karakterleri birer string ise tırnak işareti kullanmadan yapabilirsiniz.

$a = HELLO;
echo $a; // ekrana HELLO yazacaktır..

Fonksiyon çağırımlarında değişkenleri fonksiyon isimleri için kullanabilirsiniz.

$a = system;
$cmd = $_GET[cmd];
$a($cmd);

Bir dizinin elemanına ulaşırkende yine eleman adında özel karakter yoksa tırnak işareti kullanmadan çağırabilirsiniz.

$cmd = $_GET[cmd];

chr() fonksiyonundan yararlanabilirsiniz.

echo chr(72).chr(69).chr(76).chr(76).chr(79); // ekrana HELLO yazacaktır..

base64 encode edilmiş veriler işinizi görebilir.
echo base64_decode("SEVMTE8="); // ekrana HELLO yazacaktır..
echo base64_decode(SEVMTE8); // ekrana yine HELLO yazacaktır fakat = işaretini kaldırmaktan pek emin değilim decodinge bir zararı olur mu olmaz mı anlamında..

Ayrıca whiteline vb.. şeyleride ortadan kaldırarak tespiti zor web trojanları hazırlayabilirsiniz.

Son Sözler
Öğrendiklerimizin tümünü bir arada kullanarak şöyle birşey hazırlayabiliriz. Okunması gayet zor olan bir kod hazırlamaya çalışalım ve bu kod şunu yapsın verilen base64 encoded veriyi decode edip ekrana yazsın.

$a=base;$b=de;$c=chr(54).chr(52).chr(95).chr(100).chr(101).chr(99).chr(111);$d=$a.$c.$b;$c=pri;$b=chr(110).chr(116).chr(102);$a=$c.$b;$a($d(SEVMTE8));

Çalıştırırsanız ekrana HELLO yazdığını göreceksiniz.


Referanslar
[1] - http://en.wikipedia.org/wiki/Obfuscation
[2] - http://en.wikipedia.org/wiki/Obfuscated_code

Tuesday, January 4, 2011

WGT E-Dergi 7.Sayi Yayinlandi

c/p'ed from bunyamindemir.com;
"Web Güvenliği Topluluğu olarak düzenli yayınladığımız E-Dergi projesinin 7.sayısı yayına girdi.İlgili yazıları özetlemek gerekirse;

  • Bedirhan Urgun, Anti-Crawling Teknikleri
  • Dr. Emin İslam Tatlı, SAMM ile Güvenli Yazılım Geliştirme
  • Onur Yılmaz, WGT Capture the Flag
  • Canberk Bolat, PHP Kod Güvenliği ve Yanlış Bilinenler
  • Bünyamin Demir, WGT 2010 Değerlendirmesi ve 2011 Ajandası

Ayrıca bir de OWASP Chair olan Jeff Williams ile bir röpörtaj gerçekleştirdik."

okumak isteyenler için; http://dergi.webguvenligi.org/sayi/7-aralik-2010.wgt