Showing posts with label php. Show all posts
Showing posts with label php. Show all posts

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;
}

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

Thursday, December 16, 2010

Gelişmiş File Inclusion Saldırıları

Daha önceden yazdığım bir makale, ADEO Security Labs blogunda yayınlamıştık, sonunda PDF'e çevirip blogumada ekledim :>

Okumak isteyenler aşağıdaki adresten AFIA.pdf dosyasından erişebilirler.
https://sites.google.com/site/canberkbolat/papers

Tuesday, September 14, 2010

MySQL Session Hijacking over RFI

Yaklaşık 4 ay önce yayınlamıştım. Birkaç değişiklik yaptım, öyle ahım şahım değişiklikler değil blog adresimi düzenledim, kapanış paragrafını değiştirdim vs..

Tekrar yayınlayayım dedim malum eski blogu silince gitmişti. İyi/kötü fikiri olanlara saygı duyarım..

read:
http://sites.google.com/site/canberkbolat/papers/mysql_session_hijacking_over_rfi_v2.pdf

Friday, August 27, 2010

php 5.3.3 ibase_gen_id() off-by-one

Selamlar günlük. Gönül isterdiki şok bir gelişme ile giriş yapayım :) Var aslında gelişmeler ama şuan için belirginleşmeden birşeyler yazmayayım. php ibase_gen_id fonksiyonunda off-by-one zafiyeti raporlamıştım. Ona kısaca değineyim istedim buradan hemde günlük boş boş durmasın ara sıra yazmak lazım :> Verdiğim PoC yerelde bir taşma yapıyor, eğer bir uygulama kullanıyorsa ve girilen parametre kullanıcı kontrollü ise uzaktan da exploit edilebilir. En ilginç geleni ise arka planda fonksiyonda Firebird/Interbase SQL sorgusu çalıştırılıyor ve kullanıcı buna müdahele ediyor. Firebird/Interbase SQL sorguları ile komut çalıştırmaya izin veriyorsa kod çalıştırmakta mümkün olabilir yada open basedir, safe mode çalıştırılan SQL sorguları ile aşılabilir. Vakit bulunca bu konuyada yoğunlaşıcam. Patch olarak aşağıdaki gibi birşey uygulanabilir.

--- [1] snprintf(query, sizeof(query), "SELECT GEN_ID(%s,%ld) FROM rdb$database", generator, inc);
+++ [2] snprintf(query, sizeof(query) - 1, "SELECT GEN_ID(%s,%ld) FROM rdb$database", generator, inc);

Advisory
http://www.exploit-db.com/exploits/14678/

PoC
http://www.exploit-db.com/sploits/ibase_gen_id_poc.zip