2018小训—2017_“百度杯”CTF比赛_十月场_Login
Posted goodswarm
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018小训—2017_“百度杯”CTF比赛_十月场_Login相关的知识,希望对你有一定的参考价值。
题目源: 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。
以上是关于2018小训—2017_“百度杯”CTF比赛_十月场_Login的主要内容,如果未能解决你的问题,请参考以下文章
“百度杯”CTF比赛 十月场_GetFlag(验证码爆破+注入+绝对路径文件下载)