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] 恰好可以通过 bxukvHECTF 相对应得到


搞清其原理,话不多说,直接上脚本:


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&param2[]=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&param2[]=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://blog.csdn.net/weixin_45530599/article/details/110143045

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的移动操作系统,主要应用于移动设备,如智能手机和平板电脑。该系统最初由安迪·鲁宾开发,后被Google公司收购并注资,随后与多家硬件制造商、软件开发商及电信营运商共同研发改良。 Android操作系统的特点包括: 开放源代码:Android系统采用开放源代码模式,允许开发者自由访问、修改和定制操作系统,这促进了技术的创新和发展,使得Android系统具有高度的灵活性和可定制性。 多任务处理:Android允许用户同时运行多个应用程序,并且可以轻松地在不同应用程序之间切换,提高了效率和便利性。 丰富的应用生态系统:Android系统拥有庞大的应用程序生态系统,用户可以从Google Play商店或其他第三方应用市场下载和安装各种各样的应用程序,满足各种需求。 可定制性:Android操作系统可以根据用户的个人喜好进行定制,用户可以更改主、小部件和图标等,以使其界面更符合个人风格和偏好。 多种设备支持:Android操作系统可以运行在多种不同类型的设备上,包括手机、平板电脑、智能电视、汽车导航系统等。 此外,Android系统还有一些常见的问,如应用崩溃、电池耗电过快、Wi-Fi连接问、存储空间不足、更新问等。针对这些问,用户可以尝试一些基本的解决方法,如清除应用缓存和数据、降低屏幕亮度、关闭没有使用的连接和传感器、限制后台运行的应用、删除不需要的文件和应用等。 随着Android系统的不断发展,其功能和性能也在不断提升。例如,最新的Android版本引入了更多的安全性和隐私保护功能,以及更流畅的用户界面和更强大的性能。此外,Android系统也在不断探索新的应用场景,如智能家居、虚拟现实、人工智能等领域。 总之,Android系统是一种功能强大、灵活可定制、拥有丰富应用生态系统的移动操作系统,在全球范围内拥有广泛的用户基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值