3 Aralık 2018 Pazartesi

ModSecurity ile Web Uygulama Güvenliği - Kurulum, Kullanım ve Kurallar


Herkese Selamlar,

Bu yazı açık kaynak bir güvenlik duvarının kurulum, kullanım ve kuralları hakkında olacak.

Mod Security WAF


Web uygulamalar için geliştirilmiş web servislerde gömülü çalışan açık kaynak bir  web uygulama güvenlik duvarıdır. Genel olarak HTTP trafiğini dinleyip analiz eder. 

Web uygulamalar için saldırı tespit (IDS) ve engelleme (IPS) görevi görür.

Kurulum


Ubuntu/Debian

  1. $ sudo apt-get install libapache2-mod-security
  2. $ sudo a2enmod mod-security
  3. $ sudo /etc/init.d/apache2 force-reload


Fedora/CentOS


  1. $ sudo yum install mod_security
  2. $ sudo /etc/init.d/httpd restart

Microsoft IIS (MSI Installer)


  1. $ 32 Bits Installer
  2. $ 64 Bits Installer


Paketleri kurduktan sonra güvenlik duvarının sağlıklı çalışması için birkaç konfigürasyon yapmamız gerekecek. Ben bugün Debian OS üzerinden anlatacağım web servis olarak Apache kullanacağım.

Kurulum bittikten sonra Apache servisimizi

$ service apache2 restart

komutu ile yeniden başlatıyoruz.

Ardından gerekli modulümüzü apachectl ile (HTTP Servisi için bir denetleme aracı) kurulmuşmu kontrol edeceğiz.

$ apachectl -M |grep security 



security2_module(shared) ile modülümüzün ayakta olduğunu görüyoruz.

Sırada ön tanımlı gelen konfigürasyon dosyamız üzerinde birkaç değişiklik yapacağız

$ mv /etc/modsecurity/modsecurity.conf{-recommended,}

komutu ile konfigürasyon dosyamızın ismini modsecurity.conf yapıyoruz ardından nano editörümüz ile açıyoruz.

2 adet kural motorunda düzenleme yapacağız

SecRuleEngine

Güvenlik duvarının kural motorlarından biridir ve 3 farklı parametre alır.

  1. On  -- ( Kuralları uygular)
  2. Off -- (Kuralları uygulamaz)
  3. DetectionOnly -- (Kuralları uygular fakat bloklamaz)

SecResponseEngine

2007'de yazılan kaliteli bir kaynakta default olarak kapalı geldiği yazılmış. Ne zamandır böyle bilmiyorum fakat artık default olarak açık geliyor ve cevapları tamponlamaya, analiz etmeye ve ya bunları yapmamaya yarıyor. 2 farklı parametre alır.


  1. On -- (Cevapların ulaşılma durumu aktif)
  2. Off -- (Cevaplara ulaşılmaz) 


SecRuleEngine olan satırı buluyoruz ve DetectionOnly modundan On moda alıyoruz
Hemen ardından SecResponseBodyAccess kısmını On modundan Off moduna alıyoruz.

Konfigürasyon dosyasının içerisinde POST methodu ile alınacak verinin boyutuna kadar birçok ayar yapabilirsiniz.

Apache servisimizi tekrar başlatıyoruz.

$ service apache2 restart

Hemen ardından /var/log/apache2/ dizini altında modsec_audit.log adında modsecurity’nin dinlediği trafiği kaydettiği günlük  dosyasının oluşması gerekiyor.




Şimdi güvenlik zaafiyeti içeren bir php dosyası oluşturacağım ardından web servisine payload göndererek sağlıklı çalışıyor mu inceleyeceğim.

Güvenlik Zaafiyeti Olan PHP Dosyası


Koddan anlayacağımız üzere çok basit bir Cross Site Scripting (XSS) zaafiyeti. HTTP GET isteği ile gelen  "a" girdisi üzerinden veriyi alıp ekrana bastıracak.




Şimdide basit bir XSS payload'ı <script>alert(1)</script> gönderelim. 




Arka tarafta modsecurity’nin  trafiği kaydettiği günlük  dosyası, gelen isteğin /usr/share/modsecurity/rules dizini altında bulunan kuralda, XSS zaafiyetini sömürmeye yönelik zararlı javascript kodu olduğunu anlıyor ve isteğe 403 cevabı döndererek engelliyor.

