pseudorandom攻防世界wp
本文最后更新于379 天前,其中的信息可能已经过时!

前言

看很多人的wp都是省略了很多东西,并且代码也用不了,而且跟我学的angr函数也有些不同(好像是py2),所以不如自己写一个

分析和思路

扔进IDA里先看看逻辑

逻辑还好,先是利用一个随机数生成了一堆变量,然后输入并检测,如果输入的所有数字都对的话就会自己吐出来flag(将s进行SHA加密)

如果输入的数对的话会不断放进s中,while结束后通过MD5加密s之后要是目标字符串以此来判断输入的正确性,很显然可以通过MD5还原出s来再扔进SHA加密得到flag,但是MD5爆破不出来,所以只能另寻他法

我们注意到在输入后还有一个检测,传入了随机数初始化的v16和input

可以逆该函数来找到input正确的逻辑,但是里面加了混淆(真不想手撕),所以要利用angr这个工具

但是v16怎么来呢,这只能调试了,但是kali版本太高就会缺失libcrypto.so.1.0.0库,所以要补一下

补libcrypto.so.1.0.0库(不需要的佬请忽略)

wget https://www.openssl.org/source/openssl-1.0.0.tar.gz
tar -vxzf openssl-1.0.0.tar.gz
cd openssl-1.0.0
mkdir build
vim openssl.ld

此时会进入vim文件操作,输入以下内容

OPENSSL_1.0.0 {
  global:
  *;
};

OPENSSL_1.0.1 {
  new*;
}OPENSSL_1.0.0;

OPENSSL_1.0.1p {
  new*;
}OPENSSL_1.0.0;

然后Esc键进入命令模式输入 :wq 退出并保存

然后编译后将他移动到/usr/lib下就可以了

./config no-asm shared -Wl,--version-script=openssl.ld --prefix=./build
make -j`nproc
sudo cp libcrypto.so.1.0.0 /usr/lib/

调试并angr解题

调起来之后,发现v16一直是0xffff 被放到edi里面了,esi里面是我们的输入的数字

import angr
import sys
import claripy
 
def main(argv):
    path = argv[1]
    p = angr.Project(path, auto_load_libs =False)
    init_state = p.factory.blank_state(addr = 0x0400EA0)
    init_state.regs.rdi = 0xffff           
    sm = p.factory.simgr(init_state)
    sm.explore(find = 0x0401039 , avoid = 0x0400AE0)
    if sm.found:
        solution_state = sm.found[0]
        solution_state.solver.add(solution_state.regs.eax == 1)  #是0就会进入Exit()函数
        print(solution_state.regs.rsi)
        
if __name__ == '__main__':
    main(sys.argv)

也是得到了第一次的输入,之后就是把正确的输入输进去,得到第二次的v16 ,修改一下脚本以此类推

第二次的v16是0x17fff 求得的正确输入是0x10000,从十六进制上能看出每次输入是前一次的两倍,但是中途会因为rdi的大小限制导致输入变化,需要在有异常的点再用angr解出来

然后会得到这样的一列数

32768
65536
131072
262144
524288
1048576
2097152
4194304
8388608
16777216
33554432
67108864
134217728
268435456
16384
32768
65536
131072
262144
524288
1048576
2097152
4194304
8388608
16777216
33554432
67108864
134217728
8192
16384
32768
65536
131072
262144
524288
1048576
2097152
4194304
8388608
16777216
4096
8192
16384
32768
65536
131072
262144
524288
1048576
2097152
2048
4096
8192
16384
32768
65536
131072
262144
524288
1048576
1024
2048
4096
8192
16384
32768
65536
131072
262144
524288
512
1024
2048
4096
8192
16384
32768
65536
131072
262144
256
512
1024
2048
4096
8192
16384
32768
65536
128
256
512
1024
2048
4096
8192
16384
32768
64
128
256
512
1024
2048
4096
32
64
128
256
16
32
64
128
8
16
32
64
4
8
16
32
2
1

输入后就有flag了

flag nullcon{50_5tup1d_ch4113ng3_f0r_e1i73er_71k3-y0u}

如果本文对您有帮助,能否给个一键三连 (bushi)
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