2018小训―2017_“百度杯”CTF比赛_十月场_Login

匿名 (未验证) 提交于 2019-12-03 00:40:02

题目源:  https://www.ichunqiu.com/battalion?q=2725  i春秋上滴题目

小工具:  Burp Suite(抓包神器)、http://base64.xpcha.com/(base64在线解码网站)、https://tool.lu/coderunner/(php在线编写运行网站)

思路点用黄色加粗标记、操作点用绿色加粗标记。

解题的流程:

    1.登录题,输username:admin password:admin没什么软用(前期各种尝试判断可能的题型),检查源码,在源码的最下面有发现,ps:一开始还真没看见藏在最小面的小惊喜,提醒审计的时候要确认你真的看全了。

     尝试username:test1 password:test1,登录成功!

    2.就一个掀桌子的画面,检查源码,啥也没有。怀疑人生,,应用层的看完了,看看数据层有没有惊喜,查看数据包使用BurpSuite抓包(抓的是掀桌子的那个包,就是刷新掀桌子,截取数据包在BurpSuit里查看response)。

     注意右边有个show:0返回,这是什么意思呢?状态标记吧,如果提交一个show:1会返回什么呢?

    3.更改数据包的内容,添加一项show: 1;(注意英文字符,冒号后面有一个空格)

     在右边返回了一份源码。

    4.观察分析这份源码,阔以发现

if(isset($requset[‘token‘])) {   $login = unserialize(gzuncompress(base64_decode($requset[‘token‘])));   //login是requset中token对应的字符串,经过解base64、反gzuncompress、反serialize出来的   $db = new db();   $row = $db->select(‘user=\‘‘.mysql_real_escape_string($login[‘user‘]).‘\‘‘);   if($login[‘user‘] === ‘ichunqiu‘)//产生flag的判断条件,那么login是怎么来的?   {     echo $flag;   }else if($row[‘pass‘] !== $login[‘pass‘]){     echo ‘unserialize injection!!‘;   }else{     echo;   } }else{   header(‘Location: index.php?error=1‘); }

ichunqi依次serialize、gzcompress、base64_encode。在线网站写个php脚本

$key=array("user"=>"ichunqiu"); $a=base64_encode(gzcompress(serialize($key))); echo $a;

    5.将结果写入抓的数据包,在cookie中添加token=XXXXXXXXXX;(脚本的结果)

     注意token前面有个空格,结尾有个分号。在右框的最下方阔以看见flag。

原文:https://www.cnblogs.com/goodswarm/p/9288542.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!