1 giu 2023

Ettercap: Man In The Middle (MITM)


"Ettercap is a suite for man in the middle attacks on LAN. It features sniffing of live connections, content filtering on the fly and many other interesting tricks. It supports active and passive dissection of many protocols (even ciphered ones) and includes many feature for network and host analysis." read more...


Website: http://ettercap.sourceforge.net

More info

  1. Hacker Techniques Tools And Incident Handling
  2. Hacker Tools List
  3. Hacking App
  4. Hacker Tools Software
  5. Hacking Tools Windows
  6. Hack Apps
  7. Hacking Apps
  8. Hackers Toolbox
  9. Hacker Tools 2020
  10. How To Hack
  11. Hacker Tools Github
  12. Android Hack Tools Github
  13. Hacker Tools
  14. Hacking Tools Online
  15. Pentest Tools Tcp Port Scanner
  16. Pentest Tools For Windows
  17. Pentest Tools For Mac
  18. Pentest Tools Website Vulnerability
  19. Bluetooth Hacking Tools Kali
  20. Hacker Tools Linux
  21. Physical Pentest Tools
  22. Hack Tools Online
  23. Hacker Tools Free
  24. Hacker Tools Apk
  25. Pentest Tools Windows
  26. Bluetooth Hacking Tools Kali
  27. Beginner Hacker Tools
  28. Pentest Tools Tcp Port Scanner
  29. Hacking Tools Usb
  30. Hacker Tools Hardware
  31. Hacker
  32. Hacking Tools Windows 10
  33. Pentest Tools For Ubuntu
  34. Hacking Tools Kit
  35. Best Pentesting Tools 2018
  36. Pentest Tools Port Scanner
  37. Hacking Tools Free Download
  38. Pentest Tools Framework
  39. Tools For Hacker
  40. Physical Pentest Tools
  41. Pentest Tools
  42. Hacking Tools Kit
  43. Hacking Tools For Kali Linux
  44. Hacking Tools For Beginners
  45. Nsa Hacker Tools
  46. World No 1 Hacker Software
  47. Pentest Tools Open Source
  48. How To Hack
  49. Hack Tools Download
  50. Physical Pentest Tools
  51. Hacker Tools Online
  52. Hacker Tools Windows
  53. Hack Tools 2019
  54. Pentest Tools Apk
  55. Github Hacking Tools
  56. Growth Hacker Tools
  57. Bluetooth Hacking Tools Kali
  58. Hacker Tools Mac
  59. Hacking Tools And Software
  60. Hack Tools Mac
  61. Hacking Tools Windows
  62. Physical Pentest Tools
  63. Pentest Tools Review
  64. Pentest Tools For Windows
  65. Hack Tools For Games
  66. Free Pentest Tools For Windows
  67. Hacker Tools For Windows
  68. Hacker Tools For Ios
  69. Hacking Tools For Mac
  70. Game Hacking
  71. Game Hacking
  72. Free Pentest Tools For Windows
  73. Pentest Tools Port Scanner
  74. Nsa Hack Tools Download
  75. Pentest Tools List
  76. Hacker Tools Apk
  77. Hack Rom Tools
  78. Usb Pentest Tools
  79. New Hack Tools
  80. Pentest Tools Review
  81. Pentest Tools Find Subdomains
  82. Hacking Tools
  83. Beginner Hacker Tools
  84. Hacking Tools Name
  85. Hack Tools
  86. Pentest Tools Bluekeep
  87. Hack Tools For Windows
  88. Hacking Tools Mac
  89. Hacker Hardware Tools
  90. Pentest Tools Free
  91. Game Hacking
  92. Hacking Tools Download
  93. Hacking Tools Mac
  94. Nsa Hack Tools Download
  95. Hacker Tools For Windows
  96. Pentest Tools Online
  97. Hack Tools For Ubuntu
  98. Hacking Tools Windows 10
  99. Hack Tools For Mac
  100. Pentest Tools Website Vulnerability
  101. Hacking Tools Hardware
  102. Kik Hack Tools
  103. Hacker Tools List
  104. Best Hacking Tools 2020
  105. Hack Tools
  106. Hacker Tools Online
  107. Hacker Tools Hardware
  108. Hack Tools Online
  109. Pentest Tools Tcp Port Scanner
  110. Easy Hack Tools
  111. Pentest Tools Free
  112. Hacking Tools Online
  113. Pentest Box Tools Download
  114. Hack Tools For Games
  115. Hack Tools Github
  116. Pentest Tools For Windows
  117. Top Pentest Tools
  118. Pentest Tools For Android
  119. Hacking Tools Name
  120. Hack Tools Github
  121. Blackhat Hacker Tools
  122. Hacker Tools Free
  123. Blackhat Hacker Tools
  124. Hacking Tools For Windows
  125. Hacking Tools For Pc
  126. Hacker Tools Linux
  127. Pentest Tools For Android
  128. Easy Hack Tools
  129. Hacker Tool Kit
  130. Hack Tools
  131. New Hack Tools
  132. Hack Tools 2019
  133. Hack Tools For Ubuntu
  134. Hack Rom Tools
  135. Hacking Tools For Windows 7
  136. Pentest Tools List
  137. Pentest Tools Open Source
  138. Pentest Tools Subdomain
  139. Hacking Tools Hardware
  140. Hack Tools For Mac
  141. Hacker Tools
  142. Pentest Tools Windows
  143. Black Hat Hacker Tools
  144. Install Pentest Tools Ubuntu
  145. Growth Hacker Tools
  146. Underground Hacker Sites
  147. Usb Pentest Tools
  148. Hacker Tools Apk Download
  149. Hacking Tools For Windows 7