Kural yazma aşamasına geçmeden önce biraz kuralların olduğu dizinde dolaşıp olayı anlamaya çalışıyorum.



/usr/share/modsecurity-crs/rules dizini altında .conf ve .data şeklinde iki farklı dosya tipi olduğunu görüyorum.

.data dosyaları içerisinde kural dosyalarının zaafiyete göre çok yer kaplamaması için payload listeleri var. Örneğin Response ve SQL Injection ile ilgili konfigürasyon dosyasında normal şartlarda sqli zaafiyetinin anomalisinin bozulup  eğer error based ise ekrana hata vermesi gerekirken, payload dosyası yani sql-response.data dosyasından response da olan bir şey yakalarsa engelliyor.

Örneğin : You have an in error sql syntax - mysql error vs

Bir bakıma conf dosyasına başka bir dosya içerisinde bulunan payloadları dahil etme işini yapıyor.

Kurallar 


Kural yazmaya başlamadan önce değişkenleri, operatörleri anlayabilmek için bir kural açıp incelemeye başlayalım.

Biraz incelerseniz sentaksı hakkında fikir sahibi olabilirsiniz. Örnek bir kod bloğu aşağıdaki gibidir.





Hashtag ile yorum satırları yazılmış. Biraz yukarda bahsettiğimiz gibi dosyaya payloadları eklemek yerine @pmFromFile scanners-user-agents.data dosyasından dahil ediyor. O dosyasının içeriğine bakalım





Burdan anlayacağımız üzere güvenlik tarayıcı uygulama/ürünler yaptıkları bazı web isteklerinde bu user-agentları kullanıyormuş. Neden kullanıyor sorusuna da basitinden şöyle cevap verebiliriz. Bazı web uygulamalar X-Forwardad-For HTTP header'i ile istemcinin ip adresini aynı zamanda user-agent değerini sayfa kaynağına yazarlar.

Güvenlik tarayıcısı user-agent'ı kendine göre düzenleyip gönderdiği zaman response'u inceler ve eğer user-agent'ı sayfa kaynağına yazdığını anlarsa XSS Code injection gibi çeşitli zaafiyetlerinin payloadlarını user-agent header'ında yollar.

Şimdi en başından başlayıp kuralı inceleyelim ardından bizde bir kural yazalım.

SecRule REQUEST_HEADERS:User-Agent "@pmFromFile scanners-user-agents.data" \

SecRule belkide modsec'e ait en önemli özellik bunun ile gelen giden verinin üzerinde denetleme mekanizması oluşturabiliyoruz. Yukardaki kuralda da İstek Gövdesi içerisinde ki HTTP header'i olan User-Agent scanners-user-agents.data içerisinde bulunan bir kelime içeriyorsa engelle denilmiş.


Hızlıca alt satırdaki kuralı incelemeye başlayalım

"msg:'Found User-Agent associated with security scanner',\

msg etkiler altında bulunan bir fonksiyon görevi ise hata mesajını yazdırmak. Burda küçük bir not düşmemiz gerekirse hatayı ekrana yazdırmaz. Apache hata günlük dosyasına (error.log) ve modsec'e ait  audit.log dosyasına yazar.

severity yine etkiler altında bulunan bir fonksiyon isteğin seviyesini belirler.

id kurala kimlik vermemize yarar ve id vereceğimiz değer için belli aralıklar vardır. Bu aralıkları şuradaki kaynakta 38. sayfada bulabilirsiniz

rev kuralın kaç kere gözden geçirildiğini,güncelleme yapıldığını belirten etki

phase kuralın inceleneceği aşamayı belirtir burdaki phase:request kuralın sadece istek aşamasında inceleneceğini belirtir


Tüm etkileri google da arama yaparak öğrenebilirsiniz. Biz şimdi basit bir kural yazalım.

Kuralı yazmaya başlamadan önce sorunumuzun ne olduğuna karar verelim ve buna göre bir çözüm geliştirelim. Sorunumuz hassas dizinlerin keşfedilmesi olsun bizde buna çözüm olarak içerisinde belirlediğim dizinler olan istekleri engelleyelim.

İki adet dosya oluşturacağız birincisi .conf uzantılı konfigürasyon dosyamız ikinci ise hassas dizin payloadları olan .data dosyamız.

