banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Messages posted by: WinDak  XML
Profile for WinDak Messages posted by WinDak [ number of posts not being displayed on this page: 0 ]
 
smilie) bác ấy doạ thôi, đã khoá đâu mà rít lên thế

cái đoạn code đó là javascript, bạn học tìm hiểu thêm 3 dòng code của nó


m='...'
d=unescape(m);
document.write(d);
 

là làm cái gì, rồi tìm cách tháo gỡ
Mình vào [Recent Topics] cũng bị
Errcode: 28 

Partition /tmp của server full rồi
Ok quanta,
Vừa test thử trên máy thì thấy đúng là sed không hiểu \w ... (smilie xấu hổ ) version = perl thì mình test trên máy rồi smilie

Còn về tổng quát thì ý mình là phải đầy đủ syntax của URI. của secmask chỉ là loại `"` và "]" ra khỏi match nên vẫn có những giả định.

quanta wrote:

WinDak wrote:

Có lẽ tại phần lấy tham số match đầu tiên ra quanta xài (.*) cho nên nó sẽ quét đến cuối string lấy tất cả vào ( bao gồm cả `"` ).
 

OK, cảm ơn WinDak. Mình nhớ là có đọc cái rule "leftmost match, longest possible string, zero also matches." này rồi, thế mà lại quên mất.

WinDak wrote:

thử giới hạn lại thành ([\w\/\:\.]*) hi vọng sẽ ra kết quả đúng 

