欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > 数据库 >内容正文

数据库

CG-CTF-Web-MYSQL

发布时间:2023/12/31 数据库 50 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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,否则输出查询结果,这里应该是flagecho "<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 ?>


总结

以上是生活随笔为你收集整理的CG-CTF-Web-MYSQL的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。