REQUEST-922-DIZINTARAMASI.conf




backup.data


Aşağıdaki gibi GET /www.berkdusunur..net şeklinde gelen istekleri engelleyecek.



Aynı zamanda error.log ve modsec_audit.log dosyalarına da belirttiğimiz hata mesajı ile beraber düştü.





Okuduğunuz için teşekkür ederim faydalandığım bazı kaynakları aşağıya bırakıyorum.

https://www.modsecurity.org/download.html
https://www.webguvenligi.org/docs/ModSecurity_2.1.0_Turkish.pdf
https://www.webguvenligi.org/wp-content/uploads/2007/05/modsec_owasp_06052007.pdf
https://www.syslogs.org/mod_security-kurulumu/
https://www.digitalocean.com/community/tutorials/how-to-set-up-mod_security-with-apache-on-debian-ubuntu
https://github.com/SpiderLabs/ModSecurity

berkdusunurx@protonmail.com




4 Kasım 2018 Pazar

Development Of Metasploit Module After 0day [Nuuo NVRmini2 RCE]



Hello Everyone


In this article I will tell you how to develop a 0day's metasploit module. Before writing Thank you to Numan Türle (@numanturle) for help on about ruby ​on rails



Vulnerability 

Vulnerability in a web application running on hardware, an input from a user caused a vulnerability in execution of a remote command execution.

This vulnerability affected 106 server




Examples Request



Usually this application is running on the server "8081" port. But when I do some research with shodan "50000" can work on ports such as "8080".

"uploaddir" value causes remote command execution vulnerability.in 

Example Response



The application works on root privileges. 

Metasploit-Framework Modules Development

Before you start writing, you can benefit greatly from here.If we need to summarize the first picture, we mentioned that the msf module is remote and we will use http client

Then enter the author, platforms, date and arch values.if this vulnerability was remote code execution, we should have chosen ARCH_PHP. But I used ARCH_CMD for remote command execution

There is a point we need to pay attention to here.people often compare "remote code execution" and "remote command execution" vulnerabilities

https://www.offensive-security.com/metasploit-unleashed/exploit-development/




If we need to summarize the first picture, we mentioned that the msf module is remote and we will use http client.


Then enter the author, platforms, date and arch values. There is a point we need to pay attention to here.
People often compare "remote code execution" and "remote command execution" vulnerabilities.If this vulnerability was remote code execution, we should have chosen ARCH_PHP. 




"if else" loop generated in response to  code in first lines. If response 200 and body / upload_tmp_dir / return vulnerable.


In the last lines we have specified the type of web request to be made "GET". 
Then the payload is entered with the "cmd" to the value that is the vulnerability. This payload gets backconnect with telnet.






Thank you for reading. twitter.com/berkdusunur
mailto::berkdusunurx@protonmail.com

20 Eylül 2018 Perşembe

TR | "C" Programlamaya Giriş [ Bölüm 1 ]


Herkese selamlar, uzun zamandır ilgilenemediğim blogumda yeni bir yazı serisi başlatmaya karar verdim.

Bu yazı serisinde temelden ileri bir seviyeye kadar "c" programlama ile ilgili birçok bilgiye yer vereceğim. Derleyici olarak GCC kullanacağım.

GNU Compiler Collection [GCC]

GNU Linux dağıtımlarının vazgeçilmez derleyicisidir. Terminalde çalışır.  Daha önceden sadece "c" compile ettiği için gnu "c" compiler denilirmiş.

Sonradan diğer diller de eklenince GCC olarak hitab edilmeye başlanmış.

Algoritma 

Algoritmaya kısaca belirli bir problemi veya ulaşılmak istenen yeri en kısa ve masrafız şekilde bulmak için yapılan işlemlerin bütünü diyebiliriz.




Örnek ile pekiştirelim

İki sayıyı toplamak için gerekli programa ait algoritmanın oluşturulması

Algoritma:

1. X değerini gir
2. Y değerini gir
3. Z ? X+Y
4. Z' yi yaz
5. Bitir.

Görüldüğü üzere bu şekilde bir algoritma ile çözüm yolunu izlemek daha kolaydır.

Bir problemin çözümü için birden çok yol olabilir. Algoritma bize en kısa ve en masrafsız yolu bulmamızda yardımcı olur 