Vsftpd Backdoor - Ekoparty Prectf - Amn3S1A Team

It's a 32bits elf binary of some version of vsftpd, where it have been added a backdoor, they don't specify is an authentication backdoor, a special command or other stuff.

I started looking for something weird on the authentication routines, but I didn't found anything significant in a brief period of time, so I decided to do a bindiff, that was the key for locating the backdoor quickly. I do a quick diff of the strings with the command "strings bin | sort -u" and "vimdiff" and noticed that the backdoored binary has the symbol "execl" which is weird because is a call for executing elfs, don't needed for a ftp service, and weird that the compiled binary doesn't has that symbol.





Looking the xrefs of "execl" on IDA I found that code that is a clear backdoor, it create a socket, bind a port and duplicate the stdin, stdout and stderr to the socket and use the execl:



There are one xrefs to this function, the function that decides when trigger that is that kind of systems equations decision:


The backdoor was not on the authentication, it was a special command to trigger the backdoor, which is obfuscated on that systems equation, it was no needed to use a z3 equation solver because is a simple one and I did it by hand.



The equation:
cmd[0] = 69
cmd[1] = 78
cmd[1] + cmd[2] = 154
cmd[2] + cmd[3] = 202
cmd[3] + cmd[4] = 241
cmd[4] + cmd[5] = 233
cmd[5] + cmd[6] = 217
cmd[6] + cmd[7] = 218
cmd[7] + cmd[8] = 228
cmd[8] + cmd[9] = 212
cmd[9] + cmd[10] = 195
cmd[10] + cmd[11] = 195
cmd[11] + cmd[12] = 201
cmd[12] + cmd[13] = 207
cmd[13] + cmd[14] = 203
cmd[14] + cmd[15] = 215
cmd[15] + cmd[16] = 235
cmd[16] + cmd[17] = 242

The solution:
cmd[0] = 69
cmd[1] = 75
cmd[2] = 79
cmd[3] = 123
cmd[4] = 118
cmd[5] = 115
cmd[6] = 102
cmd[7] = 116
cmd[8] = 112
cmd[9] = 100
cmd[10] = 95
cmd[11] = 100
cmd[12] = 101
cmd[13] = 106
cmd[14] = 97                    
cmd[15] = 118
cmd[16] = 117
cmd[17] = 125


The flag:
EKO{vsftpd_dejavu}

The binary:
https://ctf.ekoparty.org/static/pre-ekoparty/backdoor


More articles

Smart Contract Hacking Final Free Chapter - Hacking Games Via Bad Randomness Implementations On The Blockchain

This is our final free chapter in this smart contract hacking series, hopefully you enjoyed it, I am not sure what I am going to work on next, perhaps some malware analysis, reverse engineering or maybe some hacking in the cloud. 

We are currently in 4th quarter and slammed with work so I wouldn't expect any more posts or the full blockchain release till after that eases up.

If you have any questions or comments you can hit us up at: 

@ficti0n

http://cclabs.io 


Cryptographic Implementations and Predictable PRNGs

Within operations that require random values we generally need a form of randomness coupled with our algorithm. If we do not have sufficient randomness and large character sets, we would end up with cryptographic collisions or predictable values depending what we are doing. This Is often the case in video game operations and data security encryption schemes. For example, we do not want to create random values which are predictable and repeatable based on known values or controllable values. With controllable values an attacker could duplicate the value by reverse engineering how it was originally created and what that random seed is. Also, If the value is predictable within a game, we may be able to cheat the game by creating our own valid values that exploit the perceived randomness.

