SQL显错(union)注⼊基础深度剖析(原理)
⽬录
前⾔
我写了⼀篇php就觉得好⿇烦咳咳,可以去看⼀下慕课⽹的php3⼩时⼊门,然后搭配菜鸟教程学习。如果需要深⼊学习
安装libphp5的话,推荐去看 php从⼊门到精通。我也好久没更新了,因为我最近⽤python写些⼩东西,嘿嘿~
我也就开始直接写了。推荐书籍的话,我推荐  《web安全攻防渗透测试实战指南》《⽩帽⼦讲web安全》《web安全深度剖析》我也经常看这⼏本书
正⽂
0x01 . 什么是sql注⼊?
sql注⼊  指 web应⽤程序没有对⽤户输⼊的数据进⾏判断,导致前端传⼊后端的参数
可以被攻击者所控制,并且带⼊数据库执⾏
$sql = "SELECT * FROM users where id = $GET['id']";splitter一分16分配器怎么用
因为这⾥的参数,id可以可以控制,所以会被攻击者进⾏拼接sql语句注⼊
区别就是有,⿊客是在前台访问数据库内容
管理员是在后台访问数据库内容
0x02. SQL注⼊原理
看上⾯的图就可以知道,产⽣sql注⼊的两个条件
1. ⽤户可以控制参数的输⼊
2.原本程序要执⾏的代码,拼接了⽤户输⼊的数据
有看我前⾯写的那⼀篇,就知道什么是参数了
sql注⼊源码分析(理解原理与形成)
<?php
$con = mysqli_connect("127.0.0.1","root","root","test");
if (mysqli_connect_errno())
{
echo "连接失败:".mysqli_connect_error();
}
$id = $_GET['id'];
$result = mysqli_query($con,"select * from user where id=$id");
$row = mysqli_fetch_array($result);
echo $row['username']. " : " .$row['address'];
echo "<br>";
>
标准的php表达式
然后就是 ⼀些函数
1. mysqli_connect() :检查数据库的连接,第⼀个是地址,我是本地搭建的,所以是127.0.0.1,也可以写localhost,然后就                                              是账号,密码,和数据库mysql菜鸟教程字符串型
2. mysql_connect_errno() :  返回上⼀次连接错误的错误代码。
3. mysqli_connect_error() : 返回⼀个描述错误的字符串。如果没有错误发⽣则返回 NULL
我们故意输⼊错误的账号看⼀下,会发⽣什么事
可以看出这⾥报错,说第⼆⾏出现错误,然后我们就可以判断可能是 地址,或者是账号密码,或者是数据库
如果想改变的成p的话,就改为 $uid = $_GET['p']  就可以了,⾄于前⾯的变量随意命名就好
5. $result = mysqli_query($con,"select * from user where id=$id");
1)mysqli_query()    是针对某个数据库的查询语句
title的英语怎么读
接下来就是MySQL数据库的查询语句,mysqli_query($con,"select * from user where id=$id")
⾸先是 mysqli_query() 函数,来连接我们的数据库, $con 就是上⾯的⼀个数据库连接的变量。我们连接进了test这个数据库
然后再 去执⾏后⾯的SQL语句(不懂的可以看我前⾯)
⾸先查询 user这个表中的数据。然后 id=$id,这⾥是使⽤了双引号,所以这⾥的变量id是⽣效的,也就是说,我们可以从这⾥去拼接进SQL 语句,也就是 sql 注⼊的形成与产⽣。符合了2个条件。1.⽤户可以控制传参  2.拼接了原本程序要执⾏的语句
然后下⾯那个函数我就不说了,返回数组
0x03. 进⾏SQL注⼊前,必须掌握的知识
1)这⾥我引⽤下那本书的 MySQL查询语句
(学习嘛,就要四处借鉴。理解别⼈是怎么看待,取其精魄)
1. 在不知道任何条件时,查询语句:
select 要查询的字段 from 库名.表名
2. 知道⼀条已知条件:
select 要查询的字段 from 库名.表名 where 已知的字段名='已知的值'
3. 知道两条已知条件
select 要查询的字段 from 库名.表名 where 已知条件1的字段名='已知条件的值1' and 已知条件2的字段='已知条件2的值'
2). mysql 5.0 版本之后的必知常识
⾃带数据库:  information_schema
库中的表 :    SCHEMATA,TABLES,COLUMNS
SCHEMATA表的作⽤:记录了 ⽤户创建的所有库名,在 SCHEMA_NAME 这个字段下⾯
TABLES 表的作⽤:记录了所有⽤户创建的库名,和表名库名存储于 tables表中的 table_schema字段中
表名存储于 tables 表中的table_name 这个字段当中
COLUMNS表的作⽤:存储库名 ,表名,字段名
个人自我介绍网页通过有上⾓,我们指定搜索,显得更直观
table_schema : 存储 数据库名
table_name :存储表名
column_name :  存储字段名
0x04. SQL注⼊语句与步骤剖析
第⼀步,判断是否存在SQL注⼊
进⼊靶场 掌控安全靶场
and -50=-50 判断页⾯是否正常
and -50=-49 判断页⾯是否错误
初步判断,然后再使⽤单引号或者双引号判断
第⼆步:判断字段
59.63.200.79:8003/?id=1 order by 1-- qwe
59.63.200.79:8003/?id=1 order by 2-- qwe
59.63.200.79:8003/?id=1 order by 3-- qwe
excel if函数怎么用多个条件59.63.200.79:8003/?id=1 order by 4-- qwe
当我们判断时,发现排序到4的时候报错了,说明这个⽹站有3个字段然⽽拼接了sql语句,传进去的就是这么⼀个内容
也就是3个字段,分别为 id,username,password

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。