Basic HTML

Thursday, August 27, 2020

Defcon 2015 Coding Skillz 1 Writeup

Just connecting to the service, a 64bit cpu registers dump is received, and so does several binary code as you can see:



The registers represent an initial cpu state, and we have to reply with the registers result of the binary code execution. This must be automated becouse of the 10 seconds server socket timeout.

The exploit is quite simple, we have to set the cpu registers to this values, execute the code and get resulting registers.

In python we created two structures for the initial state and the ending state.

cpuRegs = {'rax':'','rbx':'','rcx':'','rdx':'','rsi':'','rdi':'','r8':'','r9':'','r10':'','r11':'','r12':'','r13':'','r14':'','r15':''}
finalRegs = {'rax':'','rbx':'','rcx':'','rdx':'','rsi':'','rdi':'','r8':'','r9':'','r10':'','r11':'','r12':'','r13':'','r14':'','r15':''}

We inject at the beginning several movs for setting the initial state:

for r in cpuRegs.keys():
    code.append('mov %s, %s' % (r, cpuRegs[r]))

The 64bit compilation of the movs and the binary code, but changing the last ret instruction by a sigtrap "int 3"
We compile with nasm in this way:

os.popen('nasm -f elf64 code.asm')
os.popen('ld -o code code.o ')

And use GDB to execute the code until the sigtrap, and then get the registers

fd = os.popen("gdb code -ex 'r' -ex 'i r' -ex 'quit'",'r')
for l in fd.readlines():
    for x in finalRegs.keys():
           ...

We just parse the registers and send the to the server in the same format, and got the key.


The code:

from libcookie import *
from asm import *
import os
import sys

host = 'catwestern_631d7907670909fc4df2defc13f2057c.quals.shallweplayaga.me'
port = 9999

cpuRegs = {'rax':'','rbx':'','rcx':'','rdx':'','rsi':'','rdi':'','r8':'','r9':'','r10':'','r11':'','r12':'','r13':'','r14':'','r15':''}
finalRegs = {'rax':'','rbx':'','rcx':'','rdx':'','rsi':'','rdi':'','r8':'','r9':'','r10':'','r11':'','r12':'','r13':'','r14':'','r15':''}
fregs = 15

s = Sock(TCP)
s.timeout = 999
s.connect(host,port)

data = s.readUntil('bytes:')


#data = s.read(sz)
#data = s.readAll()

sz = 0

for r in data.split('\n'):
    for rk in cpuRegs.keys():
        if r.startswith(rk):
            cpuRegs[rk] = r.split('=')[1]

    if 'bytes' in r:
        sz = int(r.split(' ')[3])



binary = data[-sz:]
code = []

print '[',binary,']'
print 'given size:',sz,'bin size:',len(binary)        
print cpuRegs


for r in cpuRegs.keys():
    code.append('mov %s, %s' % (r, cpuRegs[r]))


#print code

fd = open('code.asm','w')
fd.write('\n'.join(code)+'\n')
fd.close()
Capstone().dump('x86','64',binary,'code.asm')

print 'Compilando ...'
os.popen('nasm -f elf64 code.asm')
os.popen('ld -o code code.o ')

print 'Ejecutando ...'
fd = os.popen("gdb code -ex 'r' -ex 'i r' -ex 'quit'",'r')
for l in fd.readlines():
    for x in finalRegs.keys():
        if x in l:
            l = l.replace('\t',' ')
            try:
                i = 12
                spl = l.split(' ')
                if spl[i] == '':
                    i+=1
                print 'reg: ',x
                finalRegs[x] = l.split(' ')[i].split('\t')[0]
            except:
                print 'err: '+l
            fregs -= 1
            if fregs == 0:
                #print 'sending regs ...'
                #print finalRegs
                
                buff = []
                for k in finalRegs.keys():
                    buff.append('%s=%s' % (k,finalRegs[k]))


                print '\n'.join(buff)+'\n'

                print s.readAll()
                s.write('\n'.join(buff)+'\n\n\n')
                print 'waiting flag ....'
                print s.readAll()

                print '----- yeah? -----'
                s.close()
                



fd.close()
s.close()





More info


  1. Hack Tool Apk
  2. Install Pentest Tools Ubuntu
  3. Pentest Recon Tools
  4. Hak5 Tools
  5. Hacker Tools Hardware
  6. Hacker Tools For Windows
  7. Top Pentest Tools
  8. Pentest Recon Tools
  9. Pentest Tools Website
  10. Hacker Tools Linux
  11. Pentest Tools Website
  12. Pentest Tools Apk
  13. Hacker Tools 2019
  14. Hack Tool Apk No Root
  15. Hacker Tools For Windows
  16. Hacker Tools Free Download
  17. Termux Hacking Tools 2019
  18. Hack Tools Download
  19. Hacking Tools Windows 10
  20. Hacking Tools
  21. Ethical Hacker Tools
  22. Free Pentest Tools For Windows
  23. Hacker Tools Apk
  24. Hak5 Tools
  25. Pentest Tools Framework
  26. Hacker Tools Free
  27. Pentest Tools Review
  28. Hacking Tools Github
  29. Pentest Tools Tcp Port Scanner
  30. Hacker Tools 2020
  31. New Hacker Tools
  32. Pentest Tools Windows
  33. Hack Tools For Ubuntu
  34. Nsa Hack Tools
  35. Hacker Hardware Tools
  36. Tools Used For Hacking
  37. Hacker Tools Linux
  38. Hacker Tools List
  39. Pentest Tools Website Vulnerability
  40. Pentest Tools
  41. Pentest Box Tools Download
  42. Hack Tool Apk No Root
  43. Pentest Tools
  44. Hackrf Tools
  45. Hacking Tools 2020
  46. Pentest Tools Nmap
  47. Hacking App
  48. Pentest Tools Windows
  49. Hack Tools For Games
  50. Hacking Tools Windows 10
  51. Hack Apps
  52. Hacker Tools For Pc
  53. Hacker Tools Windows
  54. World No 1 Hacker Software
  55. Hacker Techniques Tools And Incident Handling
  56. Hacker Tools For Mac
  57. Tools 4 Hack
  58. Pentest Tools For Windows
  59. Hacking Tools For Beginners
  60. Best Hacking Tools 2019
  61. Hacker Tools List
  62. How To Make Hacking Tools
  63. Hack Tools Online
  64. Pentest Tools Tcp Port Scanner
  65. Top Pentest Tools
  66. Pentest Tools Subdomain
  67. Hacking Tools For Pc
  68. Pentest Tools Download
  69. Hacking Tools Windows 10
  70. Pentest Tools Free
  71. Pentest Tools
  72. Hack Tools For Windows
  73. Pentest Tools Linux
  74. Hack Tools 2019
  75. Tools 4 Hack

No comments:

Post a Comment