宽字节搭建过程

目录

1.背景

 2.环境准备

​3. 打开本地的phpstudy下的mysql数据库的目录

4.修改配置文件my.ini文件,将utf8改为gbk

5.打开phpstudy自带的phpMyAdmin数据库,不过该数据库也是mysql类型的。

6.创建数据库为man和两个表news,admin

7.编写代码china.php,保存的时候用记事本asii保存,不要用utf8否则会乱码!!!

8.在命令行中打开数据库,查看是否是GBK编码

10.进行检测一下是否可以注入,看到此页面说明成功了!

11.之后进行正常的SQL注入,使用SQL注入的语句。


1.背景

  现在大多数网站使用unicode国际编码和utf-8编码,不过国内现在有的数据库使用了GBK编码,以及一些错误的配置导致出现了宽字节注入,也是SQL注入的一种方法。宽字节注入的出现是因为,程序员在编写过程中连接mysql数据库时错误的设置:
set character_set_client=gbk,其中php代码:mysql_query("SET NAMES 'GBK'");
指定三个字符集(客户端,连接层,结果集)
   使用addslashes函数过滤提交的参数时,测试的注入点使用的单引号’ 就会被转义为:\' 这个作用就是对敏感函数的转义,让我们无法注入。
    如果存在宽字节注入的话,一般情况下,我们会输入%df%27时首先经过上面的转义就会变成%df%5c%27(其中%5c就是反斜杠) 
    %df  不是固定的,自己可以组合,只要是汉字就可以的。例如:%89  %83 ....
   之后,在数据库里查询,由于使用了GBK编码,它占两个字符,所以%df%5c转成汉字

 2.环境准备

windows 10 攻击机

windows 7 虚拟机——靶机

【搭建宽字节注入点的靶机  ,下载一个phpstudy2016】

0.png
3. 打开本地的phpstudy下的mysql数据库的目录

0 (1).png

 

4.修改配置文件my.ini文件,将utf8改为gbk

0 (2).png

 

5.打开phpstudy自带的phpMyAdmin数据库,不过该数据库也是mysql类型的。

0 (3).png

 

6.创建数据库为man和两个表news,admin

表的结构 `admin`

--


 

CREATE TABLE IF NOT EXISTS `admin` (

`uid` int(10) unsigned NOT NULL AUTO_INCREMENT,

`name` varchar(32) NOT NULL,

`pass` char(32) NOT NULL,

PRIMARY KEY (`uid`)

) ENGINE=MyISAM DEFAULT CHARSET=gbk AUTO_INCREMENT=2 ;





 


表的结构 `news`

--


 

CREATE TABLE IF NOT EXISTS `news` (

`tid` int(10) unsigned NOT NULL AUTO_INCREMENT,

`title` varchar(30) NOT NULL,

`content` varchar(256) NOT NULL,

PRIMARY KEY (`tid`)

) ENGINE=MyISAM DEFAULT CHARSET=gbk AUTO_INCREMENT=3 ;

 

-- 转存表中的数据 `news`

--


 

INSERT INTO `news` (`tid`, `title`, `content`) VALUES

(1, 'Summer夏天', 'Walking on the road, the wind coming like a heat wave attacks.'),

(2, ' Peking Duck 北京烤鸭', 'Why do you go to Beijing for studying?');
 


-- 转存表中的数据 `admin`

--


 

INSERT INTO `admin` (`uid`, `name`, `pass`) VALUES

(1, 'admin', '21232f297a57a5a743894a0e4a801fc3');

 

7.编写代码china.php,保存的时候用记事本asii保存,不要用utf8否则会乱码!!!

0 (7).png

  1. <?php
  2.  
  3. //连接数据库部分,注意使用了gbk编码
  4.  
  5. $conn = mysql_connect('localhost', 'root', 'root') or die('bad!');
  6.  
  7. // 设置字符集
  8. mysql_query("SET NAMES 'gbk'");
  9.  
  10. //选择数据库
  11. mysql_select_db('man', $conn);
  12.  
  13. //准备sql语句
  14.  
  15. $id = isset($_GET['id']) ? addslashes($_GET['id']) : 1;
  16.  
  17. $sql = "SELECT * FROM news WHERE tid='{$id}'";
  18. echo $sql;
  19. echo '<br>------------------------------------------------<br>';
  20. //提交查询
  21. $result = mysql_query($sql, $conn) or die(mysql_error());
  22.  
  23. ?>
  24.  
  25. <!DOCTYPE html>
  26.  
  27. <html>
  28.  
  29. <head>
  30. <meta charset="gbk" />
  31. <title>文明古都</title>
  32. </head>
  33. <body>
  34.  
  35. <?php
  36. //处理结果集
  37. while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
  38. echo "<h1>{$row['title']}<p>{$row['content']}</h1><p>\n";
  39. }
  40.  
  41. //释放结果集
  42. mysql_free_result($result);
  43. //关闭数据库
  44. mysql_close($conn);
  45.  
  46. ?>
  47.  
  48. </body>
  49. </html>

8.在命令行中打开数据库,查看是否是GBK编码

0 (8).png0 (9).png

9.访问一下所搭建好的靶机,http://localhost/2020/1/china.php?id=1

截图20190320222501984.jpg

10.进行检测一下是否可以注入,看到此页面说明成功了!

http://localhost/2020/1/china.php?id=1%83%27

截图20190320222552607.jpg

11.之后进行正常的SQL注入,使用SQL注入的语句。

具体可参考:

https://mp.csdn.net/console/editor/html/106992794

结束!!!

猜你喜欢

转载自blog.csdn.net/weixin_43650289/article/details/107889282