From SQL Injection to Shell学习笔记
今天看了pentesterlab关于SQL的文章并实践了,下面总结下:
SQL注入是针对数据库提交查询的操作,语法上是合法的。对此的利用过程主要有三个部分
(1)指纹识别:查找准备信息,哪种数据库,不同数据库的语法是不一样的;哪个页面有注入可能,注入也分两个方面:数字的和字符
的。
数字型的可以进行算术运算,比如
/cat?id=2-1 与 /cat?id=1 是等价的
字符型的对引号比较敏感,注意把各种双号对齐,不然会出现语法错误
有必要的时候用上注解把后面注释掉(--空格)
(2)利用SQL注入检索出有用的信息
这个时候就有必要使用UNION再接上一个查询,步骤:
找出UNION之前的SELECT所检索的列数(UNION前后检索的必需相同才行),方法有两种
1. 使用UNION SELECT + 猜测列(1,2,3。。。。。),列不同出错
2. 使用ORDER BY +猜测列数(1或2或3或4.。。。。。),列超过出错(适用于检索列很多的)
找出显示在网页上的是哪一列的检索数据
检索出我们需要的信息
1. current_user() 当前使用数据库的用户
2. version() 数据库的版本
3. information_schema.tables-->table_name 表名的列表
4. information_schema.columns-->table_name , column_name列名所属的表和列名的列表(可以使用concat函数连结),如1
UNION SELECT 1,concat(table_name,' : ',column_name),3,4 FORM information_schema.columns
进入链接:http://192.168.218.128/cat.php?id=1 UNION SELECT 1,concat(table_name,' : ',column_name),3,4 FROM
information_schema.columns
根据表名和列名的信息检索出我们想要的信息来,比如id,login,password等