hectf2020部分简单题题解wp
HECTF
我真是又菜又没时间肝题。。又又又只水了波简单题。。。
Reverse
1、Hello_Re

file查一波 32bit,拖进IDA中 老规矩shift+F12 查看字符串:

跳转 F5查看
scanf("%s", &v4);
if ( strlen(&v4) == 25 && judge0(&v4, 26) )
puts("Congratulations! You found the flag!");
双击 judge0 进入:
if ( *a1 != 67 )
goto LABEL_12;
if ( a1[1] != 84 )
return 0;
if ( a1[2] == 70 && a1[3] == 123 && a1[24] == 125 && judge1(a1) )
result = 1;
else
LABEL_12:
result = 0;
return result;
可以看到: 最后解出来的flag 前四位铁定是 ASCII为 : 76 84 70 123 最后一位为 125
即:
CTF{20个字符}
继续双击judge1跳转
for ( i = 0; i <= 25; ++i )
{
if ( *(_BYTE *)(i + a1) )
*(_BYTE *)(i + a1) ^= (_BYTE)i + 1;
}
for ( j = 0; j <= 25; ++j )
{
if ( *(char *)(j + a1) != arr[j] )
return 0;
}
return 1;
很显然 arr[j] 是个关键数组,先是对数组a1进行异或处理,再把 把数组a1赋值数组arr。因此我们只要搞清楚
数组arr是什么,再对其进行一次异或处理即可。
双击进入,建议和Hex窗口结合起来看


【踩坑】以下是 IDA6.6老版本显示,与我上面所用的7.0版本显示不同。

一开始一直把空的那个 当成 ' ' 来处理,但是得到的flag是不正确的。后来经过版本考察,要当成 '',即6.6版本中的样子。 最后脚本如下:
#include <stdio.h>
#include <stdlib.h>
int main() {
char arr[25] = {'B','V','E','','2','n','N','=','V',';','x','S','L','O','P','b','t','s','','K','s','!','V','','d'};
int i;
int a1[25];
for ( i = 0; i <= 25; ++i ){
*(char *)(i + a1)= arr[i];
}
for(i=0;i<=25;i++){
if(*(int*)(a1+i))
*(int*)(a1+i)^=(int)i + 1;
printf("%c",a1[i]);
}
return 0;
}
得到flag 为:
CTF{7hI5_1s_AA_real_f7Ag}
2、game1

file一波 发现是32bit ,拖进IDA 。shift+12查看字符串

点击进入。 F5查看伪代码:
int __cdecl flag(int *a1)
{
int result; // eax
signed int v2; // [esp+14h] [ebp-14h]
signed int i; // [esp+18h] [ebp-10h]
int v4; // [esp+1Ch] [ebp-Ch]
v2 = strlen(_data_start__);
for ( i = 0; i < v2; ++i )
{
if ( _data_start__[i] <= 96 || _data_start__[i] > 122 )
{
if ( _data_start__[i] <= 64 || _data_start__[i] > 90 )
LOBYTE(v4) = _data_start__[i];
else
v4 = (_data_start__[i] - 65 + a1[i % 5]) % 26 + 97;
}
else
{
v4 = (_data_start__[i] - 97 + a1[i % 5]) % 26 + 65;
}
_data_start__[i] = v4;
}
gotoxy(24, 5);
color(20);
if ( _data_start__[0] != 72
|| _data_start__[1] != 69
|| _data_start__[2] != 67
|| _data_start__[3] != 84
|| _data_start__[4] != 70 )
{
result = printf("No! you're cheating!");
}
else
{
result = printf("You win! The flag is %s ", _data_start__);
}
return result;
}
注意到 _data_start__ 是个关键。flag就在其中。 双击 查看,得到
bxukv{pW1SiFW_J0_jV}
很显然 这是原始数据,也就是说 bxukv{pW1SiFW_J0_jV} 这串字符串经过编码 变为flag
也很明显, 最后验证钟 写了开头五个字符 其ASCII为 : 72、69、67、84、70 即为
HECTF而 在上述编码过程钟,出现的
a1[i % 5]恰好可以通过bxukv与HECTF相对应得到
搞清其原理,话不多说,直接上脚本:
data = 'bxukv{pW1SiFW_J0_jV}'
str = 'HECTF'
a1 = []
len = len(data)
for i in range(0,5):
m = ord(str[i:i+1:1])-65-ord(data[i:i+1:1])+97
if (m<0):
m+=26
a1.append(m)
得到 a1 [6,7,8,9,10]
data = 'bxukv{pW1SiFW_J0_jV}'
str = 'HECTF'
a1 = [6,7,8,9,10]
len = len(data)
flag =''
# for i in range(0,5):
# m = ord(str[i:i+1:1])-65-ord(data[i:i+1:1])+97
# if (m<0):
# m+=26
# a1.append(m)
for i in range(0,len):
n = ord(data[i:i+1:1])
if (n<=96 or n>122):
if (n <=64 or n >90):
flag+= chr(n)
else:
flag+= chr((n-65+a1[i%5]) % 26 +97)
else:
flag+= chr((n-97+a1[i%5]) % 26 +65)
print(flag)
跑出flag
HECTF{We1cOme_t0_Re}
web
1、签到

