How can I add fields to blocks? Is there a way we can add some fields in Blocks, just like we can do in content types. For now I need an image field attached to a block. 

I know about a module named Image Block but that is limited in its functionality.
Try one of the following modules:
Bean

What is Bean?
Think of a Bean as a method to provide new types
(compared to node this would be a content type) which then provides an
add content interface to create as many blocks as you require (see
screenshot below). The bean content can then be placed around the site
just like any other block.

Boxes

Boxes module is a reimplementation of the custom blocks (boxes) that
the core block module provides. It is a proof of concept for what a
re-worked block module could do.

My personal preference has always been Bean (before I started using Panels more frequently), but I don't think there's a lot in it to be honest.