Toparlamamız gerekirse, Bir problemin çözümü için 3 farklı yol olduğunu varsayalım

B
C

A yolu bizi sonuca çok kısa bir süre de ulaştırsa da çok masraflıdır. Burda kastedilen masraf ise ram cpu gibi donanımların yüksek oranda kullanılması.

B yolu ram cpu gibi bileşenleri fazla yormuyor fakat çok yavaş çalışıyor. Bu yol bize zamandan kaybettiriyor.

C yolunda ise hem ram cpu bileşenler az kullanılıyor hem de hızlı bir şekilde problemin çözümüne ulaşıyoruz.

C Programlama


1972 de "Dennis Ritchie" tarafından AT&T Bell Laboratuarlarında B dilinden geliştirildi.

C Dilinin Özellikleri

1-   C dili donanımdan bağımsız (machine independent) ve taşınabilirdir (portable).
2 -  Taşınabilirlik, aynı programın farklı donanımlarda ve farklı işletim sistemlerinde
 işletilebilirliğini ifade eder.

 3- Bir dilin verimliliği (productivity), hızlı fakat fazla yer kaplamayan yazılımlar geliştirmeye olanak   
 sağlaması ile ölçülür.

Bir "C" programı iki bölümden oluşur.

Preprocessor Directives yani önişlemci direktifleri
Main Function birde ana fonksiyon

Önişlemci direktifleri # ile başlar ve henüz program derlenmeden "c" önişlemcisi tarafından işletilir.

#include ve #define en sık kullanılanlardır. Hepsinin farklı görevleri vardır.

Sıklıkla kullanacağımız #include direktifi program içerisinde kullanılan fonksiyonlar için gerekli kodları programa dahil etmek için kullanılır.

Hello World!

Yazdığımız programın ekrana hello world yazdırmasını istiyoruz. Bunun için "c" dilinin standart fonksiyonu olan printf i kullanacağız

Ancak bu fonksiyonu çalıştırabilmemiz için <stadio.h> dosyasına ihtiyacımız olacak.

O halde programımızın tepesi şu şekilde olmalı 

#include <stadio.h>

Bir sonra ki fonksiyonumuz main() bu fonksiyon tüm "c" programlarında bulunması gereken ana fonksiyondur. Yazılan kodlar ise küme parantezleri içerisine yazılır {}


Dosya uzantımız "c" gcc ile derleyip sonucu almak istiyoruz.

Komut satırını açtıktan sonra 

gcc berk.c -o program 

Komudunu kullanıyoruz. Burda gcc den berk.c dosyasını derleyip output olarak program isminde bir dosya çıkarmasını istiyoruz. Ardından ./program ile çalıştırıyoruz



İkinci bölümde  görüşmek üzere sağlıcakla kalın 

24 Temmuz 2018 Salı

TR | Netsparker ile Web Uygulama Sızma Testleri




Herkese Selamlar,

Bu post Netsparker ile yapılan bir web uygulama testini simüle edip false positive oranları, optimizasyon ve diğer uygulama tarayıcalarından farkları hakkında teknik bilgiler içerecek.

Uygulamanın demo sürümüne burdan ulaşabilirsiniz

Netsparker 

Netsparker, web sitesinin geliştirildiği dil ya da teknolojiye bakmaksızın, platformdan bağımsız bir şekilde SQL Injection ve Cross-site Scripting (XSS) gibi güvenlik açıklarını tespit eder ve çözüm önerilerini de içerecek şekilde tüm detaylarıyla size raporlar. 

Ayrıca Netsparker, kendine özgü tarama teknolojileri sayesinde güvenlik açıklarını tespit etmekle kalmayıp, bu güvenlik açıklarının gerçekten var olduğuna dair kanıt sunar. 

Böylelikle Netsparker’ın size sunduğu sonuçların doğruluğunu kontrol etmeniz gerekmez.

Ilk Tarama


Bu simülasyonda test edeceğimiz web servis http://php.testsparker.com adresinde barınmaktadır. Üzerinde Netsparker koşturmadan önce adrese gidip herhangi bir login page var mı diye göz atıyorum



Bunun sebebi Netsparker'ın unauthentication ile tarama yapmasının yanı sıra authentication yaparak uygulama içerisinde ki sayfalarda da zaafiyet araştırması yapmasını istememiz.

Uygulamayı indirip kurduktan sonra resimdeki gibi bir arayüz ile karşılaşıyoruz



