解题思路

只有一个登陆框,查看源码,链接到search.php后发现注释中有这样一段内容

MMZFM422K5HDASKDN5TVU3SKOZRFGQRRMMZFM6KJJBSG6WSYJJWESSCWPJNFQSTVLFLTC3CJIQYGOSTZKJ2VSVZRNRFHOPJ5

base64,md5都不对,尝试一下,base32,解码发现是base64,再解码

select * from user where username = '$name'

fuzz

fuzz一下看禁了什么

order,等于号,or,括号都被禁了。

告诉是数字型的,先猜字段,4回显错误,3正确,证明字段是三,一般的话,就是id,username,password了

这里没思路了,buu给了源码,看下源码

代码审计

  1. <?php
  2. require "config.php";
  3. require "flag.php";
  4. // 去除转义
  5. if (get_magic_quotes_gpc()) {
  6. function stripslashes_deep($value)
  7. {
  8. $value = is_array($value) ?
  9. array_map('stripslashes_deep', $value) :
  10. stripslashes($value);
  11. return $value;
  12. }
  13. $_POST = array_map('stripslashes_deep', $_POST);
  14. $_GET = array_map('stripslashes_deep', $_GET);
  15. $_COOKIE = array_map('stripslashes_deep', $_COOKIE);
  16. $_REQUEST = array_map('stripslashes_deep', $_REQUEST);
  17. }
  18. mysqli_query($con,'SET NAMES UTF8');
  19. $name = $_POST['name'];
  20. $password = $_POST['pw'];
  21. $t_pw = md5($password);
  22. $sql = "select * from user where username = '".$name."'";
  23. // echo $sql;
  24. $result = mysqli_query($con, $sql);
  25. if(preg_match("/\(|\)|\=|or/", $name)){
  26. die("do not hack me!");
  27. }
  28. else{
  29. if (!$result) {
  30. printf("Error: %s\n", mysqli_error($con));
  31. exit();
  32. }
  33. else{
  34. // echo '<pre>';
  35. $arr = mysqli_fetch_row($result);
  36. // print_r($arr);
  37. if($arr[1] == "admin"){
  38. if(md5($password) == $arr[2]){
  39. echo $flag;
  40. }
  41. else{
  42. die("wrong pass!");
  43. }
  44. }
  45. else{
  46. die("wrong user!");
  47. }
  48. }
  49. }
  50. ?>

其中这一句

  1. if($arr[1] == "admin"){
  2. if(md5($password) == $arr[2]){
  3. echo $flag;

如果以admin登陆成功即获得flag。

登陆

好歹自己也学了数据库课,听了。确实是有这么个东西,想到联合查询数据库时,如果查询没有此数据则会创建新数据,我们这里尝试创建admin

0' union select 1,'admin','e10adc3949ba59abbe56e057f20f883e'#

这里密码是md5的123456

密码处即是123456,登陆成功,获得flag

总结思路

一般的联合注入,通过联合注入登陆成功

知识点

  • sql注入

刷题[GXYCTF2019]BabySQli的更多相关文章

  1. 刷题[GXYCTF2019]禁止套娃

    梳理思路 打开网站,发现很简单,只有flag在哪里的字样. 查看源码,常用后台目录,robots.txt,都未发现有任何东西. 扫描 直接拉进扫描器一扫,发现 思考可能是git源码泄露,可能可以恢复源 ...

  2. LeetCode刷题系列

    LeetCode 我们工作面试和提高自身数据结构和算法能力的时候往往需要刷刷题,我选择LeetCode是通过一个留学论坛了解的.专业,覆盖语种全面. 提前说说刷题的心得: 尽量手写代码,少使用IDE的 ...

  3. ife任务刷题总结(一)-css reset与清除浮动

    本文同时发布于本人的个人网站www.yaoxiaowen.com 百度创办的前端技术学院,是一个面向大学生的前端技术学习平台.虽然只有大学生才有资格报名,提交代码进行比赛排名.但是这并不妨碍我们这些初 ...

  4. 刷题ING...

    我用codeVS刷题.. 努力准备!!

  5. XidianOJ 1020 ACMer去刷题吧

    题目描述 刷题是每个ACMer必由之路,已知某oj上有n个题目,第i个题目小X能做对的概率为Pi(0<=Pi<=1,1<=i<=n) 求小X至少做对k道题的概率 输入 第一行输 ...

  6. 【BZOJ-4590】自动刷题机 二分 + 判定

    4590: [Shoi2015]自动刷题机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 156  Solved: 63[Submit][Status ...

  7. NOI题库分治算法刷题记录

    今天晚自习机房刷题,有一道题最终WA掉两组,极其不爽,晚上回家补完作业欣然搞定它,特意来写篇博文来记录下 (最想吐槽的是这个叫做分治的分类,里面的题目真的需要分治吗...) 先来说下分治法 分治法的设 ...

  8. NOI题库刷题日志 (贪心篇题解)

    这段时间在NOI题库上刷了刷题,来写点心得和题解 一.寻找平面上的极大点 2704:寻找平面上的极大点 总时间限制:  1000ms  内存限制:  65536kB 描述 在一个平面上,如果有两个点( ...

  9. 用js刷题的一些坑

    leecode可以用js刷题了,我大js越来越被认可了是吧.但是刷题中会因为忽略js的一些特性掉入坑里.我这里总结一下我掉过的坑. 坑1:js中数组对象是引用对象 js中除了object还有数组对象也 ...

随机推荐

  1. CentOS 阿里源

    [centos] name=centos baseurl=http://mirrors.aliyun.com/centos/7/os/x86_64/ enabled= gpgcheck= [epel] ...

  2. 计算机网络-网络层(3)DHCP协议

    主机获得IP地址,除了可以通过静态配置,还可以通过动态主机配置协议DHCP: Dynamic Host Configuration Protocol从服务器动态获取IP地址.子网掩码.默认网关地址.D ...

  3. React_TODOList 数据增删改查

    ①.功能代码实现: 添加数据 查询数据,展示 删除数据 修改数据 ②.数据持久化操作 localStorage.setItem('key',value) var value = localStorag ...

  4. 【WEB自动化测试之控件定位】基于HTML5控件的唯一控件属性定位

      一.WEB控件定位是什么 要想弄懂这个问题,我们还是基于实践来学习.我们先来看一条入门级别自动化测试用例的构成. DemoCase:正确用户名和密码登录博客园,登录成功 URL: https:// ...

  5. 焦大:做seo需要的三心二意

    http://www.wocaoseo.com/thread-92-1-1.html        读过一些外国人写的教程之后,愈发觉得国外人写的教程甚是有趣,比起国内学习的课本来,真是不可同日而语. ...

  6. 数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解

    数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解 对数组有不了解的可以先看看我的另一篇文章,那篇文章对数组有很多详细的解析,而本篇文章则着重讲动态数组,另一篇文章链接 ...

  7. Less 预处理笔记

    1. less 简介 1. less是CSS的预编译器,可以扩展CSS语言(当然也兼容CSS),可以定义变量.混合.函数等等,让CSS代码更易维护和扩展 2. less与传统写法相比: less后缀为 ...

  8. linux系统工程师修改打开文件数限制代码教程。服务器运维技术

    提示linux文件打开错误,修改linux打开文件数参数. /etc/pam.d/login 添加 session required /lib/security/pam_limits.so 注意看这个 ...

  9. 《神经网络的梯度推导与代码验证》之CNN的前向传播和反向梯度推导

    在FNN(DNN)的前向传播,反向梯度推导以及代码验证中,我们不仅总结了FNN(DNN)这种神经网络结构的前向传播和反向梯度求导公式,还通过tensorflow的自动求微分工具验证了其准确性.在本篇章 ...

  10. Building(单调栈+凸包)

    Problem Description Once upon a time Matt went to a small town. The town was so small and narrow tha ...