Tuesday, 18 December 2012

Race condition attack trên ứng dụng web


-------------------------------------------------------------------
Nguồn : ktavpro
http://antoanthongtin.wordpress.com/
--------------------------------------------------------------------------------------------------------------
Tác giả + Share:  g4mm4
_http://www.slideshare.net/XchymHip/final-raceconditionintheweb
video + PoC mình để ở đây:
_http://dl.dropbox.com/u/11027388/vnisa-race-condition-attacks-material.zip
----------------------------------------------------------------------------------------------------------------

Hôm qua may mắn gặp anh Hoàng Quốc Thịnh và nghe bài của anh ấy về vấn đề này ở Ngày ATTT 2012 làm mình càng thấm hơn 1 điều đã thấm từ lâu :
  • Nếu được học lại đại học mình sẽ học thật kỹ tất cả các môn cơ bản, từ asm, vi xử lý, kiến trúc hệ điều hành,…. bla bla bla để giờ khỏi hối tiếc và không còn thời gian đề nhồi nhét lại.
Race condition là một vấn đề không mới, mình cũng đã biết từ lâu nhưng toàn trên linux. Để hiểu race condition trên web ta xem 1 ví dụ như sau :
Người A có 10000 $ trong tài khoản, anh ta thực hiện rút 5 lần cùng lúc từ internet banking (bỏ qua 1 số token bảo vệ nhé), mỗi lần 10$, nhưng trong tài khoản chỉ trừ 10$ thôi (lẽ ra phải trừ 50). Vậy lỗi xảy ra ở đâu ?
Xem xét đoạn code sau của ngân hàng trong việc trừ tiền :
Khi tiến trình 1 đang thực hiện câu lệnh $tongtien = $tongtien – $sotien thì một tiến trình 2 của người A đang đòi rút chèn ngang, lúc này hệ thống sẽ tạm dừng tiến trình 1 đang xử lý để quay sang xử lý tiến trình 2 :
Lúc này khi bắt đầu xử lý tiến trình 2, tổng tiền chưa được cập nhật bởi tiến trình 1 đã tạm dừng. Do đó số tiền trong tk lúc này vẫn là 10000 và sau khi thực hiện xong cả 2 tiến trình thì tổng tiền vẫn là 9990 mặc dù đã rút 2 lần. Như vậy race condition đã xảy ra khi mà 1 tiến trình chèn ngang tiến trình khác trong lúc các tham số vẫn chưa kịp cập nhật.
Ở đây mình tạo 1 đoạn code lấy tiền với khá nhiều việc, làm cho thời gian xử lý nó lên tới tận 1,2s và cố thử rút 8 lần mà chỉ bị trừ 10$
B1, kiểm tra tài khoản ban đầu và xem access log , lúc này ta đang có 10000:
B2, Xử dụng 1 đoạn python để cùng 1 lúc gửi 8 request, mỗi request đều rút 10$ trong cùng 1 thời gian và xem kết quả trả về :
Như vậy sau 10 request, tổng tiền chỉ bị trừ 10$ trong khi đã rút đến 8 lần.
B3. Kiểm tra log file ta thấy 8 request này tới cùng lúc. Và bởi vì server phải đòi hỏi đến 1 giây để xử lý 1 giao dịch, do đó 8 request này đã làm xuất hiện race condition và bị chèn ngang lẫn nhau.

Burp suite (part 1)


-----------------------------------------------------
By ktavpro
http://antoanthongtin.wordpress.com/
----------------------------------------------------