Öncelikle options butonuna tıklayarak seçenekleri görüntülüyoruz.


Tarama poliçesi bölümünden Netsparker'ın sağlıklı sonuçlar verebilmesi için hedef sistem hakkında bilgiler girmemiz gerekiyor.

Bu bilgiler kısaca uygulamanın barındığı sunucunun işletim sistemi uygulamanın dili kullandığı web servis vs.

Bu noktada girilen bilgiler oldukça önemli. Netsparker'ın sistem üzerinde doğru payloadları yakalaması için optimize edilmiş bir tarama poliçesine ihtiyacımız var böylelikle uygulamadan daha sağlıklı sonuçlar alabileceğiz.

Hedef sistem hakkında istenilen bilgileri "Shodan", "Nmap" ve  "Sayfa Kaynağından" elde edebilirsiniz.

Ardından bir diğer önemli nokta olan eğer uygulama üzerinde bir erişimimiz var ise "Form" sekmesinden giriş path'ini ve credentials girmemiz.



Tüm bunlardan sonra taramayı başlatıyorum. Start Scan seçeneğinden sonra Netsparker bir pencere açıp uygulama üzerinde authentication yapıp uygulama içerisinde ki sayfalarda da testlerini yapmaya başladı



3 aşamadan oluşan tarama sırasında Netsparker arka planda crawling yaparak uygulama içerisinde ki dizin ve scriptleri buluyor. Bunun yanı sıra kendi wordlisti ile backup dizinleride keşfediyor.


Resimde sol üst köşede tarama hızı ve yollanan request sayısı hakkında  bilgi sahibi olabiliriz orta bölümde sayfaları ve yollanan payloadları , onun hemen altında iste seviyelerine göre zaafiyetleri görebiliriz.

Netsparkeri diğer uygulama güvenliği tarayıcılarından ayıran nokta false positive uyarı vermemek için zaafiyetin türüne göre dışarıya bilgi çıkarması.

Rastgele bir zaafiyeti açarak request ve responsları inceliyorum.




Açılan pencerede Netsparker bize adresi, saldırıdan etkilenen parametreyi, PoC adresini ve payload'ı veriyor.

Netsparkerın payloadını incelediğimiz zaman

'"--></style></scRipt><scRipt>netsparker(0x000438)</scRipt>

Şeklinde bir payload kullandığını görüyoruz. Burada sadece script taglarını açarak da alert verdirebilirdi fakat yukarıdaki şekilde bir payload'ı kullanmasının sebebi eğer varsa contextlerden kaçmasıdır .

Bu çoğu zaman için iyi bir payloadtır.

Bir başka zaafiyeti incelediğimiz zaman




Boolen based tabanlı sql injection bulduğunu görüyoruz. HTTP Request ve Response sekmesinden Netsparker'ın açıklık için yolladığı isteği ve dönen cevabı görebiliyoruz.

Aynı zamanda zaafiyetin response adresini Browser view sekmesinden tarayıcı tabanlı gösterebiliyoruz.




Rakiplerini geride bırakmasında en önemli rolü false positive sonuçları çok büyük ölçüde engellemiş olması.


25 Mart 2018 Pazar

TR-EN | Acrolinx Dashboard Directory Traversal (CVE 2018-7719)





Hello everyone :)

In this article I will publish the vulnerability I found on acrolinx dashboard.

What Is Acrolinx




Acrolinx is a server-client system developed to support quality assurance during the creation of expertise texts.

This support includes the application and supervision of the writing and style rules and has the component of terminology management and terminology extraction through the Acrolinx Terminology module.

This module integrates with the quality assurance system for the extraction, management and use of erminology.

In addition, term candidates can be suggested and terms can be searched. Acrolinx supports transport formats such as OLIF, XML, MTF, TBX and CSV.

What is a Directory Traversal Attack? 

Properly controlling access to web content is crucial for running a secure web server.
Directory traversal or Path Traversal is an HTTP attack which allows attackers to access restricted directories and execute commands outside of the web server’s root directory.

Web servers provide two main levels of security mechanisms  Access Control Lists (ACLs) Root directory An Access Control List is used in the authorization process.

It is a list which the web server’s administrator uses to indicate which users or groups are able to access, modify or execute particular files on the server, as well as other access rights.


