// ============================================================================
// This is a Servlet sample for the G-WAN Web Server (http://www.trustleap.com)
// ----------------------------------------------------------------------------
// attack.c: send malicious URIs (from 'attack.txt' file) to the Web Server
//
// It's always better to do it yourself rather than waiting others
// to do it for you.
//
// Now you have an easy way to test your servlets (by just editing
// the "attack.txt" file).
//
// ============================================================================
#include "xbuffer.h" // G-WAN dynamic buffers
// Title of our HTML page
static char title[]="Attacking your own web server";
// Top of our HTML page
static char top[]=""
"
%s"
""
"
%s
";
// ----------------------------------------------------------------------------
// imported functions:
// get_reply(): get a pointer on the 'reply' dynamic buffer from the server
// set_reply(): send back the 'reply' dynamic buffer's pointer to the server
// xbuf_reset(): (re)initiatize a dynamic buffer object
// xbuf_frfile(): load a file, and store it in a dynamic buffer
// xbuf_frurl(): make an Http request, and store results in a dynamic buffer
// xbuf_ncat(): like strncat(), but in the specified dynamic buffer
// xbuf_xcat(): formatted strcat() (a la printf) in a given dynamic buffer
// xbuf_free(): release the memory allocated for a dynamic buffer
// ----------------------------------------------------------------------------
// The Http methods we can use with xbuf_frurl()
static enum s_Methods {HTTP_BAD=0, HTTP_GET, HTTP_HEAD, HTTP_PUT, HTTP_POST};
// ----------------------------------------------------------------------------
int main(int argc, char *argv[])
{
xbuf_ctx buf, list;
int code=0, codcut=0,cod2xx=0,cod3xx=0,cod4xx=0,cod5xx=0;
// create a dynamic buffer and get a pointer on the server response buffer
xbuf_ctx reply; get_reply(argv, &reply);
// ---- format the top of our HTML page with a title
xbuf_xcat(&reply, top, title, title);
// ---- write static text
xbuf_cat(&reply, " The web server replied:
");
// ---- load our bad URIs list
xbuf_reset (&list);
xbuf_frfile(&list, "csp/attack.txt");
if(list.len)
{
char uri[1024]; // loop to send all URIs
while(xbuf_getln(&list, uri, sizeof(uri)-1)!=-1)
{
// send the Http request (with a 250 ms timeout)
xbuf_reset(&buf);
code=xbuf_frurl(&buf, "127.0.0.1", 80, HTTP_HEAD, uri, 500, 0);
if(code== 0) codcut++; else
if(code<300) cod2xx++; else
if(code<400) cod3xx++; else
if(code<500) cod4xx++; else
if(code<600) cod5xx++;
if(code && code<300)
{
//xbuf_tofile(&buf, "fdump.txt");
while(xbuf_repl(&buf, "\r", " "));
xbuf_xcat(&reply, "Reply: %d for "%s" ", code, uri);
xbuf_ncat(&reply, buf.ptr, buf.len);
}
else
xbuf_xcat(&reply, "Reply: %d for "%s" ", code, uri);
}
xbuf_free(&buf);
xbuf_free(&list);
// ---- display results and close our HTML page
xbuf_xcat(&reply,
"hard-close : %u "
"2xx replies: %u "
"3xx replies: %u "
"4xx replies: %u "
"5xx replies: %u ",
codcut, cod2xx, cod3xx, cod4xx, cod5xx);
}
else // no URI list file
{
xbuf_xcat(&reply, "The 'attack.txt' URI file was not found "
"