暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

无级安全 2018-09-02
136

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


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


今天和大家分享的内容是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

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

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

文章转载自无级安全,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论