I would do this with only one collider and then analyze the contact points to decide who gets hurt.
private void OnCollisionEnter2D(Collision2D collision) {
if (collision.gameObject == GameObject.FindWithTag("Player"))
var contact = collision.GetContact(0);
Vector2 collisonPoint = contact.point;
Now you have one of the points in world space where the colliders of player and enemy touched. When its y-component is on the upper edge of the enemy collider, that means the player hit form above. When it's further down, the player hit from the side or from below.
if(collisionPoint.y >= GetComponent<Collider2D>().bounds.max.y) {
// Player hits from above
} else {
// Player hits from side or below
}
Note that this particular code sample uses the axis-aligned bounding box of the collider. This box should be equal to the collider if it is a non-rotated box collider. When you use more complex colliders, then the bonds might be larger than you would expect, so you might have subtract a bit from it or access the type-specific properties of the particular type of collider you are using.