Showing posts with label off-by-one. Show all posts
Showing posts with label off-by-one. Show all posts

Thursday, September 2, 2010

plan9 gethostbyname off-by-one :)

struct servent*
getservbyname(char *name, char *proto)
{
...
static char buf[1024];
...
/* construct the query, always expect an ip# back */
if(num)
snprintf(buf, sizeof buf, "!port=%s %s=*", name, proto);
else
snprintf(buf, sizeof buf, "!%s=%s port=*", proto, name);
...
}

hali hazirda plan9 isletim sistemi olanlar deneyip teyit edebilir ben denemedim sadece Google'da rastladım bir blogdan :)

http://plan9.bell-labs.com/sources/plan9/sys/src/ape/lib/bsd/getservbyname.c

@HellCode Research: "plan9'la ugrasiyordunuz bir goz atarmisiniz :)"

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