Có lẽ tới thời điểm hiện tại burpsuite là công cụ đã rất phổ biến và rất nhiều người thành thạo sử dụng công cụ này. Do đó bài viết của mình chỉ giới thiệu sơ lược tính năng và thực nghiệm áp dụng công cụ này trong hoạt động pentest của mình.
Công cụ có cả bản free và pro (thương mại). Bản pro có tình năng cao cấp hơn là chức năng scan. Tất nhiên bản pro sẽ mất phí nhưng các bạn hoàn toàn có thể kiếm bản đã được cr*ck trên mạng không khó khăn mấy. Mình sẽ đi vào một số tính năng chính của bản free và chức năng scan của Pro
Thiết lập để sử dụng burpsuite
Trước tiên vì burpsuite được viết trên nền java do đó cần có Java Runtime Enviroment để chạy, lưu ý, các bạn nên tải bản jre 6 vì bản 7 mới nhất thì burpsuite lại không tương thích (chuối)
Thiết lập trên trình duyệt để các traffic từ máy sẽ đi qua burpsuite
Intercept Traffic
Thử nghiệm với một page bất kỳ ta có thể thấy traffic sẽ bị chặn tại burp suite trước, ta có thể chọn forward để gói tin đi tiếp hoặc drop để bỏ gói tin, dĩ nhiên thông tin trong traffic chúng ta hoàn toàn có thể thay đổi được trước khi forward
Repeater
Đây là một thành phần rất hữu ích của Burp Suite, nếu bạn cần thử nghiệm thay đổi header nhiều lần thì repeater là những gì mà bạn cần. Từ header chặn được, các bạn click chuột phải và chọn send to repeater, sau đó chuyển sang tab repeater sẽ thấy header mình cần thao tác. Công dụng của repeater là bạn có thể chỉnh sửa header thoải mái rồi chọn Go sau đó đợi header respone để biết server sẽ làm gì với header của mình. Nó đặc biệt hữu dụng vì có thể chỉnh sửa, Go nhiều lần mà không mất công vào lại browser, điền thông tin rồi submit rồi lại chỉnh trong proxy (quá tốn thời gian).
Encode/Decode
Chức năng mã hóa, giải mã của Brup Suite rất tốt, nó hỗ trợ rất nhiều loại mã và giải mã
Brute Force
Brup Suite có thể kiêm chức năng HTTP Authentication Testing với tính năng Intruder. Ví dụ, từ trang login quản trị, mình nhập thông tin bất kỳ là username=admistrator&password=123456. Trong proxy của Brup Suite sẽ thấy
Click chuột phải chọn send to intruder
Trong tab positions,chọn attack type là cluster bomb, bên dưới ta có thấy header với các giá trị được đánh dấu bởi ký tự $, tuy nhiên chúng ta chỉ cần quan tâm đến username và password, do đó trước hết hãy clear $ để bỏ hết đi và chỉadd $ bao quan giá trị của 2 biến mà ta quan tâm (ở đây là administrator và 123456) như hình vẽ.
OK như vậy trong tab payload bên cạnh sẽ có 2 payload set (tương ứng với với biến username và password). Tiến hành nhập giá trị cho biến 1 (username), có thể nhập bằng tay từng giá trị hoặc load file username mà bạn có
Tiến hành nhập giá trị cho biến 2 (password) tương tự biến 1
Từ menu intruder chọn attack
Kết quả
Status là 302 (Found) có nghĩa là username và password không đúng (found chứ không phải OK nhé, các bạn cần để ý cái này). Một số website thì code http khi đăng nhập sai là 302, 401 (access deny). Còn trong trường hợp nhập đúng sẽ là 200 (OK) hoặc 202 (Accepted). Do đó mã 302 thì phải cố gắng tiếp thôi :D
Scanner
Chức năng Scanner chỉ có trong phiên bản Pro, chất lượng scan của Brup Suite là khá tốt, có thể tham khảo thêm tại http://www.sectoolmarket.com/ để có cái nhìn tổng quan chất lượng các công cụ scan
Đặc điểm của brup suite là scan thụ động, chúng ta view site đến đâu nó sẽ scan đến đó, một vài kết quả scan được
Chúng ta cũng có thể cho brup suite scan chủ động một url nào đó qua proxy, chọn actively scan this item
Trên đây là các tính năng chính của Brup Suite, bài viết tới mình sẽ đi sâu vào ứng dụng của Brup Suite trong các trường hợp cụ thể.

Tuesday, 11 December 2012

Website Tin tức Công nghệ và bảo mật




=====Thế giới:


Website Bảo mật



******* Video ******

===== Việt Nam ===


=====Thế giới



Thursday, 6 December 2012

Tài năng Ảo thuật đáng ngưỡng mộ

Đẹp trai - Tài hoa - Không tưởng!
Đó là tất cả những gì tôi có thể nói với anh - Yif.






