Накрутка в wp-polls

Discussion in 'PHP' started by Aspanu, 1 Sep 2012.

  1. Aspanu

    Aspanu New Member

    Joined:
    16 Nov 2010
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    Здравствуйте, уважаемые участники!

    Решил я тут на досуге развлечения ради покопаться с накруткой голосований на wordpress-плагине wp-polls. Не то чтобы очень нужно было, просто наткнулся на вот эту статью на Хабре. Стало интересно, решил попробовать.

    Выбрал для чистоты эксперимента первый попавшийся сайт, турецкий даже: сайт.

    Естественно, устройство плагина на сайте малость отличалось от описанного в статье, но в целом и правда было очень похоже: запрос аяксу, защита по IP (даже из тора не поголосуешь особо), похожие поля, POST и какие-то GET'ы.

    Wireshark показал, что POST отправляется всего один и только до результативного голосования, т.е. ну прям "оно". Копипасту форум не дает делать в большом колтчестве, потому больше ссылок, извиняюсь.

    Скрипт, отправляющий данные аяксу был изучен:
    Скрипт голосования со страницы

    После чего я кое-как нацарапал свой скрипт на Python, которым владею слабо:
    Code:
    import http.client, urllib.request, urllib.parse, urllib.error
    params = urllib.parse.urlencode({'@url': '/wp-admin/admin-ajax.php ',
        '@data': 'action=polls&view=process&poll_id=2&poll_2=26&poll_2_nonce=523feaf068',
        '@cache': '!1', '@success': 'true' })
    headers = {"Content-type": "application/x-www-form-urlencoded",
    #"Accept": "text/plain",
     "X-Forwarded-For": "91.77.110.166, 93.114.43.156"          }
    conn = conn = http.client.HTTPConnection("9colour.com")
    #conn.request("POST", "/wp-admin/admin-ajax.php", params, headers)
    conn.request("POST", "/wp-content/plugins/wp-polls/wp-polls.php", params, headers)
    response = conn.getresponse()
    print(response.status, response.reason)
    data = response.read()
    print(data)
    conn.close()
    
    poll_nonce - это я заприметил милое поле на страничке
    HTML:
    <input type="hidden" id="poll_2_nonce" name="wp-polls-nonce" value="523feaf068">
    
    Значение иногда меняют, но нечасто.

    IP были перепробованы настоящие, вымышленные, да и вообще любые. Я даже пробовал убрать вообще все заголовки, оставив только X-Forwarded-For (немного прозевал этот момент, но каких-то прочих, отсылаемых сниффер не заметил).

    Т.к. я пишу тут, понятно чем кончилось дело))
    >>>
    200 OK
    b''

    И никакого эффекта. Хрен с ним, с голосованием, но расскажите пожалуйста, почему это не работает и чего я не учел, а то изрядно повозился с этим уже, теперь любопытство распирает))
    Если разделом промахнулся - прошу перенести тему. Буду рад ответам.
     
    #1 Aspanu, 1 Sep 2012
    Last edited: 1 Sep 2012
  2. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Aspanu Откуда вы увидели вот это?
    Code:
    params = urllib.parse.urlencode({'@url': '/wp-admin/admin-ajax.php ',
        '@data': 'action=polls&view=process&poll_id=2&poll_2=26&poll_2_nonce=523feaf068',
        '@cache': '!1', '@success': 'true' })
    А именно - откуда появился символ @?

    Если вы умеете работать с Wireshark'ом - то посмотрите все-таки что отправляется веб-серверу, если вы запускаете свой скрипт и если голосуете браузером. Мне почему-то кажется что запросы не совпадут и вам нужно оставить только 'action=polls&view=process&poll_id=2&poll_2=26&poll_2_nonce=523feaf068' записанное в виде словаря.
     
    _________________________
  3. Aspanu

    Aspanu New Member

    Joined:
    16 Nov 2010
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    Ну это чтобы не заморачиваться с кодом, я взял питон, а синтаксис знаю вообще хреново. Поглядел
    здесь.

    Wireshark ещё раз погоняю, в моих руках он просто что-то странное выдавал, но скрипт на странице содержит такое:
    Code:
    jQuery.ajax({type:"POST",
    url:pollsL10n.ajax_url,data:"action=polls&view=process&poll_id="+poll_id+"&poll_"+poll_id+"="+poll_answer_id+
    "&poll_"+poll_id+"_nonce="+poll_nonce,cache:!1,success:poll_process_success})
    
    Из чего я заключил, что сам POST-лишь один из элементов словаря для ajax, остальное - хитрые параметры.
     
  4. Aspanu

    Aspanu New Member

    Joined:
    16 Nov 2010
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    Ааа, блин!!! Сори за дабл-пост, но действительно это я затупил!))

    Собаки не нужны, в запросе другие параметры, ровно как вы и сказали!! Всё получилось :cool:

    Code:
    params = urllib.parse.urlencode({'action': 'polls', 'view': 'process', 'poll_id': 2, 'poll_2': 26, 'poll_2_nonce': '58b5ec145b'})
    Поправил. Ура.