POST注入

发布于 2022-03-16  213 次阅读


0x00 Rank 1

image-20211129221735112

首先先了解一下post传参和get传参的区别

  • POST方式,数据放置在HTML HEADER内提交,数据在URL中看不到
  • GET方式在客户端通过URL提交数据,数据在URL中可以看到。GET只能传输比较少的数据,安全性较低,POST传输数据较多,安全性也比GET高

可以看一下这篇文章

https://www.cnblogs.com/qmfsun/p/3679246.html

因为这个是post传参的,可以直接从登录的文本框中进行注入,这里使用Burp抓包进行注入!

首先抓个包先,发送到repeater

image-20211129223439730

然后开始构造语句进行注入,操作就和显错注入一样。

先用万能密码尝试登录一下,可以看出是字符型注入,单引号闭合方式

image-20211129225433942

然后order by判断字段数

image-20211129225509274
image-20211129225525216

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

image-20211129225916021

开始查询

image-20211129230118981

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

image-20211129230258872

两个字段,还是看flag

image-20211129230339466

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

第二关就是闭合方式与第一关不同,操作还是一样

image-20211129230536352

所以这里直接提供payload

admin") and 1=2 union select 1,2,group_concat(flag) from flag -- 

注意注释是--空格,因为post传参不经过url编码,当然mysql数据库的话可以使用#注释

image-20211129231801541

得到flag