Lấy cốc kem từ menu:



và nhiều hơn thế nữa.

Tuesday, 4 December 2012

Tập tin Global.asax và web.config trong ASP.Net


Những ai học về WEB ASP.Net thì chắc sẽ biết đến hai tập tin này Global.asax và web.configđây là hai tập tin quản lý và cấu hình ứng dụng trong ASP.Net hôm nay chúng ta sẽ tìm hiểu sơ lược về vấn đề này.
Tập tin Global.asax trong ASP.Net
Tập tin Global.asax được dùng để:
  • Khai báo và khởi tạo giá trị cho các biến Application, Session.
  • Viết xử lý cho các sự kiện của 2 đối tượng Application và Session.
Tập tin Global.asax trong Asp.net
Tập tin Global.asax trong Asp.net
Cấu trúc tập tin Global.asax
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<!--
<%@ Application Language="C#" %>
<script runat="server">
    void Application_Start(object sender, EventArgs e)
    {
        // Code that runs on application startup
    }
     
    void Application_End(object sender, EventArgs e)
    {
        //  Code that runs on application shutdown
    }
         
    void Application_Error(object sender, EventArgs e)
    {
        // Code that runs when an unhandled error occurs
    }
    void Session_Start(object sender, EventArgs e)
    {
        // Code that runs when a new session is started
    }
    void Session_End(object sender, EventArgs e)
    {
        // Code that runs when a session ends.
        // Note: The Session_End event is raised only when the sessionstate mode
        // is set to InProc in the Web.config file. If session mode is set to StateServer
        // or SQLServer, the event is not raised.
    }
</script>
-->
Các sự kiện trong tập tin Global.asax
Application_Start: Chỉ xảy ra một lần đầu tiên khi bất kỳ trang nào trong ứng dụng được gọi. Ứng dụng xây dựng tính năng đếm số người online, truy cập trong website.
1
2
3
4
5
6
7
void Application_Start(object sender, EventArgs e)
{
    // Khai báo đếm số người truy cập
     
    Application["So_luot_truy_cap"] = 0
    Application["So_nguoi_online"] = 0
}
Session_Start: Xảy ra khi có một người dùng mới yêu cầu đến bất kỳ trang aspx của ứng dụng. Khi Session_Start xảy ra, một giá trị duy nhất (SessionID) sẽ được tạo cho người dùng, và giá trị này được sử dụng để quản lý người dùng trong quá trình làm việc với ứng dụng.
1
2
3
4
5
6
7
8
<!--
    void Session_Start(object sender, EventArgs e)
    {
        // Tăng giá trị biến Application
        Application["So_luot_truy_cap"] = (int)Application["So_luot_truy_cap"] + 1;
        Application["So_nguoi_online"] = (int)Application["So_nguoi_online"] + 1;
    }
-->
Application_BeginRequest: Xảy ra khi mỗi khi có Postback về Server.
Sub Application_Error: Xảy ra khi có lỗi phát sinh trong quá trình thi hành.
Session_End: Xảy ra khi phiên làm việc không có gởi yêu cầu hoặc làm tươi trang aspx của ứng dụng web trong một khoảng thời gian (mặc định là 20 phút).
1
2
3
4
5
6
7
<!--
    void Session_End(object sender, EventArgs e)
    {
        // Giảm giá trị biến Application
        Application["So_nguoi_online"] = (int)Application["So_nguoi_online"] - 1;
    }
-->
Qua tập tin Global.asax bạn có thể xây dựng được ứng dụng đếm số người truy cập và người online trong website chúng ta. Ở người online thì dựa vào Session_Start và Session_End mà giảm tăng rồi xuất biến Application ra ngoài trang chủ còn về số lược truy cập thì cứ cộng dồn vào do đó bạn phải ghi vào file text hay vào trong CSDL số lượng đó để biến tăng dần lên theo ngày tháng!
File web.config trong ASP.Net
Web.config là một tập tin văn bản được sử dụng để lưu trữ thông tin cấu hình của một ứng dụng, được tự động tạo ra khi chúng ta tạo mới ứng dụng web. Tập tin web.config được viết theo định dạng XML.
Web.config được tạo kế thừa các giá trị từ tập tin Windows\Microsoft. NET\Framework\[Framework Version]\CONFIG\machine.config
Tập tin cấu hình ứng dụng Web.config:
1
2
3
4
5
6
7
8
9
10
11
12
<!--
<?xml version="1.0"?>
    <configuration>
          <configSections>
                ...........
          </configSections>
          <system.web>
                 ..........
          </system.web>
    </configuration>