Now we are not going to deep dive into cracking cryptography or brute forcing hash values. First off it takes too much time and effort. Secondly because there are easier more efficient ways of tackling cryptographic issues. Lastly, we do not have time for rabbit holes in a week-long penetration test that require us to explore many other attack vectors. Wasting a whole week on cracking a single cryptographic issue would be a terrible and inefficient penetration test leaving the rest of the target vulnerable. This may be suitable for R&D or a CTF but not for a penetration test.  

What you need to understand is that certain functions often used as randomness on the blockchain is not suitable as a source of randomness. Additionally, understanding how things are implemented will get you much farther when it comes to cryptography then attacking it directly. You do not need to break NSA level encryption by attacking it directly. Instead you should concentrate on finding insecure implementations of these algorithms to get what you need.

Oracle padding attacks are a great example of this if you were in the hacking community back in the late 2000s. The padding attack relied on error messages based on padding within blocks to determine a way to decrypt them. This was a brilliant attack vector as you didn't need to understand deep cryptographic concepts to decrypt data blocks only how blocks work and how it was implemented.  With this knowledge you could leverage the flawed implementation to get the decrypted values.

On the blockchain there are a number of insecure functionality that developers like to use when implementing random values. Most of these are very bad ideas for reasons we will discuss below.  

For Example, the following non-exhaustive but often used list of values are not suitable for randomness within sensitive operations. Usage of these types of values for any sort of calculation is always suspect for closer review:

ü  Secret keys in private variables

ü  Block Timestamps

ü  Block Numbers

ü  Block Hash values

Why you ask? Well regardless of the data being set as private on the blockchain a private variable storage value is 100% readable on the blockchain. There are no secret values. These can be queried as you saw in the storage issues chapter. Also embedding hard coded values are certainly not private as they are in the source code which may be posted directly on the blockchain. Or could be reverse engineered out of the bytecode used to deploy the contract when the source code is not available. If you can get a hold of that value, then you can violate the security of that functionality.

Secondly do not rely on predictable values for randomness especially from block data sources. Block timestamps are controlled by miners which can aid in orchestrated attacks when used as a source of randomness. Also block numbers are easy to query and create predictable attacks when used in calculations, if internal functions are using a block number, they are all using the same PRNG. Finally, block hash values are terrible to use for randomness as only the last 256 block hash values on chain actually have a real value. Anything older than 256 is reduced to 0 meaning that every calculation will use the same value of 0. We will cover that in some of our examples.

This is not an exhaustive list but instead just a small portion of bad decisions for random values. There are plenty of other values which could be used within calculations as a random seed which are also predictable. It is always important to review the data used in these calculations when reviewing smart contract functionality. So, without the need of a PHD in cryptography you should easily discern that all of the above implementation examples are terrible for the inclusion of random data within cryptographic operations.

 

Simple BlockHash Example

Let's start out taking a look at a simple example of using a blockhash value with a blocknumber value. While a hash of a block might seem like a good idea as a random number there are numerous issues with it. Firstly, a blocknumber is a known value set by a miner that persists for a set length of time and can be queried and used in an attacker's similar algorithm to produce the same result and bypass controls. But there is also an underlying vulnerability to this approach when coupled with a blockchash which we will take a look at below.

Action Steps:

ü  Open up your terminal and launch ganache-cli

ü  Type out the code below into Remix

ü  Within the Deploy Environment section dropdown change the JavaScript VM to the web3 Provider option.

ü  Deploy the contract to ganache with the deploy button in Remix

 

 

1.    pragma solidity ^0.6.6;
2.   
3.    contract simpleVulnerableBlockHash {
4.           uint32 public block_number;
5.           bytes32 public myHash;
6.   
7.           function get_block_number() public  {   
8.                   block_number = uint32(block.number);
9.           }
10. 
11.  function set_hash() public{
12.                 myHash = bytes32(blockhash(block_number));
13.         }
14. 
15.  function wasteTime() public{
16.                 uint test = uint(block.number);
17.  }
18. }

 

The simple contract above is querying for the current block number in the get_block_number function on line 8 and storing it within a block_number variable created on line 4.  This is the current block number running on the blockchain.

Then we have a function on line 11 which takes the block number and uses it with the blockhash button to retrieve the blockhash and store it in the myHash variable.

 

BlockHash Vulnerability Walk and Talk:

 

Action Steps:

ü  Execute the get_block_number function

ü  Execute the set_hash function

ü  Check the block_number value

ü  Check the myHash value

ü  Execute the wasteTime function 256 times

ü  Execute the set_hash function

