/**
* WS-Attacker - A Modular Web Services Penetration Testing Framework Copyright
* (C) 2013 Christian Altmeier
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation; either version 2 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc., 51
* Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package wsattacker.testhelper;
import wsattacker.library.intelligentdos.common.SuccessfulAttack;
import wsattacker.library.intelligentdos.dos.CoerciveParsing;
import wsattacker.library.intelligentdos.dos.DoSAttack;
import wsattacker.library.intelligentdos.dos.DoSAttack.PayloadPosition;
import wsattacker.library.intelligentdos.dos.HashCollision;
import wsattacker.library.intelligentdos.dos.XmlAttributeCount;
import wsattacker.library.intelligentdos.dos.XmlElementCount;
import wsattacker.library.intelligentdos.dos.XmlEntityExpansion;
import wsattacker.library.intelligentdos.dos.XmlExternalEntity;
import wsattacker.library.intelligentdos.dos.XmlOverlongNames;
import wsattacker.library.intelligentdos.dos.XmlOverlongNames.For;
import wsattacker.library.intelligentdos.helper.CommonParamItem;
import wsattacker.library.intelligentdos.helper.IterateModel;
import wsattacker.library.intelligentdos.position.Position;
import wsattacker.plugin.dos.dosExtension.attackClasses.hashDos.CollisionInterface;
/**
* @author Christian Altmeier
*/
public class SABuilder
{
private DoSAttack doSAttack;
private CommonParamItem paramItem;
private PayloadPosition payloadPosition;
private Position position;
private SABuilder()
{
}
public static SABuilder CoerciveParsing( int numberOfTags )
{
SABuilder builder = new SABuilder();
CoerciveParsing coerciveParsing = new CoerciveParsing();
coerciveParsing.setNumberOfTagsIterator( IterateModel.custom().startAt( numberOfTags ).build() );
coerciveParsing.nextParam();
builder.doSAttack = coerciveParsing;
return builder;
}
public static SABuilder XmlElementCount( int numberOfElements )
{
SABuilder builder = new SABuilder();
XmlElementCount xmlElementCount = new XmlElementCount();
xmlElementCount.setNumberOfElementsIterator( IterateModel.custom().startAt( numberOfElements ).build() );
xmlElementCount.nextParam();
builder.doSAttack = xmlElementCount;
return builder;
}
public static SABuilder XmlAttributeCount( int numberOfAttributes, String name )
{
SABuilder builder = new SABuilder();
XmlAttributeCount xmlAttributeCount = new XmlAttributeCount();
xmlAttributeCount.setNumberOfAttributesIterator( IterateModel.custom().startAt( numberOfAttributes ).build() );
xmlAttributeCount.setNames( new String[] { name } );
xmlAttributeCount.nextParam();
builder.doSAttack = xmlAttributeCount;
return builder;
}
public static SABuilder XmlEntityExpansion( int numberOfElements, int numberOfEntities )
{
SABuilder builder = new SABuilder();
XmlEntityExpansion xmlEntityExpansion = new XmlEntityExpansion();
xmlEntityExpansion.setNumberOfEntityElementsIterator( IterateModel.custom().startAt( numberOfElements ).build() );
xmlEntityExpansion.setNumberOfEntitiesIterator( IterateModel.custom().startAt( numberOfEntities ).build() );
xmlEntityExpansion.nextParam();
builder.doSAttack = xmlEntityExpansion;
return builder;
}
public static SABuilder XmlExternalEntity( String externalEntity )
{
SABuilder builder = new SABuilder();
XmlExternalEntity xmlExternalEntity = new XmlExternalEntity();
xmlExternalEntity.setExternalEntities( new String[] { externalEntity } );
xmlExternalEntity.nextParam();
builder.doSAttack = xmlExternalEntity;
return builder;
}
public static SABuilder HashCollision( CollisionInterface collisionGenerator, int numberOfAttributes,
Boolean useNamespace )
{
SABuilder builder = new SABuilder();
HashCollision hashCollision = new HashCollision();
hashCollision.setCollisionGenerators( new CollisionInterface[] { collisionGenerator } );
hashCollision.setNumberOfCollisionsIterator( IterateModel.custom().startAt( numberOfAttributes ).build() );
hashCollision.setUseNamespace( new Boolean[] { useNamespace } );
hashCollision.nextParam();
builder.doSAttack = hashCollision;
return builder;
}
public static SABuilder XmlOverlongNames( For overlongFor, int lengthOfString, int numberOfElements )
{
SABuilder builder = new SABuilder();
XmlOverlongNames xmlOverlongNames = new XmlOverlongNames();
xmlOverlongNames.setLengthOfStringsIterator( IterateModel.custom().startAt( lengthOfString ).build() );
xmlOverlongNames.setNumberOfElementsIterator( IterateModel.custom().startAt( numberOfElements ).build() );
xmlOverlongNames.setOverlongNamesFor( new For[] { overlongFor } );
xmlOverlongNames.nextParam();
builder.doSAttack = xmlOverlongNames;
return builder;
}
public SABuilder withPayloadPosition( PayloadPosition payloadPosition )
{
this.payloadPosition = payloadPosition;
return this;
}
public SABuilder withPosition( Position position )
{
this.position = position;
return this;
}
public SABuilder withParamItem( CommonParamItem paramItem )
{
this.paramItem = paramItem;
return this;
}
public SuccessfulAttack build()
{
SuccessfulAttack successfulAttack = new SuccessfulAttack( doSAttack, paramItem );
successfulAttack.setPayloadPosition( payloadPosition );
successfulAttack.setPosition( position );
return successfulAttack;
}
}