At Deepwatch, " Empowering Your Digital Defense, Ensuring Your Peace of Mind"

Day: March 1, 2024

Understanding HTTP Authentication Basic and Digest

Understanding HTTP Authentication Basic and Digest

HTTP authentication uses methodologies via which web servers and browsers securely exchange credentials like usernames and passwords. HTTP authentication or we can also call it as Digest Authentication follows the predefined methods/standards which use encoding techniques and MD5 cryptographic hashing over HTTP protocol. In this article, we are covering the methodologies/standards used for HTTP Authentication. For the sake of understanding, we will be using our php scripts that will simply capture user name and passwords and we will generate the Authorization value as per the standards. For http codes visit here Basic Access Authentication using Base 64 Encoding In basic Authentication, we will be using base 64 encoding for generating our cryptographic string which contains the information of username and password. Please note we can use any of the encoding techniques like URL, Hexadecimal, or any other we want. The below example illustrates the concept, we are using Burpsuite for capturing and illustrating the request. The webpage is asking for input from the client We are providing “hackingarticles” as User Name and “ignite” as a password. The syntax of Basic Authentication Value = username:password Encoded Value =  base64(Value) Authorization Value = Basic <Encoded Value>  In basic authentication username and password are combined into a single string using a colon in between. Value =  hackingarticles:ignite This string is then encoded using base 64 encoding. Encoded Value = base64 encoded value of hackingarticles:ignite which is aGFja2luZ2FydGljbGVzOmlnbml0ZQ== Finally, the Authorization Value is obtained by putting the text “Basic” followed by <space> before the encoded value. (We can capture the request using burpsuite to see the result) The Authorization Value for this example is “Basic aGFja2luZ2FydGljbGVzOmlnbml0ZQ==“. This is the value which is sent to the server.   Finally, the server is decrypting the authorization value and returning the entered credentials Basic Authentication is a less secure way because here we are only using encoding and the authorization value can be decoded, In order to enhance the security we have other standards discussed further. RFC 2069 Digest Access Authentication Digest Access Authentication uses the hashing methodologies to generate the cryptographic result. Here the final value is sent as a response value. RFC 2069 authentication is now outdated now and RFC2617 which is an enhanced version of RFC2069 is being used.  For the sake of understanding the syntax of RFC 2069 is explained below. Syntax of RFC2069 Hash1=MD5(username:realm:password) Hash2=MD5(method:digestURI) response=MD5(Hash1:nonce:Hash2) Hash1 contains the MD5 hash value of (username:realm:password) where the realm is any string provided by server and username and passwords are the input provided by the client. Hash2 contains the MD5 hash value of (method:digestURI) where a method could be got or post depending on the page request and digestURI is the URL of the page where the request is being sent.  the response is the final string which is being sent to the server and contains the MD5 hash value of (hash1:nounce:hash2) where hash1 and hash2 have generated above and nonce is an arbitrary string that could be used only one time provided by the server to the client. RFC 2617 Digest Access Authentication RFC 2617 digest authentication also uses MD5 hashing algorithm but the final hash value is generated with some additional parameters Syntax of RFC2617 Hash1=MD5(username:realm:password) Hash2=MD5(method:digestURI) response=MD5(Hash1:nonce:nonceCount:cnonce:qop:Hash2) Hash1 contains the MD5 hash value of (username:realm:password) where realm is any string Provided by server and username and passwords are the input provided by the client. Hash2 contains the MD5 hash value of (method:digestURI) where a method could get or post depending on the page request and digestURI is the URL of the page where the request is being sent.  the response is the final string which is being sent to the server  and contains the MD5 hash value of (Hash1:nonce:nonceCount:cnonce:qop:Hash2) where Hash1 and Hash2 are generated above and for more details on other parameters refer to ” https://technet.microsoft.com/en-us/library/cc780170(v=ws.10).aspx” The actual working of RFC2617 is described below The webpage is asking for input from the client We are providing “guest” as User Name and “guest” as a password. Through burpsuite, we are capturing the request so that all the parameters could be captured and we can compare the hash values captured with the hash values that we will generate through any other tool (hash calculator in this case). We have captured the values for the following parameters realm=”Hacking Articles”, nonce=”58bac26865505″, uri=”/auth/02-2617.php”, opaque=”8d8909139750c6bd277cfe1388314f48″, qop=auth, nc=00000001, cnonce=”72ae56dde9406045″ , response=”ac8e3ecd76d33dd482783b8a8b67d8c1″, Hash1 Syntax=MD5(username:realm:password) hash1 =  md5(guest:Hacking Articles:guest) The MD5 hash value is calculated as 2c6165332ebd26709360786bafd2cd49 Hash2 Syntax =MD5 (method:digestURI) Hash2=MD5 (GET:/auth/02-2617.php) MD5 hash value is calculated as b6a6df472ee01a9dbccba5f5e6271ca8 response Syntax =  MD5(Hash1:nonce:nonceCount:cnonce:qop:Hash2) response = MD5(2c6165332ebd26709360786bafd2cd49:58bac26865505:00000001:72ae56dde9406045:auth:b6a6df472ee01a9dbccba5f5e6271ca8) MD5 hash is calculated as  ac8e3ecd76d33dd482783b8a8b67d8c1 Finally, the response value obtained through the hash calculator is exactly the same as that we have captured with burp suit above.  Finally, the server is decrypting the response value and the following is the result

