Friday, May 18, 2012

Lỗ hổng bảo mật tạo account quyền admin của Joomla 1.6/1.7/2.5

Một lỗi khá mới nhắm vào phần mềm quản trị nội dung (CMS) nổi tiếng - Joomla, được công bố từ tháng 3/2012 trên blog của Jeff Channell [1] nhưng vẫn chưa được nhiều người biết đến.

Kẻ xấu có thể khai thác lỗi bằng cách chèn thêm vào form đăng ký của Joomla trường jform[groups][] với giá trị "7" tương đương với nhóm admin và cố tình đăng nhập lỗi ( ghi sai password hay captcha ). Joomla lúc này sẽ lưu giá trị group này vào phiên làm việc và trong lần đăng ký ngay sau đó kẻ tấn công sẽ đăng ký thành công với quyền hạn cao nhất. Từ đây hắn có thể đăng nhập vào phần quản trị, upload mã độc và leo thang đặc quyền chiếm cả máy chủ.

Lỗi này nằm ở trong tập tin : /components/com_users/models/registration.php dòng số 190 trong phiên bản Joomla 2.5.2

Code:

// Get the groups the user should be added to after registration.
$this->data->groups = isset($this->data->groups) ? array_unique($this->data->groups) : array();


Thật khó hiểu lý do tại sao người thiết kế Joomla muốn để chức năng này.
Phiên bản 2.5.3 đã vá lỗi bằng cách khởi tạo 1 cách bình thường

Code:
$this->data->groups = array();

Exploit PoC được đính kèm bản tin này, viết dưới dạng chrome extension. Đã thử nghiệm trên Joomla 1.7.5 và 2.5.2.

Source Code: https://github.com/danghvu/j0wnla

[1] http://jeffchannell.com/Joomla/joomla-161725-privilege-escalation-vulnerability.html

Nguồn: http://www.hvaonline.net/hvaonline/posts/list/42223.hva 

* Hướng dẫn khai thác:
Firebug: <input name="jform[groups][]" value="7" />
Tamper Data: jform[groups][]=7

Nút thích 4 trong 1 bật ra từ bên phải cho blogspot gồm( facebook, twitter, google+ và feed)


 Hôm nay mình hướng dãn các bạn thêm tiện ích nâng cấp của tiện ích cũ, nó bao gồm nút thích Facebook, twitter, google+ và feed

Xem thêm: http://kenhdaihoc.com/forum/showthread.php?t=3928

<style> img,a { border: 0; } #on { visibility: visible; } #off { visibility: hidden; } #facebook_div { width: 196px; height: 340px; overflow: hidden; } #twitter_div { width: 246px; height: 353px; overflow: hidden; } #google_plus_div { width: 152px; height: 97px; overflow: hidden; margin-left: 50px; margin-top: 10px; } #knfeedburner_div { width: 300px; height: 97px; overflow: hidden; margin-top: 5px; margin-left: -4px; } #kakinetwork_div { width: 300px; height: 97px; overflow: hidden; }/* right side style */
#facebook_right { z-index: 10005; border: 2px solid #3c95d9; background-color: #fff; width: 196px; height: 353px; position: fixed; right: -200px; } #facebook_right img { position: absolute; top: -2px; left: -35px; } #facebook_right iframe { border: 0px solid #3c95d9; overflow: hidden; position: static; height: 360px; left: -2px; top: -3px; } 
#twitter_right { z-index: 10004; border: 2px solid #6CC5FF; background-color: #6CC5FF; width: 246px; height: 353px; position: fixed; right: -250px; } 
#twitter_right_img { position: absolute; top: -2px; left: -35px; border: 0; } 
#google_plus_right { z-index: 10003; background-color: #F2F2F2; border: 2px solid #006ec9; border-top: 2px solid #0056a0; border-bottom: 2px solid #0056a0; border-right: 2px solid #0056a0; border-left: hidden; width: 152px; height: 97px; position: fixed; right: -154px; } 
#google_plus_right_img { position: absolute; top: -2px; left: -33px; border: 0; }
 #feedburner_right { z-index: 10003; background-color: #fefefe; border: 2px solid #5b5b5b; border-top: 2px solid #5b5b5b; border-bottom: 2px solid #5b5b5b; border-right: 2px solid #5b5b5b; border-left: hidden; width: 300px; height: 97px; position: fixed; right: -303px; 
} #feedburner_right_img { position: absolute; top: -2px; left: -33px; border: 0; } 
#kakinetwork_right { z-index: 10003; border: 2px solid #303030; background-color: #fff; width: 300px; height: 97px; position: fixed; } 
#kakinetwork_right img { position: absolute; top: -2px; left: -101px; }/* left side style */
#facebook_left { z-index: 10005; border: 2px solid #3c95d9; background-color: #fff; width: 196px; height: 353px; position: fixed; left: -200px; } #facebook_left img { position: absolute; top: -2px; right: -35px; } #facebook_left iframe { border: 0px solid #3c95d9; overflow: hidden; position: static; height: 360px; right: -2px; top: -3px; } 
#twitter_left { z-index: 10004; border: 2px solid #6CC5FF; background-color: #6CC5FF; width: 246px; height: 353px; position: fixed; left: -250px; } 
#twitter_left_img { position: absolute; top: -2px; right: -35px; border: 0; } 
#google_plus_left { z-index: 10003; background-color: #006ec9; border: 2px solid #006ec9; border-top: 2px solid #0056a0; border-bottom: 2px solid #0056a0; border-left: 2px solid #0056a0; border-right: hidden; width: 152px; height: 97px; position: fixed; left: -154px; }
 #google_plus_left_img { position: absolute; top: -2px; right: -33px; border: 0; }
 #feedburner_left { z-index: 10003; background-color: #fefefe; border: 2px solid #5b5b5b; border-top: 2px solid #5b5b5b; border-bottom: 2px solid #5b5b5b; border-left: 2px solid #5b5b5b; border-right: hidden; width: 300px; height: 97px; position: fixed; left: -303px; } 