Cái regex này cũng chưa đúng bạn à. Thôi thì dùng cách của secmask cho tổng quát, hoặc thế này ([a-z0-9:\/\.#]*) cũng được. 


cái đó sao lại tổng quát smilie smilie a-z0-9 làm sao = \w ? ( \w còn gồm cả letters, digits, và underscores)

đúng là phải thêm # nữa, nhưng vẫn chỉ là assume là gồm những cái này thôi ( cho là bbcode đã tự check ), chứ thật sự url mà muốn match chuẩn thì phức tạp phết smilie

Code:
(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?

http://regexlib.com/Search.aspx?k=URL

quanta wrote:
Các bạn giúp mình tìm xem sai ở đâu mà khi có ngoặc kép bao quanh link thì lệnh sau trả về kết quả không đúng (thừa ra một dấu ngoặc kép):

Code:
$ cat input
[url="/hvaonline/posts/list/136.html"]GRUB[/url]
[url=/hvaonline/posts/list/136.html]GRUB[/url]

Code:
$ sed 's/\[url="\?\(.*\)"\?\]\(.*\)\[\/url\]/<a href="\1" target="_blank">\2<\/a>/' input


<a href="/hvaonline/posts/list/136.html"" target="_blank">GRUB</a>
<a href="/hvaonline/posts/list/136.html" target="_blank">GRUB</a>
 
 


Có lẽ tại phần lấy tham số match đầu tiên ra quanta xài (.*) cho nên nó sẽ quét đến cuối string lấy tất cả vào ( bao gồm cả `"` ). thử giới hạn lại thành ([\w\/\:\.]*) hi vọng sẽ ra kết quả đúng
Đây là bằng perl, mình chỉ nghịch chút nên chưa cẩn thận lắm, (giả sử cái bbcode là correct và giả sử cái link trong url="" là link gồm a-zA-Z0-9\/. còn nếu có cái khác thì cứ tiện nghi thêm vào thôi)

Code:
perl -e 'shift=~/\[url=\"*([\w\.\/\:]+)\"*\](.+)\[\/url\]/; print "\<a href=\"$1\" target=\"_blank\"\>$2\<\/a\>\n";' "[url=/hvaonline/posts/list/136.html]Sử dụng GRUB[/url]"


Code:
perl -e 'shift=~/\[url=\"*([\w\.\/\:]+)\"*\](.+)\[\/url\]/; print "\<a href=\"$1\" target=\"_blank\"\>$2\<\/a\>\n";' '[url="/hvaonline/posts/list/136.html"]Sử dụng GRUB[/url]'


Code:
<a href="/hvaonline/posts/list/136.html" target="_blank">Sử dụng GRUB</a>
Về vấn đề trên có thể dùng od cũng được :
Code:
od -c [binary file]
od -t c [binary file]


hoặc xài perl
Code:
perl -e 'print "\x50\x4F\x53\x54";'


Cảm ơn anh seamon đã viết bài này. Hi vọng sẽ hiểu biết được thêm những công cụ mà industry đang sử dụng để QA code
cái này chỉ xài cho window hồi còn trên nền DOS thôi ( win95/98/ME ?!? ), giờ không sử dụng được nữa rồi
smilie) ok anh, lão gamma nghịch thế smilie làm hôm qua mình tưởng thèng nào vào server của hva tiếp nên cay cú tí ... mà đúng là passhash cũ của em search google cũng ra huhu

conmale wrote:

WinDak wrote:
Vậy nhờ lão gamma giải thích tại sao lão lấy được password của tôi  


Dễ thôi em. Em bị gamma giơ mồi ra nên em "cắn" mà cắn rồi thì có thể bị mất passhash. Nếu password của em đơn giản quá thì brute ra 1 cái 1 hay là google thử cái hash không chừng cũng có luôn pass thiệt, khỏi brute smilie.

Đừng đặt password quá đơn giản


pass này đã đặt từ rất lâu rồi anh, vì nick em ở hva cũng không có gì quan trọng nên cũng chẳng bao giờ đổi. có điều vẫn chưa nhận ra là bị mất session vào lúc nào vì thường không bao giờ click link bậy, trừ khi có cái iframe hay embedded media nào đó mà mình không notice được
Vậy nhờ lão gamma giải thích tại sao lão lấy được password của tôi
Lão này còn gửi cả password của mình vào pm của mình .. làm cứ tưởng có đứa nào hack vào cả server.

Mà như vậy cứ admin thì biết pass của member à ? Thật là phi lí hết sức.

Sigh.. cũng may là không phải bị hack thật
gamma bị hack mất nick rồi

ZeroZen wrote:

Code:
package encaps;
public class Calculator {
public void add(int a, int b){
int c = a + b;
System.out.println(a + " add " + b + " - Result: " + c);
}
}


Tạo đối tượng User sử dụng lại method add() của Calculator nhưng không biết cách thức xử lý của method add().

Code:
package encaps;
public class User {
public static void main(String[] args) {
Calculator cal = new Calculator();
cal.add(10, 20);
}
}


Kết quả ta có:
Code:
10 add 20 - Result: 30


Trên đây là những j mình hiểu về Encapsulation, nếu có sai sót j thì mong mọi người góp ý giùm. 


Theo mình hiểu encapsulation như thế này vẫn chưa hoàn chỉnh.

Trong Java khái niệm encapsulation thường ám chỉ đến attribute của đối tượng được che dấu sử dụng private, và nó chỉ được tiếp cận thông qua setter và getter (Mutator method). Điều này đảm bảo coder không thể thay đổi các attribute đến các giá trị không được quy định
Để grep xxx ở cuối cũng dễ chịu hơn (tiện tay hơn), vì muốn tìm thông tin gì khác( thay đổi expression của grep ) thì có thể thay đổi ngay điểm end của con trỏ, thay vì phải move nó tới vị trí ở giữa

dowhile13 wrote:
Mình có đọc tài liệu thế này: khi A muốn gửi gói tin cho B,khi đó A sẽ dùng khoá của mình để khoá lại,sau đó gửi cho B,khi B nhận được thì củng dùng khoá của mình khoá gói tin đó lại luôn,vậy là lúc này gói tin có 2 khoá và gửi lại cho A,khi A nhận được thì dùng khoá của mình để mở khoá,khi đó gói tin chỉ còn khoá của B. Khi đó A gửi gói tin lại cho B,khi đó B nhận gói tin và dùng khoá của mình để mở và đọc được nội dung gói tin.
Như thế không biết có đúng không nửa,mong các anh cho em xin vài ý kiến thêm. Em xin cảm ơn. 


Thật ra mình nghĩ đây là một điều trong lý thuyết của trao đổi key.

Tưởng tượng nếu 1 cái hòm có thể có 2 ổ khóa:

Code:
- A khóa hòm với khóa A, rồi gửi hòm đến cho B
- B khóa hòm với khóa của B rồi gửi lại A
- A cởi khóa của A ra và gửi lại hòm
- B nhận hòm chỉ bị khóa bởi khóa của B => mở được hòm.


Lý thuyết này trên thực tế cỏ thể làm được nếu có 1 phương pháp Encryption đảm bảo
E( E(P,ka) , kb) = E ( E(P,kb), ka ). Đối chiều với phương thức trên sẽ thấy sự hợp lý.

Nhưng có phương pháp nào như vậy hay không thì mình không chắc, mình chỉ nghĩ ra được 1 cách đơn giản như sau dựa trên diffi-hellman protocol :

*** Nhận xét thấy (P^x)^y = (P^y)^x
*** Giả xử có 1 thuật toán tốt và chính xác D ( A^x, x ) = A. thì ta có:
Code:
A tính E( P , ka ) = P^ka gửi cho B
B tính E( E(P,ka) , kb ) = P^ka^kb gửi lại cho A
A tính D( P^ka^kb, ka ) = P^kb gửi lại cho B
B tính D( P^kb, kb ) ==> ta có kết quả P.


Phương pháp trên dĩ nhiên có cái "giả xử" và có nhiều lỗ hổng. Diffi-Hellman key exchange protocol tối ưu hơn giúp bạn có thể có key mà không cần trao đổi cho nhau biết.

Có thể đọc thêm ở đây để rõ hơn phương pháp này : http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange

Các bác ấy vẫn ở bên này mà ... http://reaonline.net/

comale wrote:

Hãy bắt đầu bằng câu hỏi: theo bạn, trong năm 2010 dạng tấn công nào phổ biến nhất trên Internet và lý do tại sao?
 


Không biết ý anh conmale là hỏi năm tới hay năm nay... thấy ai cũng trả lời năm tới trong khi anh hỏi 2010
"Thuần tuý peer-to-peer" là thế nào nhỉ... tớ đã nói là peer-to-peer có nhiều loại
Nếu như mô hình bạn nói có vẻ như là decentralized

Mình nghĩ đầu tiên bạn nên tìm hiểu 2 cái sau trên omnetpp :

1) Trao đổi file giữa 2 máy khi định vị được nhau ( qua IP / hostname etc..)

2) Chọn cách 5 máy nối với nhau và tìm thông tin: ( tuỳ yêu cầu có cần scalable hay không )
- Kiểu broadcast : mỗi máy có thông tin định vị của 4 máy còn lại => khi cần 1 file gì thì sẽ search file đó bằng cách gửi request đến tất cả các máy và chờ response.
- Kiểu routing: một máy chỉ có thông tin của 1->2 máy khác. khi cần thì route một msg đi các máy khác đến khi có máy trả lời với file cần tìm hoặc timeout không tìm thấy.
..
Bạn nên tìm đọc quyển "Distributed Systems: Concepts and Design"

