You can power the Arduino with 12V but it only outputs 5V (and 3.3V) and it cannot source a lot of current on the 5V rail.
If you have one 12v voltage source (battery) then connect it both to the motor controller (H-bridge) and the Arduino. Keep in mind that motors can cause interference on the power rail that might screw up the Arduino (make it reboot or crash). Use the Arduino to drive the control lines of the motor controller.
I have two separate power sources on my robot. One specifically for the motors and one for the electronics. That also keeps the noise/interference down on the +5V rail.
Most motor controllers/driver are H-bridge. You can google that to find explainations. Basically the chip can drive a large voltage/current by sending it some TTL (5V) logic signals - of which one is usually a PWM signal - for speed. Most motor controllers have 2 separate channels that allow you to drive two motors independently.
Important is the amount of current each motor draws at full load. The Motor Controller must be able to handle that current. Because you have a 4WD you may want to drive two motors on one side together - so you have to multiple the motor current by 2. So if one motor draws 1A tops and you tie 2 motors together, you need a Motor controller that is capable of handling 2A (or more) per channel.
Hope it helps.