ü  Check your myHash Value

ü  What happened and what implications would this have on calculations your using this value with?

 

So, we have 2 variables of a block number and a block hash associated with that block number. What's the big deal. Well let's walk through this step by step and then play around with the remaining wasteTime function on line 15 to find out.

Starting out if we have the deployed contract and we execute the get_block_number function followed by the set_hash function we will get the following result when checking the block_number and myHash variables.

 


We see the blocknumber of 3 and then a hex value representing the block hash that starts with 0x995f. Now if we were to use this hash as a random value or within some algorithm to create a random value it might work depending what we were doing and the level of security required for the length of time we need it to be perceived as random for. It wouldn't be secure but maybe good enough for your operations.  However, a blockhash has a dark little secret a developer may not be aware of.  Block hashes in Ethereum have short term memory when it comes to blocks older than 256 from the current block.  

So, what happens when we calculate a block after a time lapse? Let's give that a try by executing the wasteTime button till we reach block 259.  Waste time sets a block value and discards it to enumerate blocks for us, it doesn't actually make any real changes. Normally blocks on the Ethereum network enumerate on their own every 30 seconds and we would simply just wait for 256 blocks, but we don't have traffic on our blockchain so we will enumerate it ourselves with wasteTime.

 


After we reach block 259 we execute the set_hash function again which will take block_number of 3 which is older than 256 blocks and get the hash. If you retrieve the myHash variable again after executing the set_hash function again it results in:

 


You will notice the myHash variable is now 0x000. because blocks older than 256 from the current block are not stored and result in a value of 0.  Having a predictable value of 0 in our random algorithm can very likely create a situation where it would be easy to recreate the random number to bypass or cheat functionality in the smart contract.


Video Walkthrough of Bad Randomness:




A classical terrible example is something similar to this.

1.  Function checkWinner() public payable { 
2.     If (blockhash(blockNumber) % 2 == 0) {
3.         Msg.sender.transfer(balance);
4.     }
5.  }

 

In the example above uses a blockhash function with a blockNumber variable within its calculation. The issue with this calculation is if that blockNumber variable is more than 256 blocks old it will return Zero and based on the calculation the user will win every single time.

All the attacker would need to do is play the game to create the blocknumber variable. Then the attacker would simply wait for 256 blocks to pass before checking if he has won the game. By doing this the attacker would guarantee a win. 

 

In order to see how this would work let's take a look at a simple game of chance that implements this concept.

Action Steps:

ü  Type out this code within remix

ü  Deploy the code using Ganache and Web3 options

ü  Try to locate the vulnerability within the code

ü  Try to exploit the vulnerability this code so that you are always the winner

1.  pragma solidity ^0.6.6;
2.   
3.  contract simpleVulnerableBlockHash {
4.      
5.      uint balance = 2 ether;
6.      mapping (address => uint) blockNumber;     
7.      bool public win; 
8.      
9.      constructor() public payable{
10.        require(msg.value >= 10 ether);
11.    }
12.    
13.    function get_block_number() internal  {   
14.        blockNumber[msg.sender] = uint(block.number);
15.    }
16.    
17.    function playGame() public payable {
18.        require (msg.value >= 1 ether);
19.        get_block_number();
20.    }
21.     
22.     
23.    function checkWinner() public payable { 
24.      if (uint(blockhash(blockNumber[msg.sender])) % 2 == 0) {
25.          win = true; 
26.             msg.sender.transfer(balance);
27.      }   else{
28.             win = false;
29.         }
30.    }
31.    
32.}

 After trying to exploit this vulnerability yourself review the following video which walks you through the code and how to exploit it.

Video Walkthrough of Attacking The Game:



 

Preventing Randomness Summary

The best way to prevent these issues is to avoid on chain predictable values or secret values as your seed to operations and calculations.  We can do this with trusted external Oracles.  Oracles are external data sources that your contract can use when it needs random values or trusted data.  There are projects that specifically solve this problem for example ChainLink which has networks of Oracle nodes that handle data queries and provide back trusted verified data including random numbers.  A simple example for using Chainlink for a random number is found at the following link:

https://docs.chain.link/docs/get-a-random-number

It is always a good idea to avoid on chain secret data or block related information when performing any sort of sensitive operation and instead utilize an Oracle.  

 

Bad Randomness References

https://docs.chain.link/docs/get-a-random-number