-->
Các cấu hình mặc định trong file web.config
1. Set ngôn ngữ và Bật/tắt debug
1
2
3
<!--
     <compilation debug="true"/>
-->
  • defaultLanguage: qui định ngôn ngữ mặc định của ứng dụng. Ở đây là C#
  • debug: Bật/tắt chế độ debug của ứng dụng
2. Cấu hình về lỗi trong file web.config
1
2
3
<!--
<customErrors mode="RemoteOnly"/>
-->
Đây là một cấu hình khá cần thiết cho ứng dụng Web. Hiệu chỉnh cấu hình này cho phép chúng ta quản lý việc xử lý lỗi khi có lỗi phát sinh trong ứng dụng.
  • Thuộc tính mode có các giá trị: RemoteOnly, On và Off.
  • RemoteOnly: Cho phép người dùng thấy thông báo lỗi của hệ thống hoặc trang thông báo lỗi được chỉ định qua defaultRedirect (nếu có).
  • Thông báo lỗi gồm: Mã lỗi và mô tả lỗi tương ứng
1
2
3
<!--
<customErrors mode="RemoteOnly" defaultRedirect="ThongBaoLoi.aspx"/>
-->
  • On: Tức là mode=”On” Tùy theo giá trị của defaultRedirect mà có các trường hợp tương ứng:
ƒCó qui định trang thông báo lỗi qua defaultRedirect: Hiển thị trang thông báo lỗi.
Tùy chọn mode là on se Redirect sang trang Lỗi
Tùy chọn mode là on se Redirect sang trang Lỗi
Không có thuộc tính defaultRedirect: Hiển thị trang báo lỗi nhưng không có hiển thị mã lỗi và mô tả lỗi.
Thông báo lỗi chi tiết khi không khai báo trong web config
Thông báo lỗi chi tiết khi không khai báo trong web config
3. sessionState
1
2
3
4
5
6
7
8
9
<!--
<sessionState 
   mode="InProc"
   stateConnectionString="tcpip=127.0.0.1:42424"
   sqlConnectionString="data source=127.0.0.1;
   Trusted_Connection=yes"
   cookieless="false" 
   timeout="20" />
-->
  • mode: Thuộc tính này có 3 giá trị: InProc, sqlserver (lưu trong database), và stateserver (lưu trong bộ nhớ)
  • stateConnectionString: Cấu hình địa chỉ và cổng (port) của máy để lưu trữ thông tin của Session trong vùng nhớ (nếu chức năng này được chọn).
  • sqlConnectionString: Cấu hình kết nối đến SQL Server được dùng để lưu thông tin Session (nếu chức năng này được chọn).
  • cookieless: Nếu giá trị của thuộc tính này = True, thông tin cookie sẽ được lưu trữ trong URL, ngược lại, nếu = False, thông tin cookies sẽ được lưu trữ tại client (nếu client có hỗ trợ)
  • timeout: Khoảng thời gian (tính bằng phút) mà đối tượng Session được duy trì. Sau khoảng thời gian này, đối tượng Session sẽ bị huỷ. Giá trị mặc định của thuộc tính này là 20.
Kết luận: Đây chỉ là vài phần cơ bản, còn rất nhiều thư nữa trong hai file này, thất ra thì trong bài Login not Database chúng ta đã có sử dụng file web.config này rồi hôm nay làm rõ hơn một tí! :)OK, vậy là xong bài này chúng ta có thể xây dựng tính năng hiển thị số người truy cập và số người online trong web asp.net ngoài ra còn biết cách cấu hình cơ bản trong file web.config! Chúc thành công!
Nguồn: Giáo trình ASP.Net Đại học khoa học tự nhiên TP.HCM