本文内容:
- 代码审计的思路
- 渗透测试的步骤
- 以blueCMS为例
1,代码审计思路:
渗透测试的核心--->找漏洞--->找Bug--->开发技术人员不过关,或者衔接问题等。
安全不能孤立===>漏洞一定存在。
代码审计的核心在于通过源代码,知道代码如何执行,然后根据代码执行中可能产生的问题来寻找漏洞。
代码审计一般泛指白盒审计,但是要记住,通用型漏洞,例如CMS通杀漏洞,其实并不是仅仅只有代码审计能够找到。
本地搭建,然后纯黑盒测试也可以的,只不过代码审计更为全面的容易找到漏洞。
代码审计思路:两条路线,如:
1.全文通读:将全文代码一行一行进行查看。
2.敏感函数定位:掌握住可以存在危险函数的地方,进行反推,如:
但是无论是哪一个审计方式都需要一定的编程功底,但是如果你的编程工地不够怎么办?
其实可以尝试使用黑盒+白盒代码审计的方式进行一个学习,通过黑盒的方式进行测试,然后去了解究竟传参进去经过处理发生了什么?
然后构建合适的语句进行尝试,最后找到问题所在点。
2,渗透测试的步骤:
1.黑盒测试:
信息收集:whois、子域名、端口检测、指纹识别、目录扫描、C端、旁站、敏感信息收集。
寻找功能点:
sql注入:
显错:GET、POST、COOKIE、HEAD。
盲注:布尔盲注、时间盲注。
其他:宽字节、偏移、mysqlDnsLog、sql server反弹、oracle报错。
xss:反射型、存储型、Dom型。
csrf
文件上传
xxe:simplexml_load_string()函数。
逻辑漏洞:验证码绕过、密码找回、支付漏洞、越权漏洞、
2.白盒测试:
变量覆盖:
extract()函数
parse_str()函数
文件包含:
include()函数
include_once()函数
require()函数
require_once()函数
反序列化:
unserialize()函数
3,以CMS为例:
1.划分功能模块:
安装:
重复安装,可以进入后台GetShell。
很多网站,提倡站库分离,即网站与数据库不在同一台机器。
重复安装是,可以将数据库外接到我们的公网数据库。
注意:双引号解析只会发生在php5.5以上版本。
前台:
用户注册:
可能存在的危害:
sql注入、存储型xss、逻辑错误可爆破用户名。
注册处理页面功能一般是:
接收参数、过滤参数、插入数据库。
审计思路:
黑盒:
正常注册,提交,抓包。
查看请求包内容[主要是提交的数据]。
查看提交数据有谁处理[找处理文件]。
查看有没有标识符[不是我们提交的数据,但是它参与传参]。
一般php文件可能有几个功能模块,标识符的作用就是调用哪个功能。
去标识符文件,查看功能代码的作用。
如果接受参数,直接插入数据库,没有过滤参数,那就会出现问题。
比如注册地地方发现xss,如果只是在前台,那么影响不大,就可以登录后台查看,如果从前台打到后台,那危害就打了。
当我们打出XSS的时候,就应该考虑这个地方是不是也具有sql注入。
在填写注册信息的时候加上'"0#这四个符号试试闭合,如果注册成功,就没有什么危害了。
白盒:
去查看源代码怎么过滤的,找到具体的防护手段,看看是不是还有可能绕过。
比如,
遇到的魔术引号,可以使用宽字节,使用Burp的时候POST传参一般是不会进行url编码的,所需㤇更改hex。
可以使用updatexml()并补充对应格式,最后加注释打出报错注入。
对应格式可以通过seay代码审计工具,抓到。
如果执行一直失败,就可以先将语句放到数据库执行,若没问题,说明cms有所防护[关闭了错误回显]。
可以使用盲注、或者找回显点是怎么关闭[需要代码功底]
但是如果存在验证码且验证码每次都改变,那么盲注就不行了。
还有一种方法,就是:插入语句,可以实现一次插入多条数据的功能。
想方法,将第一个value闭合,然后在进行一个数据插入,
第二条数据插入就可以使用子查询等,查询出我们想要的数据。
在注册的时候,会遇到提示用户名已注册这种情况,可以使用burp抓包爆破出数据库中都有哪些用户名。
用户登录:
可能存在的危害:
宽字节注入-万能密码
cookie未加密等
如用户名输入:admin密码输入:%df' or 1=1#
修改资料:
可能存在的危害:
存储型XSS
sql注入
文件上传等