公号已经连续更好几天了,猛然发现了打赏的功能,今天特地来试试,最难的就是坚持,目前人气不足,无极君也不会做运营,开办公众号的初心就是交流技术,不是为了赚取多少粉丝,获得多少个赞,哪怕只剩下一个人,交流继续。
写稿子占据了大部分的时间,但我还是想说,本公号的定位是技术,欢迎喜欢技术的师傅交流批评。大家应该也发现了,吐槽占据了大部分的内容,在圈里和大家一起吹吹牛挺好的,也希望把这件事能做好。让信息安全爱好者的入门人员能够少一点迷茫,抛砖引玉,早日向大牛的位置靠近。
今天和大家分享的内容是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
基础打的牢,渗透起来才会得心应手,以上抛砖引玉工作结束,无极君开始拔草了,哦,对了,朋友圈里看到一位大佬说过一句话,共勉。
如果你怕麻烦,那每天就多学点,多会点,今天累了,明天就轻松了。