Use DataFrame.merge with inner join, only necessary rename columns:
df = df2.rename(columns={'col1':'Col1','col2':'Col2'}).merge(df1, on=['Col1','Col2'])
#on should be omited, then merge by intersection of columns of df1, df2
#df = df2.rename(columns={'col1':'Col1','col2':'Col2'}).merge(df1)
print (df)
  Col1  Col2 Col3
0    A     4   ab
1    B     3   jd
Another idea is use left_on and right_on parameter and then remove columns with names by df2.columns:
df = (df2.merge(df1, left_on=['col1','col2'], 
                     right_on=['Col1','Col2']).drop(df2.columns, axis=1))
print (df)
  Col1  Col2 Col3
0    A     4   ab
1    B     3   jd
If columns names are same:
print (df2)
  Col1  Col2
1    A     4
2    B     3
df = df2.merge(df1, on=['Col1','Col2'])
#df = df2.merge(df1)
print (df)
  Col1  Col2 Col3
0    A     4   ab
1    B     3   jd