SQLmap参数学习笔记

文章目录

  • SQLmap参数学习笔记
  • 简介
  • Options - 设置
    • 显示等级
  • Target - 目标
    • 对POST请求进行注入
    • HTTPS检测
  • Request - 请求
    • HTTP方法
    • HTTP数据
    • 参数分割符
    • HTTP请求头
      • cookie
      • User-Agent
      • Host
      • Referer
      • 额外的HTTP头
    • HTTP协议身份认证
      • 身份验证
      • 私钥认证
    • 忽略HTTP状态码
    • HTTP(S)代理
    • Tor匿名网络
    • HTTP连接
      • 请求延迟
      • 连接超时
      • 超时重连
    • 随机更改给定参数的值
    • 过滤目标
    • 会话处理
    • URL编码
    • 执行Python代码
    • 绕过反CSRF保护机制
    • 强制使用SSL/HTTPS
  • Optimization - 优化
    • 一键优化
    • 输出预测
    • 会话保持
    • 页面返回判断
    • 空连接
    • 并发请求
  • Injection - 注射
    • 指定测试参数
    • URI注入点
    • 任意注入点
    • 指纹识别
      • 指定数据库类型
      • 指定操作系统
    • 参数检测
      • 使用大数字使值无效
      • 使用逻辑运算使值无效
      • 使用随机字符串使值无效
    • 关闭payload转换机制
    • 关闭编码逃逸
    • 定制payload
    • 篡改注入数据
  • Detection - 侦查
    • 侦查等级
    • 风险
    • 页面比较
  • Techniques - 技巧
    • SQL注入技术
    • 时间盲注
    • 联合查询
    • DNS攻击
    • 二阶攻击
  • Fingerprint - 指纹
  • Enumeration - 枚举
    • 检索全部
    • banner
    • 数据库枚举
    • 脱库
  • Brute force - 暴力破解
  • UDF injection - 自定义函数注入
  • File system access - 文件系统访问
  • Operating system access - 操作系统访问
  • General - 常规参数
  • Miscellaneous - 杂项

简介

SQLmap是开源SQL注入漏洞检测/利用工具

可以检测动态页面中的GET/POST参数/cookie/User-Agent/Reeferer

数据榨取

文件系统访问

操作系统命令执行

XSS漏洞检测