点进进入看到一个登录界面

ctrl+u 查看源码, 发现 <!-- 15970773575 --> 得到手机号码 15970773575
之后,点击 忘记密码,跳转到 /findpass.php 页面。

也是查看源码,发现发送验证码功能子虚乌有。 看来 四位数验证码 是爆破密码的线索。
对其进行抓包, 爆破

于是 将 233 验证码输入,便跳转到 updatepassword.php 页面

自己修改密码,用新密码登录即可拿到flag

HECTF{a9a102c0c06fcf6c8072c30f0a52f1f2}
2、ezphp

<?php
error_reporting(0);
highlight_file(__file__);
include('flag.php');
$string_1 = $_GET['str1'];
$string_2 = $_GET['str2'];
if($_GET['param1']!==$_GET['param2']&&md5($_GET['param1'])===md5($_GET['param2'])){
if(is_numeric($string_1)){
$md5_1 = md5($string_1);
$md5_2 = md5($string_2);
if($md5_1 != $md5_2){
$a = strtr($md5_1, 'cxhp', '0123');
$b = strtr($md5_2, 'cxhp', '0123');
if($a == $b){
echo $flag;
}
else {
die('you are close');
}
}
else {
die("md5 is wrong");
}
}
else {
die('str1 not number');
}
}
else {
die('you are wrong!');
}
?>
you are wrong!
这里有两个考点。 第一个就是得绕过
$_GET['param1']!==$_GET['param2']&&md5($_GET['param1'])===md5($_GET['param2'])
注意,这里是 !== 和 === 是强比较,我们可以利用数组绕过
即: error===error ,那么payload为:
param1[]=1¶m2[]=2
第二个考点就是md5比较
# is_numeric($string_1)
$a = strtr($md5_1, 'cxhp', '0123');
$b = strtr($md5_2, 'cxhp', '0123');
if($a == $b){
echo $flag;
}
得找到一个数 md5加密后 开头是 ce 这样就可以转换到 0e
即: a与b均为 0e开头 绕过相等
md5加密后以0E开头:
- QNKCDZO
- 240610708
- s878926199a
- s155964671a
- s214587387a
- s214587387a
则:payload为:
str1=9427417&str2=QNKCDZO
最后的payload就是:
http://121.196.32.184:8081/index.php?param1[]=1¶m2[]=2&str1=9427417&str2=QNKCDZO
得到flag:
hectf{b0c65ccf32a96a1f8dc3326f16ed4498}
3、ssrfme

<?php
error_reporting(0);
highlight_file(__FILE__);
//try flag.php
function filter($url) {
$match_result=preg_match('/^(http|https)?:\/\/.*(\/)?.*$/',$url);
if (!$match_result)
{
die('url fomat error');
}
try
{
$url_parse=parse_url($url);
}
catch(Exception $e)
{
die('url fomat error');
return false;
}
$hostname=$url_parse['host'];
$ip=gethostbyname($hostname);
$int_ip=ip2long($ip);
return ip2long('127.0.0.0')>>24 == $int_ip>>24 || ip2long('10.0.0.0')>>24 == $int_ip>>24 || ip2long('172.16.0.0')>>20 == $int_ip>>20 || ip2long('192.168.0.0')>>16 == $int_ip>>16;
}
$url = $_GET['url'];
if(!filter($url)){
echo file_get_contents($url);
}
?> url fomat error
构造payload:
?url=http://0.0.0.0/flag.php

得到:
flag{04f3eaef-ec7c-4a44-8b54-062cd19295f3}
misc
1、签到题
直播间即可。
2、png

下载得到一个png 放进010editor 发现最后有一串base64字符串
M2I3OWJkZjhmY2ZkNTVmZH0=
得到:
3b79bdf8fcfd55fd}
显然是后部分的flag
接下来就是要寻找前部分。尝试修改图片高度-----

果然,前部分就出来了。

flag为:
flag{94ed7fdae8f504743b79bdf8fcfd55fd}
3、不说人话

