2019 ISCC WEB trick笔记 (intval,chr)

WEB1

考的既然是简单题目,肯定是一些小trick,做的多的就会了。

<?php
error_reporting(0);
require 'flag.php';
$value = $_GET['value'];
$password = $_GET['password'];
$username = '';

for ($i = 0; $i < count($value); ++$i) {
    if ($value[$i] > 32 && $value[$i] < 127) unset($value);
    else $username .= chr($value[$i]);
    if ($username == 'w3lc0me_To_ISCC2019' && intval($password) < 2333 && intval($password + 1) > 2333) {
        echo 'Hello '.$username.'!', '<br>', PHP_EOL;
        echo $flag, '<hr>';
    }
}

highlight_file(__FILE__);

代码审计一波,就是传入数组,并且组成''w3lc0me_To_ISCC2019'',但是问题来了,要绕过$value[$i] > 32 && $value[$i] < 127,然后再chr变回字符,一开始我想用16进制或者8进制试试,发现不行。

我试了下chr(7777),竟然是a,想着是不是循环的,估计是对什么取模,查了下,发现确实是对256取模,呢么我们传入这些字符并且加上256就行了

写了个脚本,然后一个一个传过去。最后的一步是怎么绕过intval呢,可以传入16进制,令其强制转换。

payload如下:

 

 

 

 

WEB2

队友说,就是纯爆破。。我惊了。第一次做纯爆破的,一般都是套路下的。队友告诉我一款工具,Pkav HTTP Fuzzer ,可以爆破简单的带验证码的密码.

首先自己写个脚本生成以0-9为基本字符的一个3位数密码dict

 

 然后根据网上Pkav网上的教程,先抓包,然后数据包cv到指定对应拦中

因为验证码图片用了#,所以F12查看源码

所以地址即为     http://39.100.83.188:8002/vcode.php

然后添加到验证码识别的地方

 

 

重放选项中可以选择字符串匹配或者正则表达式匹配,我们匹配了flag

然后发包器开始,发现没有设置变体值,回去又设置了一下

 

 

 

 然后发包器start

 

 

 get

 

 

WEB4

web4又是一道代码审计的题目

<?php 
error_reporting(0); 
include("flag.php"); 
$hashed_key = 'ddbafb4eb89e218701472d3f6c087fdf7119dfdd560f9d1fcbe7482b0feea05a'; 
$parsed = parse_url($_SERVER['REQUEST_URI']); 
if(isset($parsed["query"])){ 
    $query = $parsed["query"]; 
    $parsed_query = parse_str($query); 
    if($parsed_query!=NULL){ 
        $action = $parsed_query['action']; 
    } 

    if($action==="auth"){ 
        $key = $_GET["key"]; 
        $hashed_input = hash('sha256', $key); 
        if($hashed_input!==$hashed_key){ 
            die("<img src='cxk.jpg'>"); 
        } 

        echo $flag; 
    } 
}else{ 
    show_source(__FILE__); 
}?>

爆出flag最关键的一步就是你输入的key

这个题目,我看了5分钟,突然想起来的一个知识点(变量覆盖)。之前看过一个文章,总结了一些引起变量覆盖的函数

我找了下收藏夹发现了他  https://www.freebuf.com/column/150731.html

parse_str会引起变量覆盖的漏洞,但是出现在比较老的php版本中,新版本貌似修复了,如果不是数组的话,什么都不返回(函数细节望百度,Google)

呢么我们可以将预先定义的$hashed_key覆盖,payload如下

http://39.100.83.188:8066/?action=auth&hashed_key=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b&key=1

hashed_key=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b   是1的sha256加密后字符串

key=1

这样就可以覆盖原来的hashed_key并且使传入的key与我们事先准备好的key的sha256加密

呢么就OK了

 

 

 

 

WEB5(根据大佬wp https://www.zhaoj.in/

UA头注入

order by盲注

这题是看了WP,并且WP中有一个语句是这样的,select*from table_name=''*'',相当于select*from table_name

我自己实验了如下:

发现只是匹配的字符。(算认识到的一个trick吧)

题目中的order by注入,其实是根据order by排序的顺序,出来的是字母或者数字小的条目

test1:order by 1 根据第一列,id排序

test2:order by 2根据第二列,name排序(数字在字母前面)

test3:order by 3,2,1如果第三列相同,则比较第二列(题目中已得到第二列,若passwrod第一位相等,呢么按照order by出来的一定是新条目,因为数字先字符)

 

 

 

posted @ 2019-09-12 13:33  yunying  阅读(753)  评论(0)    收藏  举报