CG-CTF-Web-MYSQL

MYSQL

1.题目
在这里插入图片描述
2.我们打开题目地址
在这里插入图片描述
3.看来有个robots.txt,我们来访问一下,出现下图所示
在这里插入图片描述
4.那我们接下来分析代码:

<?php
if($_GET[id]) {
  mysql_connect(SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);   //连接数据库
  mysql_select_db(SAE_MYSQL_DB);   //选择数据库
  $id = intval($_GET[id]);		  //intval是将变量取整(注:如果变量是小数,那么变量小数位不能为0,如果为0,会被认为是整数)
  $query = @mysql_fetch_array(mysql_query("select content from ctf2 where id='$id'"));   //sql查询语句
  if ($_GET[id]==1024) {   //如果id=1024,输出no! try again,否则输出查询结果,这里应该是flag
      echo "<p>no! try again</p>";
  }
  else{
    echo($query[content]);
  }
}
?>

5.根据以上代码分析,这里是利用intval()函数来绕过,输出flag。因此,url传入id=1024.3,实现绕过if判断,输出flag
在这里插入图片描述
注:

  • 代码主要函数语法

intval() 函数用于获取变量的整数值。

intval() 函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 integer 数值。intval()
不能用于object,否则会产生 E_NOTICE 错误并返回 1。

PHP 4, PHP 5, PHP 7

语法 int intval ( mixed $var [, int $base = 10 ] )

参数说明: $var:要转换成 integer 的数量值。 $base:转化所使用的进制。(默认是十进制)

如果 base 是 0,通过检测 var 的格式来决定使用的进制: 如果字符串包括了 “0x” (或 “0X”) 的前缀,使用 16 进制
(hex);否则, 如果字符串以 “0” 开始,使用 8 进制(octal);否则, 将使用 10 进制 (decimal)。 返回值
成功时返回 var 的 integer 值,失败时返回 0。 空的 array 返回 0,非空的 array 返回 1。

最大的值取决于操作系统。 32 位系统最大带符号的 integer 范围是 -2147483648 到
2147483647。举例,在这样的系统上, intval(‘1000000000000’) 会返回 2147483647。64
位系统上,最大带符号的 integer 值是 9223372036854775807。

字符串有可能返回 0,虽然取决于字符串最左侧的字符。

特别注意:除非 var 是一个字符串,否则 base 不会起作用。也就是说如果第一个参数不是字符串,那么第二个参数的进制就无效,即默认取整后,让取整后的数当做10进制数转换成10进制数,也就是本身了…
但有特例,正如上面所说,如果base为0,就自动检测var参数,0开头,当做8进制数,0x开头当做16进制数

  • 举例:
<?php
echo intval(42);                      // 42
echo intval(4.2);                     // 4
echo intval('42');                    // 42
echo intval('+42');                   // 42
echo intval('-42');                   // -42
echo intval(042);                     // 34
echo intval('042');                   // 42
echo intval(1e10);                    // 1410065408
echo intval('1e10');                  // 1
echo intval(0x1A);                    // 26
echo intval(42000000);                // 42000000
echo intval(420000000000000000000);   // 0
echo intval('420000000000000000000'); // 2147483647
echo intval(42.88, 8);                // 42//思路:这里是先将42.88取整,取整后为42,因为不是字符串,将42当做10进制数转换,转换成10进制数,也就是本身,最后结果42
echo intval('42', 8);                 // 34//思路:因为这个是字符串,base有效,将42当做8进制数转换成十进制数
echo intval(array());                 // 0
echo intval(array('foo', 'bar'));     // 1
?>

记住一点,以指定进制转换后,最后选择的结果数都是10进制数,例:
因为非字符串无效,这里,我就选择字符串

<?php        
echo intval('42.88', 16);//66
echo intval('22.22',6);//18
?>

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1stPeak

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值