You can use the intersections library:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{intersections}
\pagestyle{empty}
\begin{document}
\begin{tikzpicture}
\node (A) at (0,0) {1};
\node (B) at (1,0) {2};
\node (C) at (5,3) {3};
\node (D) at (-2,7) {4};
\draw[cyan,name path=d1] (A.center) -- (C.center);
\draw[cyan,name path=d2] (B.center) -- (D.center);
\path[name intersections={of=d1 and d2, by={l}}]
node[fill,circle,inner sep=1.5pt] (I) at (l) {};
\end{tikzpicture}
\end{document}

In the simpler case of rectangles you can use the calc library to calculate the middle point of one of the diagonals:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\pagestyle{empty}
\begin{document}
\begin{tikzpicture}
\node (A) at (0,0) {1};
\node (B) at (3,0) {2};
\node (C) at (0,7) {3};
\node (D) at (3,7) {4};
\draw[cyan] (A.center) -- (D.center);
\draw[cyan] (B.center) -- (C.center);
\node[fill,circle,inner sep=1.5pt] at ( $ (A)!0.5!(D) $ ) (I) {};
\end{tikzpicture}
\end{document}

If this is going to be used multiple times, one could think of a command; something along these lines:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{intersections}
\pagestyle{empty}
\newcounter{mycnt}
\newcommand\Inter[5]{%
\stepcounter{mycnt}
\draw[cyan,name path={d\themycnt}] (#1.center) -- (#2.center);
\draw[cyan,name path={e\themycnt}] (#3.center) -- (#4.center);
\path[name intersections={of={d\themycnt} and {e\themycnt}, by={f\themycnt}}]
node[fill,circle,inner sep=1.5pt] (#5) at ({f\themycnt}) {};
}
\begin{document}
\begin{tikzpicture}
\node (A) at (0,0) {1};
\node (B) at (1,0) {2};
\node (C) at (5,3) {3};
\node (D) at (-2,7) {4};
\draw[orange] (A.center) -- (B.center) -- (C.center) -- (D.center) -- cycle;
\Inter{A}{C}{B}{D}{i1}
\node (E) at (7,-2) {5};
\node (F) at (8,5) {6};
\node (G) at (10,3) {7};
\node (H) at (11,-1) {8};
\draw[orange] (E.center) -- (H.center) -- (G.center) -- (F.center) -- cycle;
\Inter{E}{G}{F}{H}{i2}
\end{tikzpicture}
\end{document}

The synatx is \Inter{<name1>}{<name2>}{<name3>}{<name4>}{<name-int>}, where <name1>, <name2> correspond to the end points of one diagonal; <name3>, <name4> correspond to the end points of the other diagonal, and <name-int> is the name asignated to the node in the intersection point.
Perhaps it would be better to construct the vertices using \coordinate instead of \node.
aux@l1,aux@l2andaux@i. – Qrrbrbirlbel Aug 13 '13 at 05:56