#feedburner_left_img { position: absolute; top: -2px; right: -33px; border: 0; } #kakinetwork_left { z-index: 10003; border: 2px solid #303030; background-color: #fff; width: 300px; height: 97px; position: fixed; } #kakinetwork_left img { position: absolute; top: -2px; right: -101px; } 
.box-title1 { border: 1px solid #ddd; /*border-radius*/ -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; /*box-shadow*/ -webkit-box-shadow: 5px 5px 5px #CCCCCC; -moz-box-shadow: 5px 5px 5px #CCCCCC; box-shadow: 5px 5px 5px #CCCCCC; padding: 10px; margin: 10px 0; } 
.enteryouremail { background: #fff !important; border: 1px solid #d2d2d2; padding: 0px 8px 0px 8px; color: #a19999; font-size: 12px; height: 25px; width: 165px; /*border-radius*/ -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; margin: 0px; }
 .submitbutton { background: #F2F2F2; border: 1px solid #F66303; /*box-shadow*/ -webkit-box-shadow: 3px 3px 3px #666; box-shadow: 3px 3px 3px #666; font: bold 12px Arial, sans-serif; color: #000000; height: 25px; padding: 0 12px 0 12px; margin: 0 0 0 5px; /*border-radius*/ -webkit-border-radius: 5px; border-radius: 5px; cursor: pointer; } </style>

<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js'></script> <script type="text/javascript" src="http://apis.google.com/js/plusone.js"></script> <script type="text/javascript">jQuery(document).ready(function(){ jQuery("#facebook_right").hover(function(){ jQuery(this).stop(true,false).animate({right: 0}, 500); },function(){ jQuery("#facebook_right").stop(true,false).animate({right: -200}, 500); }); jQuery("#twitter_right").hover(function(){ jQuery(this).stop(true,false).animate({right: 0}, 500); },function(){ jQuery("#twitter_right").stop(true,false).animate({right: -250}, 500); }); jQuery("#google_plus_right").hover(function(){ jQuery(this).stop(true,false).animate({right: 0}, 500); },function(){ jQuery("#google_plus_right").stop(true,false).animate({right: -154}, 500); }); jQuery("#feedburner_right").hover(function(){ jQuery(this).stop(true,false).animate({right: 0}, 500); },function(){ jQuery("#feedburner_right").stop(true,false).animate({right: -303}, 500); }); });</script> 
<div id="on"> <div id="facebook_right" style="top: 18%;"> <div id="facebook_div"> <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifhWgmIqbsGYYV0yiOtJdJWbesX1OJUFpsX6s4uVnmvRXtHQOMq5AVEnZflC7KEP0r4kGG_hNOfZ2jbPr6agbz-pVSzUPhRrMvGxLkhyICUJEQ6CLUBC8itn9Jr3T95slIJGs8ZhLPxvM/s1600/helperblogger.com-facebook-icon.png" alt=""/> <iframe src="//www.facebook.com/plugins/likebox.php?href=http%3A%2F%2Fwww.facebook.com%2Fkenhdaihoccom&amp;width=200&amp;height=346&amp;colorscheme=light&amp;show_faces=true&amp;border_color&amp;stream=false&amp;header=false" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:200px; height:346px;" allowtransparency="true"> </iframe> </div> </div> </div> 
<div id="on"> <div id="twitter_right" style="top: 35%;"> <div id="twitter_div"> <img id="twitter_right_img" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguQPrGKJXLwu56W5FAfFx1aJhFSy8UBrBvx5lAgMWa4MR72gZHhsNCvKjMhm9ZhmPX4io1TOw7divMPwxBeBZPAjKhlwFjges9Z9jU5TOxYAnFIHOyPLgjUp9eSY8PPHhSpyfSrpeyx30/s1600/helperblogger.com-twitter-icon.png"/>
 <script src="http://widgets.twimg.com/j/2/widget.js"></script> <script>new TWTR.Widget({version: 2,type: 'profile',rpp: 4,interval: 1000,width: 246,height: 265,theme: {shell: {background: '#63BEFD',color: '#FFFFFF'},tweets: {background: '#FFFFFF',color: '#000000',links: '#47a61e'}},features: { loop: false,live: true,scrollbar: false,hashtags: false,timestamp: true,avatars: true,behavior: 'all' }}).render().setUser('contact_kdh').start();</script> </div> </div> </div> 
<div id="on"> <div id="google_plus_right" style="top: 52%;"> <div id="google_plus_div"> <img id="google_plus_right_img" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT0AMlfxAW_uPXRM4w1uus9gdcp9F62EpnFBpxTpVytLBYo2nM5Tsmyj3CrToGO68DegCKnz2__PO-Lyqz88HcHmJCWfd8Mk5kQbMhs8M4m10BwTBAFoPcBpGre8KdeJBQkF4hSuMswBU/s1600/helperblogger.com-google-plus-icon.png"/> <div style="float:left;margin:10px 10px 10px 0;"> <g:plusone size="tall" expr:href="data:post.url"></g:plusone> </div> </div> </div>
 <div id="on"> <div id="feedburner_right" style=" top: 69%;"> <div id="knfeedburner_div"> <center> <h4 style="color:#F66303;">You can also receive Free Email Updates:</h4> 
<form action="http://feedburner.google.com/fb/a/mailverify" method="post" target="popupwindow" onsubmit="window.open('http://feedburner.google.com/fb/a/mailverify?uri=kenhdaihoc', 'popupwindow', 'scrollbars=yes,width=550,height=520');return true"> <input gtbfieldid="10" class="enteryouremail" name="email" value="Enter your email here..." onblur="if (this.value == &#39;&#39;) {this.value = &#39;Enter your email here...&#39;;}" onfocus="if (this.value == &#39;Enter your email here...&#39;) {this.value = &#39;&#39;;}" type="text"/><input value="kenhdaihoc" name="uri" type="hidden"/><input value="Submit" class="submitbutton" type="submit"/> </form> 
</center><img id="feedburner_right_img" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwy3besNqQ3g3fzoCgw3RkQFcM1IBlPLQFrQTpdhiQD3wDAnGcSBmBWdx8JOCQuGJlwE-7npDLyUg2wRpQoxSEO0A6Jhw7n45GWmdokfBwqRiLL_q3UWOI2wIAuuKxqQ7i0q15HURNFig/s1600/helperblogger.com-subscribe-icon.png"/> </div> </div> </div> </div>


Lưu ý: những đoạn mình đánh dấu màu dưới đây bạn hãy thay bằng địa chỉ của bạn nhé
  •  kenhdaihoccom thay đổi với tên Trang facebook của bạn
  •  contact_kdh thay đổi với tên tài khoản Twitter của bạn
  •  kenhdaihoc Thay đổi bằng ID feed của bạn.


[Chia sẻ] - Tạo hộp thoại thông báo cho blog


Việc tạo 1 hộp thoại nhỏ cho blog để thông báo 1 sự kiện hoặc 1 vấn đề nào đó cho blog xem ra cũng khá cần thiết cho blog. Có nó ta sẽ không phải mất công viết hẳn 1 bài viết để thông báo (nếu như nó sự kiện đó không cần phải dùng 1 bài viết để thông báo). Thay vào đó ta chỉ cần hiển thị 1 đoạn text nhỏ là được.
Có 1 số bạn xin code phần thông báo của mình, mình đã ok. Còn 1 số khác thì chưa rành việc view code nên có yêu cầu mình chia sẻ đoạn code của hộp thoại thông báo này. Hôm nay mình viết hẳn 1 bài viết để chia sẻ nó.


Một vài thông tin về hộp thông báo nhỏ này:
- Hiển thị được nhiều thông báo.
- Các thông báo sẽ hiển thị random (ngẫu nhiên) sau mỗi lần load trang.
- Có button cho phép đóng phần thông báo lại.


Hình ảnh minh họa từ blog của mình:


- Để cho chọn vị trí hợp lý, mình khuyên các bạn nên đặt hộp thông báo này ở phần header của blog.
- Sau khi xác định được vị trí đặt hộp thông báo, các bạn tạo 1 widgetHTML/Javascript và dán code bên dưới vào :
<style type="text/css">
#thbao {
padding:6px 0;
border-bottom:1px solid #e6dac3;
}thu


#thbao-margin {margin: 0 auto;}
.thbao-container {
width:705px;
border: 1px solid #f2b768;
padding: 4px;
font-size:90%;
}
.thbao-header {
background: #ff6734;
color: white;
border:1px solid #ffa789;
padding: 5px 10px;
white-space: nowrap;
}
.thbao-body {
background: #fae9c8;
padding: 5px 10px;
width: 99%;
}
.thbao-close {
float: right;
margin-right: -5px;
}
</style>


<script language="JavaScript">
function hideitem() {
document.getElementById("thbao").style.display="none";
}
//<![CDATA[
thbao = new Array(3);
thbao[0]='{Nội dung đoạn thông báo thứ 1}';
thbao[1]='{Nội dung đoạn thông báo thứ 2}';
thbao[2]='{Nội dung đoạn thông báo thứ 3}';
thbao[3]='{Nội dung đoạn thông báo thứ 4}';


tbindex = Math.floor(Math.random() * thbao.length);
//]]>
</script>


<div id="thbao">
<div id="thbao-margin" class="thbao-container">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="thbao-header"><b>Note</b></td>
<td class="thbao-body">
<a href="#" class="thbao-close" onclick="hideitem()"><img src="http://www.blogger.com/img/close.png" alt="Đóng lại" /></a>
<span class="thbao-text">


<script type="text/javascript">
document.write(thbao[tbindex]);
</script>


</span>
</td>
</tr>
</tbody>
</table>
</div>
</div>
Đầu tiên là việc chỉnh sửa lại code CSS:
Các bạn có thể xem hình minh họa bên dưới rồi thay đổi lại các giá trị của nó để cho hộp thông báo phù hợp với blog của bạn, chủ yếu là chỉnh lại các giá trị màu sắc và kích thước.


Tiếp theo là chỉnh lại code javascript:
Ta thấy có đoạn code như thế này :
thbao = new Array(3);
thbao[0]='{Nội dung đoạn thông báo thứ 1}';
thbao[1]='{Nội dung đoạn thông báo thứ 2}';
thbao[2]='{Nội dung đoạn thông báo thứ 3}';
thbao[3]='{Nội dung đoạn thông báo thứ 4}';


Tất cả nội dung của thông báo phải cho vào dấu nháy đơn. Nội dung hiển thị thông báo cho phép sử dụng thẻ HTML. Ở trên là code mẫu cho 4 đoạn thông báo, nếu là 5 đoạn các bạn chỉ việc thêm vào như code bên dưới :
thbao = new Array(4);
thbao[0]='{Nội dung đoạn thông báo thứ 1}';
thbao[1]='{Nội dung đoạn thông báo thứ 2}';
thbao[2]='{Nội dung đoạn thông báo thứ 3}';
thbao[3]='{Nội dung đoạn thông báo thứ 4}';
thbao[4]='{Nội dung đoạn thông báo thứ 5}';


Như vậy đã hoàn thành. Chúc các bạn thành công.


Nguồn: BlOg FD