很清楚得到 ook!编码
..... ..... ..... .!?!! .?... ..... ..... ...?. ?!.?. ..... ..... .....
!.!!! !!!!. !!!!! .?... ..... .!?!! .?... ..... ?.?!. ?..!. ?.... ...!?
!!.?! !!!!! ?.?!. ?!!!! !!!!! !!.?. ..... ..... ....! ?!!.? ..... .....
....? .?!.? ..... ...!. ?.... ..... ....! ?!!.? !!!!! !!!!! !!?.? !.?!!
!!!!! .?... ....! ?!!.? !!!!! !?.?! .?!!! !!!!. ?.... ..... !?!!. ?!!!!
!!!!? .?!.? !!!!! !!!!! !!!!! .?... ..... ..... ....! ?!!.? ..... .....
..... .?.?! .?... .!.?. ..... ...!? !!.?! !!!!! !!?.? !.?!! !!!!! !!.?.
..... ..... ..!?! !.?!! !!!!! !!!!! ?.?!. ?!!!! !!!!! !!!!! !!!!! !!.?.
..... ..... ..... .!?!! .?... ..... ..... ...?. ?!.?. ...!. ?.... .....
!?!!. ?!!!! !!!!? .?!.? !!!!! !!!!. ..... ...!. ?.... ...!? !!.?. .....
?.?!. ?.... ..... ...!. ..... ..... ....! .!!!! !!!!! !!!!! !!!!! .....
....! .?... ..... ..... ....! ?!!.? !!!!! !!!!! !!!!! !?.?! .?!!! !!!!!
!.?.. ..... ..... .!?!! .?... ..... ....? .?!.? ..... ..... ..... .....
..!.? ..... ..... ...!? !!.?! !!!!! !!!!! !?.?! .?!!! !!.!! !!!!! !!!!!
!!!!! ..... ..!.? ..... ..... ..... !?!!. ?.... ..... ..... ?.?!. ?....
..... ..... ....! .?... ....! ?!!.? !!!!! !?.?! .?!!! .!!!! !!!.? .....
..... ..... !?!!. ?!!!! !!!!! !!!!! ?.?!. ?!.?. ..... ..... ..... .!?!!
.?... ..... ..... ...?. ?!.?. ..... ..... ..... ..... ..... !.?.
HECTF{TH1s_1s_crypt0_914nda0}
crypto
1、rsa

