飞道的博客

[ACTF2020 新生赛]BackupFile

356人阅读  评论(0)

目录

信息收集

思路

构造payload

知识补充


信息收集

从题目来看应该是让扫描备份文件(backupfile) 

进入页面就一句话

Try to find out source file!

先用dirbuster模糊扫描一下目录

常见的如下

index.phps

index.php.swp

index.php.swo

index.php.php~

index.php.bak

index.php.txt

index.php.old

常见备份文件:“.git” 、“.svn”、“ .swp” “.~”、“.bak”、“.bash_history”、“.bkf“

在index.php.bak下载到一份源码


  
  1. <?php
  2. include_once "flag.php";
  3. if( isset( $_GET[ 'key'])) {
  4. $key = $_GET[ 'key'];
  5. if(! is_numeric( $key)) {
  6. exit( "Just num!");
  7. }
  8. $key = intval( $key);
  9. $str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";
  10. if( $key == $str) {
  11. echo $flag;
  12. }
  13. }
  14. else {
  15. echo "Try to find out source file!";
  16. }
  17. ?>

思路

代码审计 

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

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

构造payload

?key=123

得到flag

知识补充

由于php中数字和字符串比较时


  
  1. $v1 = "1";
  2. $v2 = 1;
  3. if ( $v1== $v2){
  4.   echo ( "true<br/>");
  5. } else{
  6.   echo( "false<br />");
  7. };
  8. if ( $v1=== $v2){
  9.   echo ( "true<br/>");
  10. } else{
  11.   echo( "false<br />");
  12. };

true
false


  
  1. <?php
  2. $a= 1;
  3. $b= "text";
  4. $c= 0;
  5. if( $a== $b){
  6. echo "true";
  7. }
  8. else{
  9. echo "false";
  10. }
  11. if( $c== $b){
  12. echo "true";
  13. }
  14. else{
  15. echo "false";
  16. }
  17. ?>

false
true

在php中 == 判断时  当数字与字符串作比较时,系统会先将字符串转化为数字,再与数字进行比较。数字和字符串进行比较时,当这个字符串是一个无法转换为数字的字符串,它就会被强制转化为数字,结果总是为0 

数字+字符(字符串) 


  
  1. <?php
  2. $a= 888;
  3. $b= "888a";
  4. if( $a== $b){
  5. echo "true";
  6. }
  7. else{
  8. echo "false";
  9. }
  10. ?>

true

字符(字符串)+数字


  
  1. <?php
  2. $a= 888;
  3. $b= "a888";
  4. $c= 0;
  5. if( $a== $b){
  6. echo "true";
  7. }
  8. else{
  9. echo "false";
  10. }
  11. echo '<br>';
  12. if( $c== $b){
  13. echo "true";
  14. }
  15. else{
  16. echo "false";
  17. }
  18. ?>

false
true

数字+字符(字符串)+数字 


  
  1. <?php
  2. $a= 8;
  3. $b= "8a8";
  4. $c= 0;
  5. if( $a== $b){
  6. echo "true";
  7. }
  8. else{
  9. echo "false";
  10. }
  11. echo '<br>';
  12. if( $c== $b){
  13. echo "true";
  14. }
  15. else{
  16. echo "false";
  17. }
  18. ?>

true
false

字符(字符串)+数字+字符(字符串)


  
  1. <?php
  2. $a= 0;
  3. $b= "a88a";
  4. if( $a== $b){
  5. echo "true";
  6. }
  7. else{
  8. echo "false";
  9. }
  10. ?>

true


转载:https://blog.csdn.net/qq_63701832/article/details/128708564
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场