The highest low score of an innings in Test matches is 12.
As can be seen in the screenshot, this low score has been made on two occasions. The first was by India in the first Test against New Zealand in Dunedin in 1967/68, where Bapu Kulkarni was lbw to New Zealand's fast-medium bowler Bruce Taylor for 12 in the second innings of the match, which India would go on to win by five wickets. The second was much more recent: in the first innings of the third Test between England and South Africa at Johannesburg in 2015/16, South Africa's Morné Morkel was last man out for 12, caught by English captain Alastair Cook off the fast bowling of allrounder Ben Stokes. South Africa went on to lose crushingly by seven wickets. In both cases, the players had made the lowest scores of their respective team innings.
The Bash command used to find this information was:
i=0;while ! (wget "http://stats.espncricinfo.com/ci/engine/stats/index.html?class=1;filter=advanced;groupby=innings;orderby=start;orderbyad=reverse;qualmin1=10;qualmin2=11;qualval1=outs;qualval2=innings;runsmin1=${i};runsval1=runs;size=1;template=results;type=batting" -O- -q | grep 'No records available to match this query' >/dev/null 2>&1);do i="$((${i}+1))";done;i="$((${i}-1))";wget "http://stats.espncricinfo.com/ci/engine/stats/index.html?class=1;filter=advanced;groupby=innings;orderby=start;orderbyad=reverse;qualmin1=10;qualmin2=11;qualval1=outs;qualval2=innings;runsmin1=${i};runsval1=runs;size=200;template=results;type=batting" -O- -q | grep '^ *<td colspan="[^">]\+">' | grep -o '[>][^<]\+[<]' | tr -d '<>';echo "SCORE: ${i}"