Proof of Concept

The acrolinx dashboard running on Windows servers is affected by directory traversal. This vulnerability applies to all versions.

I know I was running this dashboard in windows server because I did a scan with nmap in the beginning.

Firstly I did various tests with wfuzz to an input value I caught. I did not get any results. I created a wordlist for Windows servers





Link for wfuzz usage: http://www.berkdusunur.net/2017/11/web-application-penetration-testing.html

Wordlist 

a short section

..\..\..\..\..\..\..\..\..\..\boot.ini
..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\windows\win.ini
..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\boot.ini
..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\windows\win.ini request 200 made with


I am with zehra when the http request is 200 :)





I obtained a directory traversal which is accomplished when I repeat this request using the burp suite



Then report process lived...

The company has released updates for all versions.

Twitter      @berkdusunur
Telegram   @berkdusunur

eng;

http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-7719

https://support.acrolinx.com/hc/en-us/articles/115002980125-Acrolinx-Server-Version-5-2-including-subsequent-service-releases-

https://support.acrolinx.com/hc/en-us/articles/115005757125-Acrolinx-Server-Version-5-3-including-subsequent-service-releases-

https://hackertor.com/2018/03/25/na-cve-2018-7719-acrolinx-server-before-5-2-5-on-windows-allows/

https://www.security-database.com/detail.php?alert=CVE-2018-7719

https://infosec.cert-pa.it/cve-2018-7719.html

https://nvd.nist.gov/vuln/detail/CVE-2018-7719




SAFE DAYS :)
 :)

12 Mart 2018 Pazartesi

Izhack | Code of Duty CTF Write Up






Herkese selamlar.

Code Of Duty ekibinin düzenlediği CTF' de kendi yazdığım web ve Network sorularının çözümlerine burdan ulaşabilirsiniz

Web Çinli Hacker

Bu soruda verilen ip adresine gidildiğinde bankanın mail servisinin çinli bir hacker tarafından hacklendiğini ve yarışmacılardan vaka analizi yapmaları istenildi.


robots.txt ye bakıldığında /administrator/admin dizininin disallow olduğunu göreceklerdi

Sayfaya gittiklerinde aşağaıdaki gibi bir indexle karşılaşacaklardı.



Sayfa kaynağında yorum satırı haline getirilmiş bir değişkeni gördüklerinde bayrağı bulmak için son bir aşama kalacaktı


 Mail servisi hacklendiği için yarışmacıların öncelikle /var/log/mail.log adresine bakmaları gerekiyordu 





















flag_burda_hacker_nerde

Web Nerde Ararsın 

Web100 olarak düşündüğüm bu soruda yarışmacılar verilen ip adresine gittiklerin de bir searchbox ile karşılaşıyorlardı.


;ls şeklinde arattıklarında


index dosyası ve search.php ile karşılaşıyorlardı

;ls -a ile arattıklarında .B3kaps dizinini göreceklerdi flag bu dizin altındaki config dosyasındaydı


hekedby_alemdarorganizasyon_


Web Facebook

Bu soru hazırlarken en çok zevk aldığım soruydu soruya başlamadan önce Frontend için CodeOfDuty ekibinden ömere çok teşekkür ederim :)

Yarışmacılar verilen ip adresine gittiklerinde bir login page ile karşılaşıyorlardı


Sayfanın tittle değeri Ceo Login ve username kısmındaki value değeri mark dı

Hafiften siber istihbarat olan bu soruda markın facebook parolasını googlede arattıklarında dadada olarak bulacaklardı giriş yaptıktan sonra


Upload kısmının herhangi bir php dosyasına yollanmadığından fake olduğunu anlayıp paneli incelemeleri gerekiyordu.

logout.php dosyasına request yaptıktan sonra burp ile isteği tutup sayfa kaynağına bakmaları gerekirdi

logouta tıklandığında 0 saniye içerisinde login kısmına atıyord. İsteği tutup sayfa kaynağına baktıklarında

ulan_m4rk_n3_adams!n_yaa göreceklerdi

İsmini hatırlayamadığım Web Sorusu {Acıktın mı ?}

Bu sorunun ismini hatırlayamadığım için murat uyanınca güncelleyeceğim :)
Verilen ip adresine gittiklerinde not found ile karşılaşıyordu yarışmacılar.

