0x00 Rank 1

首先先了解一下post传参和get传参的区别
- POST方式,数据放置在HTML HEADER内提交,数据在URL中看不到
- GET方式在客户端通过URL提交数据,数据在URL中可以看到。GET只能传输比较少的数据,安全性较低,POST传输数据较多,安全性也比GET高
可以看一下这篇文章
因为这个是post传参的,可以直接从登录的文本框中进行注入,这里使用Burp抓包进行注入!
首先抓个包先,发送到repeater

然后开始构造语句进行注入,操作就和显错注入一样。
先用万能密码尝试登录一下,可以看出是字符型注入,单引号闭合方式

然后order by判断字段数


有3列,union select 判断显示位是2,3

开始查询

查出两个表flag和user,查看一下flag表

两个字段,还是看flag

OK,结束zKaQ-PostK1,zKaQ-XZT,zKaQ-FlagA1
分析源码
$username = $_POST['username'];
$password = $_POST['password'];
$sql = 'select *from user where username =\''.$username.'\' and password=\''.$password.'\''; // sql查询语句
mysqli_select_db($conn,'******'); // 不想告诉你们库名
$result = mysqli_query($conn,$sql); // 执行sql语句
$row = mysqli_fetch_array($result); // 判断是否查询到结果
//获得用户名和密码
$uname = $row['username'];
$passwd = $row['password'];
if($row){ // s
echo '成功登录Your Login name:'.$uname.'Your Password:'.$passwd.'';}
else{echo '账号密码错误';}
0x01 Rank 2
第二关就是闭合方式与第一关不同,操作还是一样

所以这里直接提供payload
admin") and 1=2 union select 1,2,group_concat(flag) from flag --
注意注释是--空格,因为post传参不经过url编码,当然mysql数据库的话可以使用#注释

得到flag
Comments NOTHING