决斗场 - 实验吧 WEB 程序逻辑问题

题目链接:http://www.shiyanbar.com/ctf/62


点开题目链接,发现是一个类似于登陆的界面:


首先以之前的一道题:登陆一下好吗??的思路,猜测后台代码为:

select * from user where username='str' and password='pastr'

我们在username和password上都输入 a'=',然而……不对,好吧,换一个思路。

常规的思路走起:查看请求和响应头信息,查看源码。

在看源码的时候发现了一个不得了的东西:


源码中有一个没有进行封闭的<a>标签,这个并没有在前端网页中正常显示,那么这个链接的内容是什么呢,我们点开,发现内容是PHP代码,那么问题暂时变更为了PHP审计:


仔细查看PHP代码,这段代码直观展示了后台是如何进行,这里的后台逻辑是先将前端的Username值和Password经过MD5加密后的值传入后台,通过sql语句查询数据库中的username对应的password值,然后再在后台和Password的值进行对比,观察sql语句:select pw from php where user='$user'。这句话明显是存在sql注入的,且不存在任何的过滤,我们需要做的只需要使得这句话返回的值和前端Password值的md5加密后的值相同就行了。那么这里我们的思路就是直接利用引号的开闭性,和#的注释得到答案:

username: Username' union select md5(1) #

passname: 1

轻松的得到了Flag:


猜你喜欢

转载自blog.csdn.net/raalghul/article/details/78867217