Peer-to-Peer của bạn là loại nào ?
Structured ? Unstructured ? Centralized, Decentralized hay Hybrid ?
Hic,

đưa ra "uy tín" , "đúng đắn" mà chả có cái ví dụ nào ra hồn thì người ta gọi là "chém gió"
Cũng không hiểu cái bạn nói là gì, có tên tiếng Anh thì tốt.
Mình đoán có thể là bạn đang nói đến one-time password (vì mật mã có thể dịch là password), password sẽ được generate mỗi phiên đầu authentication rồi sau đó sẽ bị xóa khỏi hệ thống

http://en.wikipedia.org/wiki/One-time_password

zjm_zjm wrote:
mov AL, [BX]

==> Ví dụ BX có địa chỉ 100h và chứa giá trị 21h

câu lệnh trên nó sẽ đưa địa chỉ BX vào AL, và bây h AL sẽ trỏ về 100h và có giá trị 21h

mov AL, [ BX + SI ]

Ví dụ
BX có địa chỉ là 100h
SI có địa chỉ là 054h

Nó sẽ cộng tổng 2 địa chỉ lại và đưa vào AL

Không biết có đúng không :-s



 

Sai lầm cơ bản rồi, "AL trỏ về" và "AL có giá trị" là thế nào ?

Đọc quyển "The Art of Assembly Language Programming"

