继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

记一道SQL注入题目

那怎么办嘛
关注TA
已关注
手记 39
粉丝 7202
获赞 414

今天笔者和大家分享的是一道来自2017年全国大学生信息安全竞赛有关SQL注入的题目,题目地址http://120.132.56.20:1515 有兴趣的小伙伴可以自己尝试做一下。
本题知识点1:sql注入 2.svn源码泄露
审题,发现题目有如下几个页面
图片描述图片描述图片描述查看源码似乎也没有得到有效的线索,于是使用burp抓包查看有交互的地方,在your name 界面返回了sql语句,判断这道题目与sql注入有关
图片描述尝试单引号注入,可以发现单引号被过滤成了\
图片描述通过测试我们也可以发现,name允许的长度为11,否则会弹出警告name too long图片描述笔者做到这里有点卡住了没有了思路,后来发现这道题也涉及到了另外一个知识点,.svn源码泄露,恢复源码。图片描述接下来我们对其进行审计
首先在index.php中我们看到了这样一段代码
图片描述大致意思是调用了session函数,如果帽子的颜色是绿色则会显示绿色帽子的图片,如果是黑色则会显示flag,那么我们去找一下在哪里这个session函数还出现过,在login.php文件中我们看到了这个session函数,对如下一段代码进行审计

if (isset($_POST["name"])){
  $name = str_replace("'", "", trim(waf($_POST["name"])));
  

在这段代码中使用了trim函数以及str_replace函数,来看一下他们的语法
trim

定义和用法
trim() 函数移除字符串两侧的空白字符或其他预定义字符。
相关函数:
ltrim() - 移除字符串左侧的空白字符或其他预定义字符
rtrim() - 移除字符串右侧的空白字符或其他预定义字符
语法
trim(string,charlist)

参数 描述
string 必需,规定要检查的字符串
charlist 可选。规定从字符串中删除哪些字符。如果被省略,则移除以下所有字符: “\0” - NULL       “\t” - 制表符      “\n” - 换行      “\x0B” - 垂直制表符      “\r” - 回车      " " - 空格

str_replace

定义和用法
str_replace() 函数以其他字符替换字符串中的一些字符(区分大小写)。
语法
str_replace(find,replace,string,count)

参数 描述
find 必需,规定要查找的值
replace 必需,规定替换 find 中的值的值
string 必需,规定被搜索的字符串
count 可选,对替换数进行计数的变

在了解了上述语法以后我们来看这句代码,首先通过waf对name值进行了处理,接下来通过trim函数处理掉了两边的空格,接下来通过str_replace函数将单引号替换为了空格。
接下来我们看waf的代码

function waf($value){
    $Filt = "\bUNION.+SELECT\b|SELECT.+?FROM";
    if (preg_match("/".$Filt."/is",$value)==1){
        die("found a hacker");
    }
    $value = str_replace(" ","",$value);  
    return $value;
}

\b

匹配一个单词的边界,也就是指单词和空格之间的位置,例如’er\b’可以匹配‘’never”中的er但是不能匹配verb中的er

**.+**两边的字符一个当开头一个当结尾

以及这里有很多的正则比配笔者就不一一赘述了,带大家可以自行查阅资料(其实这个正则匹配只是想告诉大家绕过了什么,有经验的同学往往不会一个个详细查看)
根据以上内容我们最后构造payload or/**/1#'
图片描述发现返回了godjob说明注入成功,提交payload便可以得到flag图片描述

打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP