wargame.kr 题目writeup

adm1nkyj

链接: http://wargame.kr:8080/adm1nkyj/

这题id和pw参数存在注入,关键在于不知道表的列名,如何绕过得到其中的pw和flag数据?

上面就是关键防护代码。查了许久,得到一个精妙的答案。用sql语句的子查询,完成了攻击:

可以顺利注入得到id,pw,flag三个字段的准确值,最后得到flag。学习到了子查询的用法。

counting_query

链接: http://wargame.kr:8080/counting_query

报错注入:

由于是存在临时表的:

经过测试,无法在一条sql语句中使用两次t_user临时表。接下来就不知道如何做下去了~~

dbms335

链接: http://wargame.kr:8080/dmbs335/

覆盖 $query_parts 即可注入。

htpasswd_crack

链接: http://wargame.kr:8080/crack_crack_crack_it/

爆破一下linux下的密码,脚本如下:

由于不知道后面有几位数字,写了个递归进行爆破,感觉不错~~

ip-log-table

链接: http://wargame.kr:8080/ip_log_table/

这是一个盲注题目,注入点在:

简单写个脚本:

jff3_magic

链接: http://wargame.kr:8080/jff3_magic/

这题还是挺有意思的。

  • 首先需要去掉js部分的弹框代码。这个用burp可以做到。

  • 然后是一个like注入得到password,用到0b二进制模式绕过waf。值得学习~~

脚本为:

  • 最后还用到了php magic的技巧

直接查询0e531247968804642688052356464312破解不出来,但是找到php magic

详情参考: https://www.whitehatsec.com/blog/magic-hashes/

login_filtering

链接: http://wargame.kr:8080/login_filtering

  • 方法一:

XDCTF2014有这道题目:
https://www.leavesongs.com/PENETRATION/Mini-XCTF-Writeup.html

写代码fuzz:

得到许多结果,其中一个:

  • 方法2:

后来发现,由于Mysql是不区分大小写的,所以可以用大写直接绕过~~

login-with-crypto

链接: http://wargame.kr:8080/login_with_crypto_but/

关键在于绕过这里:

  • 输入超长字符串让mysql_query执行结果出错,返回false。
  • 然后mysql_fetch_array($result);会同样会出错,提示:

因此,这里的$row就是NULL了,可以绕过$row === false。

这题又让我学到了新知识:超长字符串~~~~~

lonely_guys

链接: http://wargame.kr:8080/lonely_guys/

order by后面的盲注,同样的盲注脚本,关键如下:

md5_compare

md5_password

md5($ps,true) 有时会产生单引号。

mini_TBR

这个题目很经典。由一个变量覆盖漏洞,可以覆盖mysql数据库的ip,用户名和密码配置。在0ctf_2015上也有一道这样的题目。

  • 思路:

有变量覆盖漏洞;
覆盖db的设置,使其访问云主机数据库即可~~

  • 建立云主机数据库

建立一个管理员账户,使主机上的mysql可以远程登录:

建立一个题目要求的数据库和内容即可。

  • 漏洞点

index.php中变量覆盖漏洞:

function.php中获得flag:

- 访问获得flag

访问mysql云主机得到flag:

php-or-c

链接: http://wargame.kr:8080/php_c/

整数溢出问题。本地可以测试下:

32位int整数,最大值为2^31-1=2147483647 。 加5就溢出,产生负数了。

Payload:

pw_crack

链接: http://wargame.kr:8080/pw_crack/

基于时间的编程题,这题还是要拼人品的。flag过段时间就会变~~

需要一个客户端发送请求,然后一个端口接收来自服务器的连接,并发送password。根据请求时间判断flag对不对。(类似于基于时间的盲注)

req.py

sock.py

写个shell去启动两个脚本:

python -u 让python不启用缓冲,才能让日志信息实时输出。

strcmp

链接: http://wargame.kr:8080/strcmp/

用数组绕过strcmp比较函数。

dun-worry-about-the-vase

链接: http://wargame.kr:8080/dun_worry_about_the_vase/

CBC翻转

padding Oracle 漏洞,具体看《白帽子讲web安全》加密解密章节,这里只是使用CBC翻转攻击实现。

Padding Oracle

更新一下这个解法~ 最近遇到了,发现很重要~ 原理大概是:改变iv,如果解密错误(padding值不对),会有padding error的报错。这是一种边信道攻击手法。

关键:

  • 算出immediate_value
  • 有错误时,需要把返回内容打出来进行判断。例如,这道题目:遇到了invalid iv这种错误,是我没有url编码cookie导致的,以至于没有正确算出immediate_value

脚本如下:

总结

wargame里面题目大多不难,能学到许多知识。选取部分,记录一下~~ 做题目,最重要的是长长知识吧~~