http://www.arl.wustl.edu/~lockwood/class/cs306/books/artofasm/toc.html - Chapter 4
- SI, DI thì cũng chỉ là register (tìm hiểu xem register này thường làm gì ?!)

mov AL, [ BX + SI ]
vs
mov AL, [BX]

khác gì nhau ? Bạn thấy trừu tượng ở chỗ nào ? Thử tìm hiểu thêm về các addressing mode của x86
Mình nghĩ thay vì ở đây bạn hãy tìm hiểu và tham gia thảo luận trên nhiều topic về "mật mã", khi đó không cần yêu cầu thì các anh admin cũng sẽ open box mới mà thôi.

panfider wrote:
Không biết dạo này mất hứng lập trình rùi sao ấy, gần như không còn muốn lập trình nữa hay tìm hiểu thêm smilie
mình nghĩa mình có cycle lập trình, nếu mất nhịp nào đó gần như không muốn lập trình nữa hoặc có viết thì cũng rất khó viết, ví dụ như bài code C trong mục *nix gần đây cho thấy khả năng suy nghĩa không sáng suốt nữa.
Việc tìm hiểu kernel hay trình biên dịch không có tiến triển vì mã kernel nhiều quá, nghiên cứu tốn nhiều thời gian bắt đầu mà không được gì smilie
Không biết ai có hứng thú gì với kernel hay lập trình, cần share để tăng thêm ý thức nghiên cứu lập trình.
Hãy nói cho mình nghe ý nghĩa lập trình, khoa học máy tính có ý nghĩa gì ? smilie  


bạn học lập trình được bao lâu rồi ?

Công cụ sẽ không có ý nghĩa gì nếu bạn không trả lời được là sử dụng nó vào mục đích gì. Thử tìm 1 mục đích và đánh giá xem mình đã đạt được mục đích chưa ? mình đã được bao nhiêu % ?
Nếu có mục đích mà còn "mất hứng"... thì chỉ có 1 lời khuyên :"vạn sự khởi đầu nan" có quyết tâm mới có thắng lợi cuối cùng.
Bạn đã cài perl chưa ? mình không rành về honeyd nhưng nhìn log thì thấy có lỗi file perl
wind@k viết bài này với mong muốn chia sẻ thông tin cho các bạn có khó khăn trong việc tìm hiểu kỹ thuật này (do tiếng Anh hay lí do gì khác) đồng thời cũng là để học hỏi tự mình hiểu thêm vấn đề. Nói chung đây không phải là một kỹ thuật khó như nhiều bạn nghĩ, quan trọng là động não và lúc nào cũng suy nghĩ !!!

Phần 1: Căn bản về kỹ thuật mã hoá (cryptography)
Mã hoá nôm na là một số phép biến đổi trên dữ liệu nhằm làm cho dữ liệu đó biến dạng và không đọc được bởi những người không được phép đọc (người không có key để giải mã). Mã hoá có thể phân 2 loại :
- symmetric (đối xứng) : D(E(P,k),k) = P.
Ví dụ: thuật toán mã hoá DES, AES, Caesar http://en.wikipedia.org/wiki/Caesar_cipher):
Code:
E( P , k ) = C sao cho C[i] = (P[i] + k) % 26;
D(C, k) = P sao cho P[i] = (C[i] - k)%26;

- asymmetric/ public-key : D( E(P,d), e) = P.
Ví dụ: RSA - http://en.wikipedia.org/wiki/RSA
( E = hàm mã hoá, D = hàm giải mã
P = dữ liệu chưa mã hoá (plain text), C= dữ liệu đã mã hoá(cypher text)
k = key, d = public key, e = private key
d!=e )

Trong thực tế hàm mã hoá và giải mã thường lấy input là một block <=> 1 khối dữ liệu có độ dài nhất định ( 4-bytes, 8-bytes, 16-bytes v.v..). Vì vậy với 1 đoạn dữ liệu có độ dài lớn, người ta thường chia nó thành các đoạn nhỏ (trùng với độ dài input của thuật toán mã hoá) và mã hoá lần lượt.