Read More
Understanding Encoding (Beginner’s guide)

Understanding Encoding (Beginner’s guide)

This article will describe the different types of processes involved in encoding of data. The term encoded data means wrapped data and the process of encoding is used to transform the data into a different format so that it can be easily understood by different types of systems. For example, ASCII characters are encoded through numbers ‘A’ is represented with 65, whereas ‘B’ with 66 and so on. As we know computers do not understand human languages therefore we need to encode the data into binary language which is easily readable by computer systems hence encoding is very important. It utilises such schemes that are widely available so that it can simply be reversed. Encoding means data transformation, not data encryption consequently it does not need a key in decoding. URL Encoded The internet only accepts URL’s in ASCII format, URL encoding entails encoding certain parts of the URL character set. This process takes one character and converts it into a character triplet that has a prefix of “%” followed by two digits in hexadecimal format.  Character Encoded : %3A / %2F # %23 ? %3F & %24 @ %40 % %25 + %2B <space> %20 ; %3B = %3D $ %26 , %2C <  %3C >  %3E ^ %5E ` %60 %5C [ %5B ] %5D { %7B } %7D | %7C “ %22 Example : Original URL: http://www.hackingarticles.in Encoded URL: http%3A%2F%2Fwww.hacking articles.in  Hexadecimal Hexadecimal or Base 16 is a positional number system which consists of 16 distinct symbols which range from 0 to 9 in numerals and both upper and lowercase alphabets which range from A to F which represent numeric values 10 to 15 Step 1 – is to get the decimal value of an alphabet, this is different for both upper and lower case, eg: A = 65 and a = 97. To find the value of any alphabet, we count down to it from ”A” or “a”, the values are in single-digit succession, eg: A = 65 B = 66 C = 67 and so on / a = 97 b = 98 c = 99 and so on. Step 2 – To convert from decimal to hexadecimal, take the decimal value and divide it by 16, the hex value will be written beginning from the quotient all the way up to the remainder. So, the hex value of 97 will be 61. Eg: 16 97 1   6 6 Source R a j Decimal Value 82 97 106 Hexadecimal value 52 61 6a  Base64 Each base64 digit represents exactly 6 bits of data.Is a radix-64 representation of ASCII string, here’s how we get it?  Step 1 – is to get the decimal value of an alphabet, this is different for both upper and lower case, eg: A = 65 and a = 97. In order to find the value of any alphabet, we count down to it from”A” or “a”, the values are in single digit succession, eg: A = 65 B = 66 C = 67 and so on / a = 97 b = 98 c = 99 and so on. Step 2 – is to divide the decimal value by 2, where ever there is a reminder it is denoted as “1” and wherever the remainder is “0”, it is denoted as “0”, continue to divide till you reach 0 or 1 and cannot divide any further. The binary value will be the denoted 1’s and 0’s counted from last to first. Eg: To get an 8-bit value we prefix a “0” to the value, eg: 01010010 and this gives us the binary value of “a”. 2 97 1 2 48 0 2 24 0 2 12 0 2 6 0 2 3 1   1 1 Step 3 – Write the values of all the characters in binary and make pairs of 6 (6-bit), eg: the binary value of “Raj” in 8-bit = 010100 100110 000101, a binary value of “Raj” in 6-bit = 010100 100110 000101 101010. Step 4 – Write the 6-bit decimal value of the pairs we make in Step 3 and add all the values where we have 1’s 32 16 8 4 2 1   0 1 0 1 0 0 20 1 0 0 1 1 0 38 0 0 0 1 0 1 5 1 0 1 0 1 0 42 Step 5 – Use the Base64 table to lookup the values we get in Step 4. The Base64 index table: Value Char   Value Char   Value Char   Value Char 0 A 16 Q 32 g 48 w 1 B 17 R 33 h 49 x 2 C 18 S 34 i 50 y 3 D 19 T 35 j 51 z 4 E 20 U 36 k 52 0 5 F 21 V 37 l 53 1 6 G 22 W 38 m 54 2 7 H 23 X 39 n 55 3 8 I 24 Y 40 o 56 4 9 J 25 Z 41 p 57 5 10 K 26 a 42 q 58 6 11 L 27 b 43 r 59 7 12 M 28 c 44 s 60 8 13 N 29 d 45 t 61 9 14 O 30 e 46 u 62 + 15 P 31 f 47 v 63 /  The Base64 encoded value of Raj is UmFq. Encoded in ASCII, the characters R, a, and j are stored as decimal values 82, 97, and 106, their 8-bit binary values are 01010010, 01100001, and 01101010. These three values are joined together into a 24-bit string, producing 010100100110000101101010. Groups of 6 are converted into individual numbers from left to right. While converting from 8-bit to 6-bit, 0’s are added to fill the last slots, so that a full pair of 6 can be made. The full conversion of “Raj” to Base64 is shown in Table 1.1 and the individual conversion of “R” and “Ra” of “Raj” are shown in Tables 1.1 and 1.2 to show a breakdown of the process with explanation Raj                                               82 97 106                             01010010 01100001 01101010 In the Table 1.2, for character “R” of “Raj”, the

Read More
× Live Chat