Sayfa kaynağına baktıklarında iytemenu dizinini göreceklerdi dizine gittiklerinde



Linklerde biraz dolanınca contact.php nin page değişkeni ile ekrana yazıldığını göreceklerdi

Akla ilk directory traversal gelmeliydi /etc/passwd dizinine baktıklarında



daemon ve deamon diye iki adet user göreceklerdi

deamon kullanıcısının parolası rockyou içerisindeki "butterfly" dı.

deamon kullanıcısına bağlandıklarında  zamanlanmış görevler içerisinde /var/spool/cron/crontab/zmnlnms.txt 
base64 ile tutuluyordu 

ZDB5ZHVudXpfbXU/KmM0bmxhciFtXzE4

decode ettiklerinde d0ydunuz_mu?*c4nlar!m_18

Kalan bir web 2 de network sorusu için ram'im kalmadığı için murat ve ozanın bilgisayarlarında koşturduk. ova lar gelince burası güncellenecek  :)


Ellerinize Sağlık

6 Şubat 2018 Salı

Code Injection | Web For Pentester



Code Injection Nedir?

Code Injection kritik seviyeli güvenlik zafiyetlerinde listenin başında gelen güvenlik zaafiyetidir.

İstismar olarak SQL injectiona çok benzese de aralarında ki fark birinde sql sorguları çalıştırırken diğerinde ise kullanılan programlama dilinin fonksiyonlarını çalıştırmaktır

Sistemin üzerinde koşturduğu web yazılımda komut çalıştırma fonksiyonları içerisine,
kullanıcılardan veri alan değişkenlerin filtrelenmeden dahil edilmesinden kaynaklanmaktadır.

Web For Pentester CodeInjection

Web For Pentester'ı kurduktan sonra example 1'e gidiyorum.

Code Injection olan page gittik php ile yazılmış bir web uygulaması ile karşılaştık yukarda belirttiğim gibi kullanılan programlama dilinin fonksiyonlarını çalıştırabiliyoruz.


example1.php dosyasının name değişkeni ile hacker'ı ekrana bastırdığını görüyoruz. Hacker dan sonra da üç adet ünlem gelmiş özel karakterlerden biri olan çift tırnak koyarak bir hata almaya çalışıyorum.



Çift tırnaktan sonra "syntax" hatası aldık. Burdan koyduğumuz çift tırnağın söz dizimini bozduğunu,  burdanda son kullanıcıdan gelen girdi değerlerini filtrelemediğini anlayabiliriz.

Şimdi hızlı bir şekilde phpinfo dosyasını okumaya çalışalım. Burda temelde olsa PHP bilgisi çok önemli.





Başarılı bir şekilde phpinfo aldıktan sonra farklı birkaç tane daha php fonksiyonu deneyip example1.php kodumuzu açıp zaafiyet neresinde inceleyeceğiz.

"system" fonksiyonu ile birkaç kod yürütüyorum.

"uname -a"


"id"


"whoami"


Zaafiyetli Kodun İncelenmesi


Zaafiyetin gelen girdi değerlerini filtrelemediği için code Injection'a yaradığını yukarda öğrendik.

example1.php içeriği aşşağıdaki gibi 


<?php require_once("../header.php"); ?>

<?php 
$str="echo \"Hello ".$_GET['name']."!!!";";"
eval($str);
?>
<?php require_once("../footer.php"); ?>


bize burda gerekli kodlar;

<?php 
$str="echo \"Hello ".$_GET['name']."!!!";";"
eval($str);
?>

"eval" Fonksiyonu dışardan gelen bir değişkene atanan php kodlarını çalıştırır.

Örnek üzerinde anlatmamız gerekirse

$code = ' echo "Selam Hacker!";';

eval($code);


$_GET gibi dışardan alınan değerlerde eval fonksiyonu kesinlikle kullanılmamalıdır.

Çözüm

Ben çözüm olarak basit bir şekilde $str değişkenini FILTER_VAR Fonksiyonu ile filtre koydum
Kodu aşşağıdaki gibi değiştirip system fonksiyonu ile uname -a kodunu yürütmeye çalıştım.


<?php 
$str="echo \"Hello ".$_GET['name']."!!!";";"
eval(filter_var($str, FILTER_SANITIZIE_URL));
?>



Okuduğunuz için teşekkür eder, Güvenli Günler dilerim