Kỹ thuật mã hoá lần lượt từng block riêng lẻ rồi nối lại gọi là Electronic Codebook (ECB). Kỹ thuật này không an toàn vì nếu 2 đoạn input giống nhau sẽ cho ra 2 đoạn output giống nhau làm lộ pattern/hình dạng của dữ liệu. (Xem thêm ở http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29)

Một kỹ thuật khác tăng cường tính bảo mật đó là Cypher Block Chaining (CBC). Sử dụng đoạn mã hoá của block trước, trong quá trình mã hoá. Cụ thể:
Code:
C[i] = E( P xor C[i-1], k )
C[0] = IV ( initial vector <=> 1 giá trị bất kì nào đó )
giải mã như sau:
P[i] = D( C[i], k ) xor C[i-1]





Vì đoạn dữ liệu được tách ra trong quá trình mã hoá, sẽ sảy ra trường hợp block cuối cùng sẽ ngắn hơn kích thước (size) cần, trong trường hợp này người ta sẽ thêm vào sau một số kí tự, kỹ thuật này gọi là PADDING. Cách thức padding là thêm vào sau N kí tự N, với N là phần khác nhau giữa size hiện tại của block và size tiêu chuẩn.

Ví dụ block size cần là 8 bytes, block cuối chỉ có 3 bytes : "AAA" => thêm vào thành "AAA\x05\x05\x05\x05\x05"




Phần 2: Padding Oracle Attack:
Như ở phần trước mình đã trình bày kỹ thuật CBC và Padding, đây là 2 mấu chốt quan trọng trong padding oracle attack.

Tưởng tượng trường hợp A connect đến server B và gửi 1 encrypted message với key thoả thuận từ trước và sử dụng CBC, trên B sẽ có 1 ứng dụng (app) làm những nhiệm vụ sau
1) nhận cypher text
2) decrypt cypher text => plain text
3) kiểm tra định dạng plain text, nếu padding không đúng => return ER_PADDING
4) đọc dữ liệu trong plain text => return SOMTHING_ELSE

Giả sử attacker bằng 1 cách nào đó có được đoạn encrypted msg (C) này, kỹ thuật Padding oracle có thể decrypt đoạn C mà không cần key cũng như thông tin về thuật toán mã hoá

Mấu chốt của PO là ở bước (3). Attacker sẽ gửi 1 đoạn encrypt message đến B và chờ return message, nếu return là SOMETHING_ELSE thay vì ER_PADDING thì attacker sẽ giải mã được ít nhất 1 byte của đoạn C. Cụ thể, thuật toán giải mã những byte cuối cùng của C trình bày trong paper của Serge Vaudenay như sau :

Code:
// b = block size; ^: phép xor; y = block cuối của cypher text ;
// O( S ) = 1 nếu nhận được SOMETHING_ELSE
1) chọn một vài random byte r[1] , . . . , r[b] and take i = 0
2) r = r[1]| . . . r[b−1]|(r[b] ^ i)
3) if O(r|y) = 0 then i++, trở lại bước 2
4) r[b] = r[b] ^ i
5) for n = b down to 2 do
(a) chọn r = r[1]| . . . |r[b−n]| (r[b−n+1] ^ 1)r[b−n+2] . . . r[b]
(b) if O(r|y) = 0 then stop and output (r[b−n+1] ^ n) . . . (r[b] ^ n)
6.) output rb ^ 1


Tư tưởng chủ đạo của thuật toán trên như sau:
- Ở bước 1 và 2, tác giả chọn ngẫu nhiên một đoạn dữ liệu có kích cỡ = 1 block size, và gọi nó là R
- Y là block cuối cùng của cypher text
- Khi Attacker gửi message gồm ( R | Y ) tức 2 block đến server, app sẽ giải mã ra P[0..1] như sau:
P[1] = D( Y, key ) xor R
P[0] = D( R, key ) xor IV