五种漏洞检测技术

  • 基于布尔的盲注检测
  • 基于时间的盲注检测
    • ’ and (select * from (select(sleep(3)))a–+
  • 基于错误的检测
  • 基于UNION联合查询的检测
    • 适用于通过循环直接输出联合查询结果,否则只显示第一项结果
  • 基于堆叠查询的检测
    • ;堆叠多个查询语句
    • 适用于非SELECT的数据修改/删除的操作

Options - 设置

-h / --help >> 显示常用参数的帮助信息

-hh >> 显示所有参数的帮助信息

–version >> 显示版本号

-v >> 设置显示信息的详细级别0-6,默认为1

显示等级

  1. 仅显示python回溯,错误和严重消息
  2. 还显示信息和警告消息
  3. 还显示调试消息
  4. 还显示注入的payload
  5. 还显示HTTP请求
  6. 还显示HTTP响应的头
  7. 还显示HTTP响应的页面内容

-v代替-v 2,-vv代替-v 3,-vvv代替-v 4…


Target - 目标

-u / --url >> 指定目标URL地址

-d >> 连接数据库

  • sqlmap -d “mysql://user:passwd@1.1.1.1:3306/dvwa”

-l >> 可以对Burp/WebScarab代理的log记录进行检测

-m >> 扫描txt文件中的多个目标

-r >> 从文件中读取HTTP请求(POST注入时)

-g >> 将google搜索的结果作为URL地址进行检测

-c >> 读取配置文件作为扫描参数

  • sqlmap默认配置文件/etc/sqlmap/sqlmap.conf

  • sqlmap不会自动调用配置文件

使用-u参数时,最好将URL地址用双引号括起来

对POST请求进行注入

方法一:对Burp-Log进行检测

sqlmap -l proxy.txt

方法二:对txt文本中读取请求进行检测

sqlmap -r post.txt

方法三:使用--data参数提交POST请求

sqlmap -u "http://192.168.1.4/mutillidae/index.php?page=user-info.php" --data="username=1&password=1&login-php-submit-button=Login"

HTTPS检测

当目标站点为HTTPS时使用

sqlmap -u "1.1.1.1/index.php?id=3" --force-ssl

Request - 请求

HTTP方法

--method

​ 强制改变HTTP请求的方式

HTTP数据

--data

​ 用于提交POST请求参数(也支持GET请求)

​ --data=“username=123&password=123”

参数分割符

--param-del

​ sqlmap默认识别的URL参数分隔符为&,使用该参数可以改变这个默认值

HTTP请求头

cookie

--cookie

​ 设置请求头中的cookie信息

--cookie-del

​ 设置用于分隔cookie的分隔符,默认以;分隔

--live-cookies

​ 用于实时更新服务器返回的set-cookie值

--load-cookies

​ 提供一个包含Netscape/wget格式的cookie的特殊文件

--drop-set-cookie

​ 忽略响应中的set-cookie,默认情况下在扫描过程中发现服务器响应的set-cookie时,会提示是否更新该cookie

–level设置为2以上级别时,会对cookie注入进行检测

User-Agent

--user-agent / -A

​ 设置user-agent头

​ sqlmap默认为user-agent为sqlmap/1.5.5.1#dev (http://sqlmap.org),容易被目标服务器过滤掉

--random-agent

​ 设置一个随机的user-agent

​ kali中该字典位于/usr/share/sqlmap/txt/user-agents.txt

--mobile

​ 通过user-agent将客户端模拟为手机客户端

–level设置3或以上级别时,会对uesr-agent头注入进行检测

Host

--host

​ 设置请求头中host的值

–level=5时,会对host头进行检测

Referer

--referer

​ 伪造referer头

–level>=3时,会对referer头进行检测

额外的HTTP头

--headers / -H

​ 提供额外的请求头,每个头之间用换行符分隔

--headers="Host:1.1.1.1\nUser-Agent:aaaaaa\n"

这里的头区分大小写,如果写得不标准,sqlmap将使用默认值

HTTP协议身份认证

身份验证

--auth-type

​ 指定HTTP协议中身份验证机制的类型 - Basic - Digest - NTLM

--auth-cred

​ 设置HTTP登陆凭证(username:password)

sqlmap -u "http://192.168.1.4/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" -p id --auth-type=Basic --auth-cred="admin:password"

私钥认证

--auth-file

​ 读取一个客户端证书和用于身份验证的私钥(PEM格式)

忽略HTTP状态码

--ignore-code

​ 如果测试目标返回导致sqlmap运行出现问题的HTTP错误认证时,如401,可以忽略该站点并继续进行测试

HTTP(S)代理

--proxy

​ 设置一个代理 - http://url:port

--proxy-cred

​ 如果设置的代理需要身份验证,可以用该参数提交 - username:password

--proxy-file

​ 从文件中读取代理列表

--ignore-proxy

​ 忽略操作系统级别的代理服务(如局域网内测试时)

--proxy-freq

​ 在给定的代理列表中使用不同的代理进行请求

Tor匿名网络

--tor

​ 使用Tor作为代理服务器,需要先配置Tor客户端及代理软件(Privoxy等)

``–tor-port`

​ 手动设置Tor代理的端口

--tor-type

​ 手动设置Tor代理的类型 - SOCKS5(默认) - SOCKS4 - HTTP

--check-tor

​ 检测tor代理是否配置正确

HTTP连接

请求延迟

--delay

​ 每个HTTP(s)请求之间的延迟时间,单位:秒,浮点数,默认无延迟

连接超时

--timeout

​ 请求超时时间,单位:秒,默认30秒,浮点数

超时重连

--retries

​ 超时重连次数,默认3次

随机更改给定参数的值

--randomize

​ 长度/类型与原始值保持一致前提下,指定每次请求随机取值的参数名

一些应用程序可能会过滤多次参数相同的请求

过滤目标

--scope

​ 过滤日志内容,通过正则表达式筛选扫描对象

​ 使用python正则表达式指定用于过滤所需主机的正则表达式

​ sqlmap -l burp.log --scope="(www)?\.target\.(com|net|org)"

会话处理

检测和盲注会产生大量失败请求,当达到一定值时,服务器端可能会中止会话(销毁session)

--safe-url

​ 设置安全URL,即发送正常(非注入)的请求的目标URL

--safe-post

​ 将POST数据发送到给定的安全URL地址

--safe-req

​ 从文件加载并使用安全的HTTP请求

--safe-freq

​ 设置一个频率N,每发送N次注入请求后,发送一次正常请求到安全URL

此时,sqlmap将在每个预定数量的请求中访问某个安全URL,而无需对其进行任何类型的注入

URL编码

--skip-urlencode

​ 在RFC标准中,GET方法会对传输内容进行编码,但某些应用程序不遵守该标准,使用原始字符串提交数据,此时需要使用此开关

执行Python代码

--eval

​ 每次请求前执行指定的python代码

​ 每次请求更改或增加新的参数值(时间依赖/其他参数值依赖)

绕过反CSRF保护机制

--csrf-token

​ 设置包含随机标记的隐藏值的名称,当网站为此类字段使用非标准名称的情况下,可以使用该参数

--csrf-url

​ 可以从任意URL地址检索令牌值,如果目标URL最初不包含必需的令牌值,但需要从其他位置提取该令牌值时,可以使用该参数

--csrf-method

​ 在访问CSRF令牌期间使用的HTTP方法

--csrf-retries

​ 重试以进行反CSRF令牌检索,默认0次

强制使用SSL/HTTPS

--force-ssl

​ 强制使用SSL/HTTPS请求

–skip-urlencode >> 跳过payload中的URL编码

–csrf-token= >> 保存反CSRF令牌的参数

–csrf-url= >> 提取反CSRF令牌的URL地址

–csrf-method= >> 在访问CSRF令牌期间使用的HTTP方法

–csrf-retries= >> 重试以进行反CSRF令牌检索,默认0次

–force-ssl >> 强制使用SSL/HTTPS

–chunked >> 使用HTTP分块传输请求编码(POST)

–hpp >> 使用HTTP参数污染方法

–eval= >> 在请求前评估python代码

当Level>=3时才会检测user-agent头和referer头注入


Optimization - 优化

一键优化

-o

​ 直接打开所有的优化(–predict-output/–keep-alive/–null-connection)

输出预测

--predict-output

​ 根据检测方法,将返回值的一些特征与sqlmap的统计表进行比对,以缩小检测的范围

​ 统计表位置: txt/common-outputs.txt

​ 版本名/用户名/密码/privileges/role/数据库名称/表名/列名

与–threads不兼容

会话保持

--keep-alive

​ 使用http(s)长连接,避免重复建立连接的网络开销,但大量长连接会严重占用服务器资源

与–proxy不兼容

页面返回判断

空连接

--null-connection

​ 只获取相应页面的大小值,而非页面具体内容

​ 通常用于盲注判断真/假,可降低网络带宽消耗

–与text-only不兼容

​ 一些特殊的HTTP请求类型,可用于获取HTTP响应的大小而无需获取HTTP正文,通常用于盲注中判断TRUE或FALSE,启用该参数后,sqlmap会尝试两种null连接技术(Range/HEAD),如果目标支持其中一种,则可以节省带宽,提升速度

并发请求

--threads

​ 最大并发线程,默认值为1,建议不超过10

与–predict-output不兼容


Injection - 注射

指定测试参数

-p

​ 当请求中有多个参数(GET/POST/cookie…)时,可以使用-p参数指定要测试的参数,而忽略其它参数

​ 也可以绕过–level限制对cookie或user-agent头进行检测 -p “id,user-agent”

--skip

​ 排除某些参数

--skip-static

​ 排除静态参数

--param-exculue

​ 基于正则表达式排除某些参数,如路过包含字符串token或session的参数 --param-exclude=“token|session”

--param-filter

​ 按位置选择要测试的参数

URI注入点

在特殊情况下(伪静态),注入点位于URI路径中,如果不手动指出,sqlmap不会对URI路径进行检测,如果要检测URI时,需要在检测点后加上*号

sqlmap -u "http://1.1.1.1/apram/value*/param2/value2*/

任意注入点

*号也可以指向GET/POST/HTTP头中的任意注入点

sqlmap -u "http://1.1.1.1" --cokie="param1=value1*;param2=value2"

或者使用-p参数

sqlmap -u "http://test.dvwa.com/vulnerabilities/sqli/?id=1&Submit=Submit#" -p id

指纹识别

指定数据库类型

--dbms

​ 默认情况下,sqlmap会自动检测目标数据库管理系统,如果无法检测出结果或在已知目标数据库的情况下,可以使用该参数指定目标数据库

指定操作系统

--os

​ 指定操作系统

参数检测

使用大数字使值无效

--invalid-bignum

​ 默认情况下,sqlmap在测试类似id=123的参数时,会使用负数来致使参数无效,使用该参数,可以强制使用大整数值为实现相同的结果(id=99999999)

使用逻辑运算使值无效

--invalid-logical

​ 强制使用布尔运算来使参数无效(id=13 AND 1=2)

使用随机字符串使值无效

--invalid-string

​ 强制使用随机字符串来使参数无效(id=asdfhb)

关闭payload转换机制

--no-cast

​ 在检索结果时,sqlmap会将结果强制转换为字符串类型,并将NULL替换为空格

​ 老版本mysql数据库需要开启此开关

关闭编码逃逸

--no-escape

​ 默认情况下,payload中用单引号界定字符串时,sqlmap使用char()编码逃逸的方法替换字符串(当目标服务器过滤单引号时)

​ SELECT ‘foo’ --> SELECT CHAR(102)+CHAR(111)+CHAR(111)

​ 该参数关闭此功能

定制payload

--prefix

​ 自定义payload的前缀

--suffix

​ 自定义payload的后缀

​ 如:

$query = "SELECT * FROM users WHERE id=('".$_GET['id']."') LIMIT 0,1";

​ 此时注入时需要在参数前后加上(‘及’)

sqlmap -u "http://1.1.1.1/1.php?id=1" -p id --prefix "')" --suffix "AND ('abc'='abc"

​ 查询语句为:

$query = "SELECT * FROM users WHERE id=('1') <payload> AND ('abc'='abc') LIMIT 0,1;

篡改注入数据

--tamper

​ 利用给定的脚本进行篡改注入数据,可在一定程序上绕过应用程序的敏感字符过滤/绕过WAF规则等

​ sqlmap自带了一些脚本,位于tamper/


Detection - 侦查

侦查等级

--level

​ 共5个级别,1-5,默认为1,该参数影响使用的payload数量

风险

--risk

​ 共3个级别,默认为1,多数情况下,该值是无害的

​ sqlmap使用的payload在xml/payloads.xml中可以修改

页面比较

--string

​ 提供一个字符串,当查询结果为真时,用于在页面中匹配该字符串

--not-string

​ 提供一个字符串,当查询结果为假时,用于在页面中匹配该字符口中

--regexp

​ 通过正则表达式来代替上述功能

--code

​ 匹配响应码

--text-only

​ 仅针对页面中的文件内容进行比较

--titles

​ 仅针对标题进行比较


Techniques - 技巧

SQL注入技术

--technique

​ 默认情况下,sqlmap测试其支持的所有类型技术,使用该参数可以测试一种或几种特定的SQL注入技术

​ 参数值为:

​ B - 基于布尔的盲注

​ E - 基于错误

​ U - 基于联合查询

​ S - 堆叠查询

​ T - 基于时间的盲注

​ Q - 内联查询

时间盲注

--time-sec

​ 设置时间盲注时的延迟时间(单位秒,默认5秒)

联合查询

--union-cols

​ 默认情况下,sqlmap进行UNION查询时,会查询1-10列,当--level等级提高时,该数值会增加,最多为50列

​ 使用该参数可以指定查询的列数(–union-cols=12-16)

--union-char

​ 默认情况下,sqlmap使用null测试UNION查询,当--level级别提高时,也将使用随机数测试(某些情况下,null会失败,随机数会成功)

​ 使用该参数可以指定特定字符来进行查询(–union-char=abc)

--union-from

​ 某些UNION查询时,需要在FROM子句中强制使用有效且可访问的表名(如Access)

DNS攻击

--dns-domain

​ 当控制了某DNS服务器后,使用此功能可以提高数据榨取的速度

二阶攻击

--second-url

​ 其中一个页面中注入的payload的结果在另一个页面中显示

​ 搜索结果页面URL以获取二阶响应

--second-req

​ 从文件中加载二阶攻击的HTTP请求


Fingerprint - 指纹

-f / --fingerprint

​ 查询数据库的指纹信息


Enumeration - 枚举

检索全部

-a / --all

​ 查询所有可查询的内容(会造成大量请求)

banner

-b / --banner

​ 通过目标根据函数(如version())或环境变量(如@@version)的返回值判断目标的数据库版本信息

数据库枚举

--current-user

​ 查询数据库当前用户

--current-db

​ 查询当前数据库名称

--hostname

​ 查询当前数据库主机名

--is-dba

​ 检测当前会话用户是否为管理员帐户

--users

​ 列出所有数据库用户(会话用户具有包含数据库用户信息表的读取权限)

--passwords

​ 列出并破解数据库用户的密码

--privileges

​ 列出数据库用户权限

-U可以指定用户查询

--roles

​ 列出数据库用户角色(仅目标数据库为Oracle时可用)

--dbs

​ 枚举出所有数据库

--tables

​ 枚举出数据库中所有表

-D可以指定数据库

--exclude-sysdbs可以排除所有系统数据库

当只指定表名没有指定库名时,默认使用当前数据库

--columns

​ 枚举出所有列

-T指定表名

-D指定库名

-C指定列名

--schema

​ 枚举数据库架构如(mysql中的information_schema)

--exclude-sysdbs仅包含非系统数据库的部分架构

--count

​ 检索表中的数据数量

脱库

--dump

​ 保存数据库中的内容

-T - 指定表名

-D - 指定库名

-C - 指定列(多列以,号分隔)

--start / --stop - 保存某个范围内的条目(一般用–count先查询条目总数)

--dump-all

​ 保存所有数据库表条目

--exclude-sysdbs - 排除所有系统数据库

--search -C -T -D

​ 搜索特定库名/表名/列名

--sql-query / --sql-shell

​ 执行自定义SQL语句


Brute force - 暴力破解

--common-tables

​ 暴力破解表名

​ 当msyql版本低于5.0,(information_schema不可用)时

​ 当数据库为Access(系统表MSysObjects不可读-默认)时

​ 当会话用户没有读取权限时

​ 该字典位于txt/common-tables.txt

--common-columns

​ 暴力破解列名


UDF injection - 自定义函数注入

--duf-inject

--shared-lib

​ 编译共享库创建并上传到DB服务器,以此生成UDF实现高级注入

​ linux - shared object

​ windows - DLL


File system access - 文件系统访问

--file-read

​ 从数据库的文件系统中读取文件

--file-write

​ 从数据库的文件系统中写入文件

--file-dest

​ 要写入文件的绝对路径


Operating system access - 操作系统访问

--os-cmd

​ 执行操作系统命令

​ 当目标系统是linux,且数据库为mysql/postgresql时

​ 该命令会上传两个动态链接库(sys_exec()/sys_eval())

​ 当目标系统是windows,且数据库是mssql时

​ 该命令会启用xp_cmdshell服务(有就用/禁了就启用/删除了就建)

--os-shell

​ 获取目标操作系统shell


General - 常规参数

-s

​ 指定sqlite会话文件的保存位置

-t

​ 将HTTP流量记录保存到文本文件中

--charset

​ 强制字符编码

​ --charset=GBK

--crawl

​ 指定爬站深度,从起始位置开始计算

​ --batch --crawl=3

--batch

​ sqlmap在需要用户输入时以默认操作执行

--dbms-cred

​ 指定数据库帐户(已知目标数据库帐户的情况下)

--flush-session

​ 清空本地保存的session(再次对相同站点执行检测时重新向服务器发起检测请求,默认情况下是读取本地缓存)

--force-ssl

​ 当目标站点是HTTPS时,使用该参数

--hex

​ 以十六进制的格式dump数据,收到后解码还原

--output-dir

​ 指定缓存目录

--save

​ 将命令保存为配置文件中

--update

​ 更新sqlmap

--check-waf

​ 检测WAF/IPS/IDS

--hpp

​ 绕过WAF/IPS/IDS

​ hpp - HTTP parameter pollution

​ 对ASP/IIS和ASP.NET/IIS作用更大一些

--identify-waf

​ 彻底的WAF/IPS/IDS检查


Miscellaneous - 杂项

--mobile

​ 将user-agent修改为手机端的

--purge-output

​ 将output文件夹清空

--smart

​ 当有大量的检测目标时,只选择基于错误的检测结果

--wizard

​ 向导模式

--alert

​ 成功检测到SQL注入时发出警报

--beep

​ 找到SQL注入时发出提示音

SQLmap学习笔记相关推荐

  1. 网络安全-sqlmap学习笔记

    目录 介绍 命令参数 指定目标 直连数据库 服务型数据库(前提知道数据库用户名和密码) 文件型数据库(前提知道数据库绝对路径) URL探测 文件读取目标 Google dork注入 Http参数 设置 ...

  2. 2.羽翼sqlmap学习笔记之MySQL注入

    1.判断一个url是否存在注入点: .sqlmap.py -u "http://abcd****efg.asp?id=7" -dbs 假设找到数据库:student ------- ...

  3. 4.羽翼sqlmap学习笔记之Post登录框注入

    4.Sqlmap系列教程--post登录框注入 注入点: http://xxx.xxx.com/Login.asp 注入方式一: 1.对着注入点使用burp抓包,保存txt格式文件. 2.输入命令: ...

  4. Sqlmap学习笔记(叁)

    https://blog.werner.wiki/sqlmap-study-notes-3/ 十五.操作系统控制 1.执行任意操作系统命令 参数:–os-cmd和–os-shell 若数据库管理系统是 ...

  5. IBatis.Net学习笔记六--再谈查询

    在IBatis.Net学习笔记五--常用的查询方式 中我提到了一些IBatis.Net中的查询,特别是配置文件的写法. 后来通过大家的讨论,特别是Anders Cui 的提醒,又发现了其他的多表查询的 ...

  6. mybatis学习笔记(3)-入门程序一

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(3)-入门程序一 标签: mybatis [TOC] 工程结构 在IDEA中新建了一个普通的java项 ...

  7. SQLMAP使用笔记

    SQLMAP 使用笔记         --by Anton 0-请求注入检测     sqlmap可以使用基于布尔(bool).时间(time).语句是否执行 (页面返回时间是否增加).报错(err ...

  8. mybatis框架--学习笔记(下)

    上篇:mybatis框架--学习笔记(上):https://blog.csdn.net/a745233700/article/details/81034021 8.高级映射: (1)一对一查询: ①使 ...

  9. mybatis框架--学习笔记(上)

    使用JDBC操作数据库的问题总结: (1)数据库连接,使用时创建,不使用时立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响数据库性能. 设想:使用数据库连接池管理数据库连接. (2) ...

最新文章

  1. tensor和模型 保存与加载 PyTorch
  2. 二叉树非递归先序遍历
  3. 《Science》重磅:终于完成了!迄今为止最完整的人类基因组
  4. Windows下 maven3.0.4的安装步骤+maven配置本地仓库(转载)
  5. pyrDown和pyrUp函数
  6. (转)创业需要知道的13句话
  7. delphi7存储过程传入数组_js数组方法reduce
  8. 人机协作机器人发展趋势_发那科童梁:机器人化不是时髦!有效的人机协作投资回报率更高...
  9. 基本数据类型与引用数据类型
  10. 制作卡通人物的3种简单方法
  11. 无法更新 EntitySet“Ips_Articles”,因为它有一个 DefiningQuery,而 ModificationFunctionMapping 元素中没有支持当前操作的 Inse...
  12. 如何在CSS中解决长英文单词的页面显示问题?CSS3
  13. 常见latch闩锁等待
  14. Mac和iPhone的浏览器接力功能。如何不利用safari接力。
  15. 深入了解 vue-cli
  16. 面对ICO乱象,这里有一份老猫的4000字投资指南
  17. 编译原理——语法制导翻译并产生中间代码(布尔表达式和控制语句)
  18. 钳形表校准典型校准方法
  19. puppeteer爬取豌豆荚数据
  20. 胶囊网络的理解:动态路由与聚类

热门文章

  1. GraphicsMagick 必要组件 jpeg-6b 安装
  2. python爬取抖音用户评论_python实现模拟器爬取抖音评论数据的示例代码
  3. 启动oracle时ORA-04031错误的一种解决方法
  4. Android Guideline基准线 | 学习笔记
  5. 查理·芒格的投资之道
  6. 图片分辨率如何修改?改图片分辨率的方法
  7. Excel表格中如何排名
  8. python 录音翻译_python实现带声音的摩斯码翻译实现方法
  9. 用Python做“电费计算.exe”,并保存数据到Excel
  10. 《图解HTTP》第七章个人学习