下载得到 n、e、c
n = 11419768903339716189261532371559705252086398275876008505047375123074727093589680611869748263351554093957968142343831331654606932684767042958427409579115435445187908134556329979271179879129295667476493886787230948520371350715808988496083694717544298343260369816980228394498856751096191942011545898984240281874509791880690092840536597771674772617299407710771426964764347566008897012753022763270832647775571317162594044338095870404550665457899223394942640876850692848671826594750236910363027949459768124646230555766323417693441861436560072288812137944884954974348317322412816157152702695143094487806945533233359294549423
e = 65537
c = 575061710950381118206735073806398116370706587076775765253483131078316908073202143802386128272374323616239083134747318254436706806781744501903333604772961927966747648954315962269321297121495398057938617145017999482722197661065698707836824505023856306403892307944203245563411961302499347604417024064678999003637933185177922884103362203639349298263339808508185861692596967147081382566246627668898774233029198694500565511361867375668367875805985660705137109665107860799277624050210666866958502948062330037309873148963011192405012811945540153592090345668265964477204465327474208098404082920129178960510763496025906621820
分解n得到p、q
跑脚本:
import libnum
from Crypto.Util.number import long_to_bytes
c = 575061710950381118206735073806398116370706587076775765253483131078316908073202143802386128272374323616239083134747318254436706806781744501903333604772961927966747648954315962269321297121495398057938617145017999482722197661065698707836824505023856306403892307944203245563411961302499347604417024064678999003637933185177922884103362203639349298263339808508185861692596967147081382566246627668898774233029198694500565511361867375668367875805985660705137109665107860799277624050210666866958502948062330037309873148963011192405012811945540153592090345668265964477204465327474208098404082920129178960510763496025906621820
e = 65537
q = 2499568793
p = 4568695582742345507136251229217400959960856046691733722988345503429689799935696593516299458516865110324638359470761456115925725067558499862591063153473862179550706262380644940013531317571260647226561004191266100720745936563550699000939117068559232225644277283541933064331891245169739139886735615435506152070330233107807124410892978280063993668726927377177983100529270996547002022341628251905780873531481682713820809147098305289391835297208890779643623465917824350382592808578978330348769060448006691307027594085634520759293965723855183484366752511654099121387261343686017189426761536281948007104498017003911
n = q * p
d = libnum.invmod(e, (p - 1) * (q - 1))
m = pow(c, d, n) # m 的十进制形式
string = long_to_bytes(m) # m明文
print(string) # 结果为 b‘ m ’ 的形式
#print(libnum.n2s(m)) #(n2s将数值转化为字符串)
得到flag:
flag{8fb873baba0df4a6423be9f4bd525d93}
大佬们轻喷。。。下次一定一定一定好好肝!!!
【转载请放链接】 https://www.cnblogs.com/Jlay/p/HECTF_2020_eywp.html
hectf2020部分简单题题解wp的更多相关文章
- 洛谷 P5057 [CQOI2006]简单题 题解
P5057 [CQOI2006]简单题 题目描述 有一个 n 个元素的数组,每个元素初始均为 0.有 m 条指令,要么让其中一段连续序列数字反转--0 变 1,1 变 0(操作 1),要么询问某个元素 ...
- unctf2020 部分简单题题解
unctf2020 水一波简单题..菜狗前来报道..大佬轻喷..如果有时间做题就好了呜呜呜 misc 1.baba_is_you 题目告诉我们,了解png文件格式. 下载得到一张png格式的图片. 用 ...
- Codeforces Round #599 (Div. 2)的简单题题解
难题不会啊…… 我感觉写这个的原因就是因为……无聊要给大家翻译题面 A. Maximum Square 简单题意: 有$n$条长为$a_i$,宽为1的木板,现在你可以随便抽几个拼在一起,然后你要从这一 ...
- LOJ P10117 简单题 题解
每日一题 day15 打卡 Analysis 树状数组 用树状数组来维护每个字符变化的次数,如果是偶数就是0,奇数就是1 #include<iostream> #include<cs ...
- 一道简单的CTF登录题题解
一.解题感受 这道题50分,在实验吧练习场算比较高分,而且通过率只有14%,比较低的水平. 看到这两个数据,一开始就心生惬意,实在不应该呀! 也是因为心态原因,在发现test.php之后,自以为在SQ ...
- [BZOJ2683][BZOJ4066]简单题
[BZOJ2683][BZOJ4066]简单题 试题描述 你有一个N*N的棋盘,每个格子内有一个整数,初始时的时候全部为0,现在需要维护两种操作: 命令 参数限制 内容 1 x y A 1<=x ...
- 又一道简单题&&Ladygod(两道思维水题)
Ladygod Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit S ...
- 【BZOJ1176】[Balkan2007]Mokia/【BZOJ2683】简单题 cdq分治
[BZOJ1176][Balkan2007]Mokia Description 维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值.修改操作数M<=1600 ...
- 【LG4148】简单题
[LG4148]简单题 题面 洛谷 题解 \(kdt\)模板题呀... #include <iostream> #include <cstdio> #include <c ...
随机推荐
- 【Azure 批处理 Azure Batch】在Azure Batch中如何通过开始任务自动安装第三方依赖的一些软件(Windows环境)
准备条件 Azure Batch账号 需要安装的软件包(zip)文件,里面包含该软件的msi安装文件, 此处使用python.msi 版本 3.3.3 作为例子(https://www.python. ...
- poj2411 Mondriaan's Dream (轮廓线dp、状压dp)
Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 17203 Accepted: 991 ...
- STC 核心板 入门记
写在开始 STC核心板,它的软件十分全面,想要什么都有,非常适合新手入门. 上一次电赛刚结束,现在反正也啥也不太会,干脆学个这个吧. 顺便写篇博客记录一下. 记录第一次烧写 周四下单,周六到货.中午拿 ...
- Google面试题(选自公众号)
date: 2018-12-14 13:34:56 updated: 2018-12-14 13:34:56 Google面试题(选自公众号) 问题 把你的手机拨号页想象成一个棋盘.棋子走只能走&qu ...
- 教师专用录微课及剪辑软件推荐-camtasia中文汉化破解版免费下载及使用教程
教师专用录微课软件,微课制作软件是一款能够制作文字.图形.动画.音视频等的软件,支持对ppt.word.flash的导入和录制,实时同步录制操作区文字.图形.动画.音视频.鼠标轨迹.声音及外部语音等动 ...
- Class的继承
Class 的继承 简介 Class 可以通过extends关键字实现继承,这比 ES5 的通过修改原型链实现继承,要清晰和方便很多. class Point { } class ColorPoint ...
- Eureka实现注册中心
CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),三者不可得兼.它是分布 ...
- Kubernetes 配置私有镜像仓库时,没有权限访问的问题
使用 K8S 部署服务时,如果指定的镜像地址是内部镜像仓库,那么在下载镜像的时候可能会报权限错误.这是由于在 K8S 中部署服务时,K8S 需要到 Harbor 中进行一次验证,这个验证与节点中使用 ...
- 合适的LoRa网关应该怎么选择
LoRa网关是什么 LoRa网关有时也被称之为lora基站或者lora集中器,它在lora星形组网中处于核心位置,是数据终端和服务器之间的一个信息桥梁.LoRa网关使用的是不同扩频因子,因为不同的扩频 ...
- go-zero 是如何追踪你的请求链路的
go-zero 是如何追踪你的请求链路 微服务架构中,调用链可能很漫长,从 http 到 rpc ,又从 rpc 到 http .而开发者想了解每个环节的调用情况及性能,最佳方案就是 全链路跟踪. 追 ...