- Khi đó server sẽ kiểm tra định dạng của P[1], nếu những byte cuối cùng không có định dạng của 1 padding (xem phần 1) thì server sẽ trả ra ER_PADDING, nghĩa là O(R|Y) =0


còn ngược lại những byte cuối của P[1] sẽ có dạng ____1, ___22, __333, __444 v.v...



Giả sử nó là ____1 thì :
Code:
____1 = D(Y, key) xor R
==> D(Y,key) = _____1 xor R
==> D(Y, key)[b] = R[b] xor 1
==> P[last][b] = R[b] xor 1 xor C[last-1]
==> giải mã được byte cuối cùng không cần key.

(đối với 22,333,444 thì sao ??)

- Vấn đề còn lại là làm sao biết được nó ở dạng ___1,___22 hay __333 dù trong đa số trường hợp mà wind@k test thì toàn là ra ___1 vì mình chọn R ngẫu nhiên. Dù vậy thuật toán của tác giả có thể giúp ta biết được điều đó bằng việc detect ở bước (5). ( smilie mọi người thử động não lí giải nhé smilie )

Sau khi có được một vài byte ở cuối, nhiệm vụ còn lại là lấy được toàn bộ phần còn lại của block, thuật toán sau của tác giả làm điều đấy:

Code:
// Giải sử tìm được D( y[j..b] , key ), gọi nó là a[j]..a[b], y là block cần giải mã
1) chọn r[k] = a[k] ^ (b − j + 2) for k = j, . . . , b
2) chọn r[1] , . . . , r[j−1] at random and take i = 0
3) r = r[1] . . . r[j−2] (r[j−1] ^ i) r [j] . . . r[b]
4) if O(r|y) = 0 then i++ ; trở lại bước 3
5) output r[j−1] ^ i ^ (b − j + 2)


Tư tưởng tương đối giống thuật toán 1, chỉ có bước (1) là quan trọng. Ngoài ra nó không chỉ có thể giải mã last block như trên mà còn có thể lấy tư tưởng để giải được tất cả, ngoại trừ block đầu tiên!!!!

(Tại sao lại thế mọi người cũng thử tự lý giải nhé smilie ?)

Khi nào có thời gian mình sẽ dịch và giải thích bài về CBC-R của anh mrro, giải thích nốt những phần còn lại ( dĩ nhiên là chỉ khi mọi người hưởng ứng smilie )

Thân
wd.


// Bài viết được tham khảo, lược dịch Wikipedia + "Security Flaws Induced by CBC Padding – Applications to SSL, IPSEC, WTLS ...Serge Vaudenay" và có thêm một số giải thích từ bản thân mình
(update picture from anh mrro 's link)

mrro wrote:

về PO với CBC-R thì anh có nói từ khá lâu đây là kỹ thuật rất hay, và cũng là đóng góp lớn nhất của báo cáo Practical Padding Oracle Attacks, dẫu vậy cho đến giờ vẫn chưa thấy ai nói gì đến nó :-p. nên nếu em muốn hỏi hay thảo luận gì thêm thì cứ qua cái topic về POET mà hỏi nha. tài liệu về CBC-R thì em đọc trong báo cáo kia là đủ (chọn đọc phiên bản trình bày ở USENIX cho dễ). trong đó tụi anh mô tả rất rõ những ý tưởng chính của CBC-R.
 


smilie Thanks anh mrro đã giải thích ở topic /hvaonline/posts/list/20/35832.html#quick.

Mấy hôm nay cũng đọc tương đối kha khá. Hồi sáng cũng viết thử 1 cái tool crack simple encryption bằng PO... hôm nào để lên cho mọi người nghịch. Chỉ có là em thấy trở ngại lớn nhất của cả PO và CBC-R là phần IV, không thể control được.

Do đó nếu IV là secret value + blocksize lớn ( cỡ 128-bit trở lên) thì PO cũng vô hiệu. Đối với CBC-R thì nếu first block = header, block size lớn + limit length of cypher text thì cũng khó khăn rất nhiều để khai thác. Không biết anh thấy thế nào

 
Go to Page:  First Page 1 2 3 5 6 7 Page 8 Last Page

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|