渗透测试流程
信息收集
- 服务器相关信息(真实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开头的参数名,以及dirname、get_current_user函数的字眼(需要将请求内容解密后判断),后面为加密数据的数据包可以鉴定为蚁剑的流量特征
- 在命令执行时有目录标记[S]、[E]、[R]、[D]等,说明已经拿到shell了(在执行系统命令)
菜刀特征
- 存在大量base64加密数据,固定头部QGluaV9zZXQ部分
- 请求体中存在assert、eval、z0等关键字
- 请求头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-cache,Cache-Control: no-cache
- 通过request.getReader().readLine()读Post请求
- 请求包中content-length:5740或5720
- 作为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为空;上传成功后编写自定义函数执行系统命令实现提权
Comments | NOTHING