渗透测试流程

信息收集

  • 服务器相关信息(真实IP、开放端口、WAF、系统类型等)
  • whois信息、姓名、备案、邮箱、电话反查(社工库)
  • 网站指纹识别(CMS、CDN、证书等),DNS记录
  • 传输协议、通用漏洞、EXP、Github源码等
  • 中间件版本、弱口令扫描、PDF文件等
  • 子域名、C段、旁站
  • 网站目录结构、爆后台、网站Banner、测试文件、备份等敏感文件泄露等

漏洞挖掘

  • 浏览⽹站,看看⽹站规模,功能,特点等
  • 端⼝、⽬录等扫描,对响应的端⼝进⾏漏洞探测
  • XSS、SQL注⼊、上传、命令注⼊、CSRF、Cookie安全检测、敏感信息、通信数据传输、暴破、任意⽂件上传、越权访问、未授权访问、⽬录遍历、⽂件包含、重放攻击、服务器漏洞检测,最后使⽤漏扫⼯具等

漏洞利用&提权

  • UDF提权、Server-U提权、Oracle提权
  • Linux 脏⽜、内核漏洞提权
  • Windows 溢出提权

清除痕迹&输出报告

  • ⽇志、测试数据的清理
  • 总结,输出渗透测试报告并附修复⽅案

脚本编写能力

  • 熟悉的语言:C、Go、PHP、JAVA、Python
  • 编写过的脚本:爆破(JWT、登录框、注入点)、XX魔改、Fofa爬寻脚本

WebShell特征

蚁剑特征

  • 请求中UA存在antSword/*或Mozilla/5.0 (WindowsNT ) AppleWebKit/ (KHTML, like Gecko) Chrome/*Safari/
  • 请求中存在执行函数关键字eval、eVAL
  • 请求体中存在@ini_set("display_errors","0");@set_time_limit(0);(开头可能是菜刀或者是蚁剑)
  • 加密后的明显参数多数是_0x......=这种形式所以0x开头的参数名,以及dirnameget_current_user函数的字眼(需要将请求内容解密后判断),后面为加密数据的数据包可以鉴定为蚁剑的流量特征
  • 在命令执行时有目录标记[S][E][R][D]等,说明已经拿到shell了(在执行系统命令)

菜刀特征

  • 存在大量base64加密数据,固定头部QGluaV9zZXQ部分
  • 请求体中存在assertevalz0等关键字
  • 请求头UA存在百度或火狐

冰蝎特征

冰蝎1

  • 默认使用长连接,请求和响应的Connection字段为keep-alive
  • UA字段随机使用内置的16种之一,当同一IP重复请求但UA不一样时可能为冰蝎
  • 固定请求字节头dFAXQV1LORcHRQtLRlwMAhwFTAg/M,固定响应字节头TxcWR1NNExZAD0ZaAWMIPAZjH1BFBFtHThcJSIUXWEd

冰蝎2

  • 连接能看到get?pass=[xxx]数据,返回内容必定产生一个16位的随机数密钥,Content-Length:16
  • 请求包Accept字段为Accrpt:text/html,image/gif,image/jpeg,;q=.2,/;q=.2
  • 建立连接后的cookie存在特征字符,所有请求 Cookie的格式都为Cookie: PHPSESSID=; path=/;

冰蝎3

  • 去除动态密钥协商机制,采用预共享密钥,全程无明文交互,密钥格式为md5(“admin”)[0:16]
  • 请求头中有Pragma: no-cacheCache-Control: no-cache
  • 通过request.getReader().readLine()读Post请求
  • 请求包中content-length:57405720
  • 作为waf规则特征 jsp抓包特征分析Content-Type: application/octet-stream
  • (octet-stream只能提交二进制,且只能提交一个二进制,如果提交文件,只能提交一个文件后台接收参数只能有一个,且只能是流或者字节数组)

冰蝎4

  • 建立时java也会与主机建立tcp连接,端口在49700左右每次连接就逐一叠加,内置10个UA,每次连接shell都会换一个进行使用连接,端口就依次增
  • 密钥是连接密码32位md5值的前16位,默认连接密码是rebeyond,秘钥就是e45e329feb5d925b

哥斯拉特征

  • Cookie字段尾部出现分号(强特征)
  • UA字段如果采用默认会暴露使用的JDK信息(弱特征)
  • 在进行Webshell连接时一般设置长时间连接,所以connection会设置为keep-alive
  • 响应头的Cache-Control字段为Cache-Control:no-store, no-cache, must-revalidate
  • 请求的Accept字段为Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8

流量特征

Log4j(日志记录)

  • ${jndi:ldap://url},借助JNDI注入实现攻击

Shiro(身份验证请求、会话管理、授权等功能)

  • 流量特征:数据包中包含多个$$$符号,C参数含有base64编码,RememberMe字段长度异常
  • 漏洞原理:提供了记住我的功能,用户登录成功后会生成经过加密并编码的Cookie。Cookie的key为RememberMe,Cookie的值是经过相关信息进行序列化,然后使用AES加密,最后使用Base64编码处理。服务端在接收Cookie时检索RememberMe Cookie的值,进行Base64和AES解密进行反序列化操作,攻击者可以使用Shiro的默认密钥构造恶意序列化对象进行编码来伪造用户的Cookie,服务端反序列化时触发漏洞,从而执行命令
  • Shiro550:使用已知密钥碰撞,只要有足够密钥库,不需要Remember Cookie
  • Shiro721:AES加密key基本猜不到,系统随机生成,可使用登录后rememberMe去爆破正确的key值,即利用有效的RememberMe Cookie作为Padding Oracle Attack的前缀,然后精心构造 RememberMe Cookie 值来实现反序列化漏洞攻击

攻击名词

  • CSRF:客户端请求伪造
  • SSRF:服务器请求伪造
  • XSS:跨站脚本攻击
  • XXE:XML外部脚本注入

提权

总思路:漏洞/配置项错误

UDF提权

  • 前提:Mysql>=5.1且存在或创建lib/plugin目录;Mysql<5.1导出目录c:/windows或system32
  • 原理:允许用户自定义执行函数
  • 流程:先判断Mysql版本,根据版本上传动态链接库到指定目录,上传时如果存在SQL注入可通过sqlmap上传,不存在SQL注入通过sql语句写入,但两者都需要secure_file_priv为空;上传成功后编写自定义函数执行系统命令实现提权


一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。