思路流程:
信息收集
- 服务器的相关信息(真实ip,系统类型,版本,开放端口,WAF等)
- 网站指纹识别(包括,cms,cdn,证书等),dns记录
- whois信息,姓名,备案,邮箱,电话反查(邮箱丢社工库,社工准备等)
- 子域名收集,旁站,C段等
- google hacking针对化搜索,pdf文件,中间件版本,弱口令扫描等
- 扫描网站目录结构,爆后台,网站banner,测试文件,备份等敏感文件泄漏等
- 传输协议,通用漏洞,exp,github源码等
- 漏洞挖掘
浏览网站,看看网站规模,功能,特点等
端口,弱口令,目录等扫描,对响应的端口进行漏洞探测,比如 rsync,心脏出血,mysql,ftp,ssh弱口令等。
XSS,SQL注入,上传,命令注入,CSRF,cookie安全检测,敏感信息,通信数据传输,暴力破解,任意文件上传,越权访问,未授权访问,目录遍历,文件 包含,重放攻击(短信轰炸),服务器漏洞检测,最后使用漏扫工具等
漏洞利用 | 权限提升
- mysql提权,serv-u提权,oracle提权
- windows 溢出提权
- linux脏牛,内核漏洞提权e
- 清除测试数据 | 输出报告
日志、测试数据的清理
总结,输出渗透测试报告,附修复方案
复测
验证并发现是否有新漏洞,输出报告,归档
问题
在渗透过程中,收集目标站注册人邮箱对我们有什么价值?
丢社工库里看看有没有泄露密码,然后尝试用泄露的密码进行登录后台。
- 用邮箱做关键词进行丢进搜索引擎。
- 利用搜索到的关联信息找出其他邮箱进而得到常用社交账号。
- 社工找出社交账号,里面或许会找出管理员设置密码的习惯 。
- 利用已有信息生成专用字典。
判断出网站的CMS对渗透有什么意义?
- 查找网上已曝光的程序漏洞。
- 如果开源,还能下载相对应的源码进行代码审计。
- 渗透时扫目录的意义
敏感文件、二级目录扫描
站长的误操作比如:网站备份的压缩文件、说明.txt、二级目录可能存放着其他站点
目前已知哪些版本的容器有解析漏洞,具体举例。
IIS 6.0
/xx.asp/xx.jpg "xx.asp"是文件夹名
IIS 7.0/7.5
默认Fast-CGI开启,直接在url中图片地址后面输入/1.php,会把正常图片当成php解析
Nginx
版本小于等于0.8.37,利用方法和IIS 7.0/7.5一样,Fast-CGI关闭情况下也可利用。
空字节代码 xxx.jpg.php
Apache1.x、2.x
上传的文件命名为:test.php.x1.x2.x3,Apache是从右往左判断后缀
lighttpd
xx.jpg/xx.php
如何手工快速判断目标站是windows还是linux服务器?
linux大小写敏感,windows大小写不敏感。
为何一个mysql数据库的站,只有一个80端口开放?
改了端口,站库分离,3306不对外网开放,防火墙拦截
看到编辑器,应该先做什么?
查看编辑器的名称版本,然后搜索公开的漏洞。
拿到一个webshell发现网站根目录下有.htaccess文件,我们能做什么?
能做的事情很多,用隐藏网马来举例子:
插入
SetHandler application/x-httpd-php
.jpg文件会被解析成.php文件。
提权时选择可读写目录,为何尽量不用带空格的目录?
exp执行一般需要空格界定参数
后台修改管理员密码处,原密码显示为*。你觉得该怎样实现读出这个用户的密码?
审查元素 把密码处的password属性改成text就明文显示了
为什么aspx木马权限比asp大
aspx使用的是.net技术。IIS 中默认不支持,ASP只是脚本语言而已。入侵的时候asp的木马一般是guest权限…APSX的木马一般是users权限
如何绕过waf
大小写转换法
干扰字符 /!/
编码 base64 unicode hex url ascll
复参数
常见端口
3306 mysql
1433 mssql
1521 oracle
5432 postgresql
6379 redis
27017 mongodb
8080 tomcat/resin/jetty
137 samba
5900 vnc
如何向服务器写入webshell
各种上传漏洞
mysql具有写入权限,用sql语句写入shell
http put方法
Sql注入
SQL注入原理
a. SQL(结构化语句查询)
b. 提交参数(调用数据库查询)的地方是用户可控的,并未做任何过滤处理
c. 数字型,字符型,搜索型,POST注入,Cookie注入,延时注入,盲注等
SQL注入防护
1、使用安全的API
2、对输入的特殊字符进行Escape转义处理
3、使用白名单来规范化输入验证方法
4、对客户端输入进行控制,不允许输入SQL注入相关的特殊字符
5、服务器端在提交数据库进行SQL查询之前,对特殊字符进行过滤、转义、替换、删除。
规范编码,字符集
为什么参数化查询可以防止sql注入
原理:
使用参数化查询数据库服务器不会把参数的内容当作sql指令的一部分来执行,是在数据库完成sql指令的编译后才套用参数运行
简单的说:
参数化能防注入的原因在于,语句是语句,参数是参数,参数的值并不是语句的一部分,数据库只按语句的语义跑
SQL头注入点
UA
REFERER
COOKIE
IP
盲注是什么?怎么盲注?
盲注是在SQL注入攻击过程中,服务器关闭了错误回显,我们单纯通过服务器返回内容的变化来判断是否存在SQL注入和利用的方式。盲注的手段有两种,一个是通过页面的返回内容是否正确(boolean-based),来验证是否存在注入。一个是通过sql语句处理时间的不同来判断是否存在注入(time-based),在这里,可以用benchmark,sleep等造成延时效果的函数,也可以通过构造大笛卡儿积的联合查询表来达到延时的目的。
宽字节注入产生原理以及根本原因
产生原理
在数据库使用了宽字符集而WEB中没考虑这个问题的情况下,在WEB层,由于0XBF27是两个字符,在PHP中比如addslash和magic_quotes_gpc开启时,由于会对0x27单引号进行转义,因此0xbf27会变成0xbf5c27,而数据进入数据库中时,由于0XBF5C是一个另外的字符,因此\转义符号会被前面的bf带着”吃掉”,单引号由此逃逸出来可以用来闭合语句。
在哪里编码
根本原因:
character_set_client(客户端的字符集)和character_set_connection(连接层的字符集)不同,或转换函数如,iconv、mb_convert_encoding使用不当。
解决办法:
统一数据库、Web应用、操作系统所使用的字符集,避免解析产生差异,最好都设置为UTF-8。
或对数据进行正确的转义,如mysql_real_escape_string+mysql_set_charset的使用。
sql里面只有update怎么利用
先理解这句 SQL
UPDATE user SET password='MD5($password)', homepage='$homepage' WHERE id='$id'
如果此 SQL 被修改成以下形式,就实现了注入
1:修改 homepage 值为http://baidu.net’, userlevel=’3
之后 SQL 语句变为
UPDATE user SET password='mypass', homepage='http://baidu.net', userlevel='3' WHERE id='$id'
userlevel 为用户级别
2:修改 password 值为mypass)’ WHERE username=’admin’#
之后 SQL 语句变为
UPDATE user SET password='MD5(mypass)' WHERE username='admin'#)', homepage='$homepage' WHERE id='$id'
3:修改 id 值为’ OR username=’admin’
之后 SQL 语句变为
UPDATE user SET password='MD5($password)', homepage='$homepage' WHERE id='' OR username='admin'
sql如何写shell/单引号被过滤怎么办
写shell: root权限,GPC关闭,知道文件路径
ou