https://nvd.nist.gov/vuln/detail/CVE-2018-14715
Related posts

  1. Github Hacking Tools
  2. Hacker Tools Github
  3. Hacking Tools Download
  4. Best Pentesting Tools 2018
  5. Pentest Tools Nmap
  6. Hacking Tools Name
  7. Hacker Tools 2020
  8. Hacking Tools Windows 10
  9. Hacking Tools Free Download
  10. Hackrf Tools
  11. Hacking Tools For Pc
  12. Hacker Tools Apk
  13. Android Hack Tools Github
  14. Hacker Tools Apk Download
  15. Hacker Tools For Ios
  16. Hacker Search Tools
  17. Android Hack Tools Github
  18. Kik Hack Tools
  19. Hacking Tools Online
  20. Pentest Tools Port Scanner
  21. Hack And Tools
  22. New Hacker Tools
  23. Hack Tools
  24. Pentest Tools Kali Linux
  25. Nsa Hack Tools Download
  26. Hacker Tools 2020
  27. Pentest Tools Website
  28. Hacking Tools Software
  29. Tools Used For Hacking
  30. Hacking Tools
  31. Hacking Tools For Pc
  32. Android Hack Tools Github
  33. Pentest Reporting Tools
  34. Pentest Tools Review
  35. Best Hacking Tools 2020
  36. Hacking Apps
  37. Best Pentesting Tools 2018
  38. How To Make Hacking Tools
  39. Pentest Tools Android
  40. Hacker Hardware Tools
  41. Hack Tools Online
  42. Pentest Tools Kali Linux
  43. Hacker Tools List
  44. Hack Tools Pc
  45. Pentest Tools Find Subdomains
  46. How To Install Pentest Tools In Ubuntu
  47. Hacker Tools Free
  48. Pentest Tools Android
  49. Hacking Tools Windows
  50. Hack Rom Tools
  51. Hacking Tools And Software
  52. Hack Tools
  53. Nsa Hacker Tools
  54. Hack Tools Mac
  55. Hacker Search Tools
  56. Computer Hacker
  57. Hack Tools For Mac
  58. Pentest Reporting Tools
  59. Android Hack Tools Github
  60. Blackhat Hacker Tools
  61. Pentest Tools Subdomain
  62. Hacking Tools For Windows 7
  63. Hacker Tools For Mac
  64. Pentest Tools For Android
  65. Github Hacking Tools
  66. Termux Hacking Tools 2019
  67. Pentest Tools Find Subdomains
  68. Hacker Tools List
  69. Hacker Tools Apk Download
  70. Hacker Search Tools
  71. Hacker Tools Free Download
  72. Hack App
  73. Hacking App
  74. Hacking Tools Kit
  75. Pentest Tools Subdomain
  76. Game Hacking
  77. Hacker Tools Online
  78. Hacker Tools Hardware
  79. Hack App
  80. Blackhat Hacker Tools
  81. Hacker Tools 2019
  82. What Are Hacking Tools
  83. Hacking Tools Windows
  84. Hacking Tools Software
  85. What Are Hacking Tools
  86. Computer Hacker
  87. Pentest Tools Tcp Port Scanner
  88. Hacker Tools Github
  89. Hack Tools For Windows
  90. Hacker Tools Free
  91. Hack Tools Pc
  92. Hack Website Online Tool
  93. Pentest Tools Linux
  94. Hacking Tools Free Download
  95. Hack Tools
  96. Computer Hacker
  97. Hacker Tools Apk Download
  98. Hacking Tools For Windows
  99. Hack And Tools
  100. How To Hack
  101. Hack Tools For Pc
  102. Pentest Tools For Android
  103. Hacker Tools
  104. Hacker Tools For Windows
  105. Pentest Recon Tools
  106. Hacker Tools 2020
  107. Hack Tools Online
  108. Hack Tools Download
  109. Hack Tools For Pc
  110. Hacker Tools Online
  111. Pentest Reporting Tools
  112. Hack Tool Apk
  113. Hacking Tools For Beginners
  114. Pentest Tools Port Scanner
  115. Pentest Tools Framework
  116. Best Hacking Tools 2020
  117. How To Install Pentest Tools In Ubuntu
  118. Hack Tools
  119. Hacking Tools For Windows
  120. Hacker Hardware Tools
  121. Ethical Hacker Tools
  122. What Are Hacking Tools
  123. Hacking Tools Pc
  124. Github Hacking Tools
  125. Pentest Tools Online
  126. Hack Tools
  127. Hacker Tools Online
  128. Hacker Tools 2020
  129. Hacking Tools Mac
  130. Hacking Tools Kit
  131. Pentest Tools Framework
  132. Pentest Tools Bluekeep
  133. Hacker Tools Linux
  134. Hacker Security Tools
  135. Hacker Tools Hardware
  136. Pentest Tools For Windows