Web安全(三)所有人都能看得懂的sql注入教程

公号已经连续更好几天了,猛然发现了打赏的功能,今天特地来试试,最难的就是坚持,目前人气不足,无极君也不会做运营,开办公众号的初心就是交流技术,不是为了赚取多少粉丝,获得多少个赞,哪怕只剩下一个人,交流继续。

写稿子占据了大部分的时间,但我还是想说,本公号的定位是技术,欢迎喜欢技术的师傅交流批评。大家应该也发现了,吐槽占据了大部分的内容,在圈里和大家一起吹吹牛挺好的,也希望把这件事能做好。让信息安全爱好者的入门人员能够少一点迷茫,抛砖引玉,早日向大牛的位置靠近。

今天和大家分享的内容是SQL注入,那我们先来进入一个情况,假设你不懂SQL注入(废话,我当然不懂了,不然过来听你瞎bb啥),假设你不懂web开发,假设你不懂数据库(卧槽,我特么是傻X么)。

首先,了解一点简单的数据库表的操作语句,这里,还是以MySQL为例。

mysql表内容操作表内容操作无非就是增删改查,主要是查

1、增

insert into 表 (列名,列名...) values (值,值,...)

insert into 表 (列名,列名...) values (值,值,...),(值,值,值...)

insert into 表 (列名,列名...) select (列名,列名...) from 表

例:insert into tab1(name,email) values('fz','fz@163.com')

2、删

delete from 表 # 删除表里全部数据

delete from 表 where id=1 and name='fz' # 删除ID =1 和name='fz' 那一行数据

3、改

update 表 set name = 'fz' where id>1

4、查

select * from 表

select * from 表 where id > 1

select nid,name,gender as xb from 表 where id >1

查这部分有如下的条件

a、条件判断where

b、通配符like

c、限制limit

d、排序asc,desc

e、分组group by

然后,了解一下PHP的简单开发。

PHP的基本语法

https://m.runoob.com/php/

PHP链接数据库的三种方式

1.常用普通方法

$mysql_server="localhost"; $mysql_username="数据库用户名”;

$mysql_password="数据库密码"; $mysql_database="数据库名"; //建立数据库链接 $conn = mysql_connect($mysql_server,$mysql_username,$mysql_password) or die("数据库链接错误"); //选择某个数据库 mysql_select_db($mysql_database,$conn); mysql_query("set names 'utf8'"); //执行MySQL语句

$result=mysql_query("SELECT id,name FROM 数据库表"); //提取数据 $row=mysql_fetch_row($result);

在提取数据的时候,我们使用mysql_fetch_row,还可以使用mysql_fetch_assoc和mysql_fetch_array,可以参考手册。

2.面向对象方法

$db=new mysqli($dbhost,$username,$userpass,$dbdatabase);

if(mysqli_connect_error())

{ echo 'Could not connect to database.'; exit; }

$result=$db->query("SELECT id,name FROM user");

$row=$result->fetch_row();

3.PDO方法

$dsn='mysql:host='.$dbhost.';dbname='.$dbdatabase.';'

$dbh=new PDO($dsn,$username,$userpass); $stmt=$dbh->query('SELECT id,name FROM user where id =$id');

$row=$stmt->fetch();

以上是常用的3种PHP连接MYSQL数据库的方法,大家要看好数据库查询的方式,后面有用。

把网站运行起来之后,我们就开始学SQL注入了

那啥是SQL注入,还是借大佬们的话来说,一切的输入都是有害的,顾名思义,SQL注入漏洞就是在输入到SQL语句的参数没有经过过滤导致攻击者可以通过构造非正常的输入,得到预期的输出,说的有点绕,简单来说,就是网站被攻击者执行了不正常的SQL语句,这就是原理。

既然输入不正常,我们来看看怎么个不正常法,一般网站url是这么写的

www.fz.com/index.php?id=1

那数据库执行的就是这么个命令了

SELECT name,pass FROM user where id = 1

结果就把pass和name 给打印出来了。

可是如果网站的URL是这么个玩意儿,

www.fz.com/index.php?id=-1 union select 1,user()

那数据库查询的就是这

SELECT name,pass FROM user where id = -1 union select 1,user()

就把1和user()打印出来了。

union是啥自己百度去

user()是啥自己百度去

这就是一次简单的SQL注入攻击。

关于SQL注入的其他姿势,我们会慢慢的讲,这里介绍两本书

SQL注入攻击实战

https://pan.baidu.com/s/1xv8Joyh4rFcO4R03B0j5Hw 密码:3kzp

习科SQL注入攻击

https://pan.baidu.com/s/1U2pqCTm4ACKZyUTI54xFlg 密码:ps36

关于SQL注入靶场,有一个比较经典的,可以了解一下,后期出教程。

https://github.com/Audi-1/sqli-labs

关于SQL注入,无人不知,无人补晓的神器,明小子,阿D呃呃 不对 拿错了

SQLmap 这是地址

https://github.com/sqlmapproject/sqlmap

这是使用简介

http://www.freebuf.com/articles/web/29942.html

一下做个说明,这篇文章是针对啥也不会的初学者设计的,几个简单的命令和语法,就想打遍全场,不存在的。

想学MySQL 看文档

https://dev.mysql.com/doc/

想学PHP 看文档

http://php.net/

想学SQLmap 看文档

https://github.com/sqlmapproject/sqlmap/wiki/Usage

基础打的牢,渗透起来才会得心应手,以上抛砖引玉工作结束,无极君开始拔草了,哦,对了,朋友圈里看到一位大佬说过一句话,共勉。

如果你怕麻烦,那每天就多学点,多会点,今天累了,明天就轻松了。

原文发布于微信公众号 - 无级安全(wujisec)

原文发表时间:2018-09-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券