Find vertices of a convex polytope, defined by intersecting half-spaces
Your problem is a special case of enumerating the vertices of a convex polytope, and there is an efficient (polynomial-delay) recursive algorithm for your special case, which I will describe next.

If $a_1+\dots+a_d &gt; 1$, then there is no solution, and you can terminate.  If $a_1+\dots+a_d=1$, there is a single solution $(a_1,\dots,a_d)$, so output it and terminate.  Otherwise, I'll assume $a_1+\dots+a_d &lt; 1$, so you use the following:


For each index $i$ such that $a_i&lt;b_i$:


Let $c_i = 1-a_1-\dots-a_{i-1}-a_{i+1}-\dots-a_d$.
If $c_i \le b_i$, output $(a_1,\dots,a_{i-1},c_i,a_{i+1},\dots,a_d)$; it is a vertex of the original polytope.
Otherwise, replace $a_i \le x_i \le b_i$ with $b_i \le x_i \le b_i$ (i.e., replace $a_i$ with $b_i$) and recurse to output the vertices of the resulting polytope.





To help others find this by search: it's the intersection of the unit simplex (points of L1 norm exactly one) and an axis-aligned box.



In general, if the polytope is defined by an intersection $m$ half-spaces, then a vertex is defined by choosing a combination of $d$ out of the $n$ of the corresponding hyper-planes; if their intersection is a single point, and it is in the polytope, then it is a vertex.  This gives an exponential-time algorithm for enumerating all vertices for a general polytope.  There are other algorithms for the general case, but that's beyond the scope of this answer.